【发布时间】:2017-05-24 03:46:46
【问题描述】:
如何使用 SSE 内在函数将 16 个 8 位整数除以 4(或将它们向右移动 2)?
【问题讨论】:
-
我认为只要指定正确的 -march 或 -mtune 就会自动发生:godbolt.org/g/jxGyFd
-
首先,该工具非常适合 StackOverflow 等问答页面。我马上给它加了书签。对于答案的真实内容,谢谢,我会看看程序集,如果编译器在某些情况下自动执行它,我应该能够从程序集中读取它。
-
@RichardHodges 我发现这段代码实际上相当令人失望,不过 Clang 做得很好。
-
@harold 为什么令人失望?请记住,它正在处理未在 SSE 兼容边界上对齐的块的病理情况。一旦它处理了边缘情况,主块就会被矢量化。如果您将指针标记为对齐,我相信您会看到完美的代码。
-
嗯,不,用 16 字节对齐注释指针对 GCC 没有帮助。事实证明,真正的 区别在于
mtune=native导致 Clang 假设支持 AVX2,而 GCC 假设仅支持 AVX。如果你明确地将-mavx2传递给 GCC,你会得到更好的输出,类似于 Clang 的输出。当然,Clang 不会改变。关于为什么“本机”对于您无法控制其系统规范的在线编译器没有多大意义的一个很好的教训。 :-) @richard
标签: c++ x86 sse simd intrinsics