英特尔提供了几个SIMD命令,它们似乎都在128位数据上执行按位异或运算:
_mm_xor_pd(__m128d, __m128d)
_mm_xor_ps(__m128, __m128)
_mm_xor_si128(__m128i, __m128i)
不按位操作只对比特流进行操作吗?为什么有三种操作具有不同类型但数据大小相同?
答案 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带来的最佳解释。正如他们所说,这需要在硬件上进行检查。