【发布时间】:2020-12-01 21:52:50
【问题描述】:
是 std::transform SIMD 吗?我的意思是如果我有两个数组
std::array<int,4> a{1,2,3,4}; 和 std::array<int,4> b{1,2,3,4};。让我们将这两个数组与std::transform(a.begin(),a.end(),b.begin(),result.begin(),std::plus<>()); 相加,并将结果存储在一个新的std::array<int,4> result; 数组中。我用 SIMD 命令求和了吗?如果不是,我怎样才能实现 SIMD?
注意:我正在使用 clang 进行编译,优化级别为 -O3 并进行发布构建。
【问题讨论】:
-
唯一知道的方法是编译和检查程序集。 C++ 标准不要求它创建 SIMD 指令。
-
这将取决于编译器、编译器标志和可能的编译指示
-
@1201ProgramAlarm 更新了问题
-
@NathanOliver 我不太懂汇编,不过这是godboltgodbolt.org/z/KE53cK生成的汇编代码,请看)
-
如果您真的非常想要一个 simd 转换,请查看github.com/xtensor-stack/xsimd