xmmintrin.h 与 gcc 向量扩展
Posted
技术标签:
【中文标题】xmmintrin.h 与 gcc 向量扩展【英文标题】:xmmintrin.h vs gcc vector extensions 【发布时间】:2011-05-03 02:20:13 【问题描述】:我应该更喜欢哪种方法来编写 SIMD 指令?
mm* *mmintrin.h 形式的方法似乎更易于跨编译器移植。
但 gcc vector extensions 似乎可以生成更简单的代码,并支持更多架构。
那么哪种方法最好呢?
【问题讨论】:
你可以同时使用。我就是做这个的。矢量扩展涵盖了大多数垂直操作,这是您大部分时间应该使用的。当您需要其他操作时,您可以强制转换。例如,如果您有一个 16 字节向量x
,您可以使用 _mm_movemask_epi8((__m128i)x)
。
【参考方案1】:
如果您使用 gcc 矢量扩展,您将只能使用 SSE 功能的有限子集,因为有许多 SSE 内在函数不适合 gcc 等通用矢量模型。如果您只想做相当基本的事情,例如向量上的浮点运算,那么您可能会侥幸成功,但是如果您有兴趣利用 SIMD 来获得最大的性能优势,那么您需要使用本机内在函数。
【讨论】:
【参考方案2】:*mmintrin.h 文件中可用的内在函数仅在 SSE 机器上可用,但它们在不同的编译器中可用。 GCC 矢量扩展受到更多限制,但可以在更广泛的平台上实现,而且显然是 GCC 特定的。
与所有事情一样,没有“最佳”答案;你必须选择一个适合你的需求。
【讨论】:
以上是关于xmmintrin.h 与 gcc 向量扩展的主要内容,如果未能解决你的问题,请参考以下文章