D 中的显式 simd 代码
Posted
技术标签:
【中文标题】D 中的显式 simd 代码【英文标题】:Explicit simd code in D 【发布时间】:2012-12-22 12:45:10 【问题描述】:现在是否可以在开箱即用的 D 中做到这一点?如果有帮助,我正在使用 LDC2 编译器。 我对使用 AVX 内在函数很感兴趣。
【问题讨论】:
【参考方案1】:目前 DMD 没有 AVX 内在函数。考虑到所有 D 编译器都使用 DMD 前端,以及 druntime 和 phobos,我想说,做你想做的唯一方法是使用 BCS 建议的内联汇编。
我建议您不时检查 core.simd
模块,看看是否添加了 AVX 内部函数。
【讨论】:
【参考方案2】:有内联 ASM。我认为 DMD 支持 SIMD 指令。不知道 LDC 的故事是什么。
【讨论】:
内联 ASM 是完全不可行的,因为是手动分配寄存器。 如果你不想要asm,那么你想要什么'explicit'?可以放心使用它们的东西吗?我假设您已经检查了内在函数列表?剩下的就是编译器承诺在数组操作中使用它们。 显式我的意思是使用像_mm256_load_ps
这样的内在函数并声明__m256
变量等,就像你使用gcc或clang一样。还是谢谢你。【参考方案3】:
对于 LDC,模块 ldc.gccbuiltins_x86
包含 GCC 样式的内置函数,例如 __builtin_ia32_vfnmaddps256
。
(还有ldc.gccbuiltins_arm
,和ldc.gccbuiltins_ppc
,...)
【讨论】:
以上是关于D 中的显式 simd 代码的主要内容,如果未能解决你的问题,请参考以下文章