【问题标题】:xmmintrin.h vs gcc vector extensionsxmmintrin.h 与 gcc 向量扩展
【发布时间】:2011-05-03 02:20:13
【问题描述】:

我应该更喜欢哪种方法来编写 SIMD 指令?

mm* *mmintrin.h 形式的方法似乎更易于跨编译器移植。

但 gcc vector extensions 似乎可以生成更简单的代码,并支持更多架构。

那么哪种方法最好呢?

【问题讨论】:

  • 你可以同时使用。我就是做这个的。矢量扩展涵盖了大多数垂直操作,这是您大部分时间应该使用的。当您需要其他操作时,您可以强制转换。例如,如果您有一个 16 字节向量 x,您可以使用 _mm_movemask_epi8((__m128i)x)

标签: gcc sse simd


【解决方案1】:

如果您使用 gcc 矢量扩展,您将只能使用 SSE 功能的有限子集,因为有许多 SSE 内在函数不适合 gcc 等通用矢量模型。如果您只想做相当基本的事情,例如向量上的浮点运算,那么您可能会侥幸成功,但是如果您有兴趣利用 SIMD 来获得最大的性能优势,那么您需要使用本机内在函数。

【讨论】:

    【解决方案2】:

    *mmintrin.h 文件中可用的内在函数仅在 SSE 机器上可用,但它们在不同的编译器中可用。 GCC 矢量扩展受到更多限制,但可以在更广泛的平台上实现,而且显然是 GCC 特定的。

    与所有事情一样,没有“最佳”答案;你必须选择一个适合你的需求。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2012-03-08
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多