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 代码的主要内容,如果未能解决你的问题,请参考以下文章

g ++中的显式模板专业化导致麻烦

自动将通配符导入重构为 IntelliJ 中的显式导入(用于 Scala/Java)

运算符重载中的显式构造?

C++17 中的显式默认构造函数

Swift 2 中的显式老式错误处理

柴油中的显式 JOIN ON