这些128位SIMD xor操作之间有什么区别

时间:2015-03-18 13:04:11

标签: simd sse2

英特尔提供了几个SIMD命令,它们似乎都在128位数据上执行按位异或运算:

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

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

2 个答案:

答案 0 :(得分:3)

_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_si128(__ m128d,__ m128d)在一个128位值上运行

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

可以在任意两个二进制数之间使用XOR,无论其格式如何。为什么三个?因为它是支持常见数据类型(浮点数,双精度和128位)的平衡,并且没有两个很多指令。

余额是使用的硅量,因为每组操作可能以单独的功能单元(整数,浮点,双精度)发生。如果他们使用不同的硅,所有不同类型的操作可以并行执行。

答案 1 :(得分:2)

从严格的C角度来看,由于类型的不同,它们都是不同的。

它们也可能是CPU提示您打算管理哪种数据的提示。至少这是experts带来的最佳解释。正如他们所说,这需要在硬件上进行检查。