这些 128 位 SIMD 异或运算有什么区别

What is the difference between these 128bit SIMD xor operations

Intel提供了几个SIMD命令,好像都是对128位数据进行按位异或:

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

按位运算不是只能对比特流进行运算吗?为什么会出现三种类型不同但数据大小相同的操作?

_mm_xor_pd(__m128d, __m128d) 在两个 64 位双精度浮点数上运行

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

_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。为什么是三个?因为它是支持常见数据类型(float、double 和 128 位)和没有两条指令的平衡。

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

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

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