代码之家  ›  专栏  ›  技术社区  ›  jiandingzhe

这些128位SIMD异或运算[重复]之间的区别是什么

  •  5
  • jiandingzhe  · 技术社区  · 9 年前

    Intel提供了几个SIMD命令,这些命令似乎都对128位数据执行逐位XOR:

    _mm_xor_pd(__m128d, __m128d)
    _mm_xor_ps(__m128, __m128)
    _mm_xor_si128(__m128i, __m128i)
    

    按位操作不是只对位流进行操作吗?为什么有三种类型不同但数据大小相同的操作?

    2 回复  |  直到 3 年前
        1
  •  3
  •   Tim Child    9 年前

    _mm_xor_pd(__m128d,__m128d)对两个64位双精度浮点运算

    [ https://msdn.microsoft.com/en-us/library/w87cdc33%28v=vs.90%29.aspx 1

    _mm_xor_ps(__m128d,__m128d)对四个32位单精度浮点运算

    https://msdn.microsoft.com/en-us/library/ss6k3wk8(v=vs.90).aspx

    _mm_xor_s128(__m128d,__m128d)对一个128位值进行运算

    https://msdn.microsoft.com/en-us/library/fzt08www%28v=vs.90%29.aspx

    可以在任意两个二进制数之间使用XOR,无论其格式如何。为什么是三个?因为支持常见的数据类型(浮点、双精度和128位),而不需要两条指令,这是一种平衡。

    平衡是硅的使用量,因为每组操作可能以单独的功能单位(整数、浮点、双精度)进行。如果他们使用不同的硅,所有不同类型的操作都可以并行执行。

        2
  •  2
  •   AntoineL    9 年前

    从严格的C角度来看,它们都因类型而异。

    它们也可能是CPU想要管理哪种数据的提示。至少这是对 experts 伴随…发生。正如他们所说,这需要在硬件上进行检查。