在 SSE 中,128 位寄存器可以表示为 4 个 32 位元素或 2 个 64 位元素。
SSE 定义了两种类型的操作;标量和打包。标量运算仅对最不重要的数据元素(位 0~31 或 0~63)进行运算,打包运算并行计算所有元素。
_mm_cmpeq_sd
设计用于处理双精度(64 位)浮点元素,并且只会比较两个操作数(标量)的最低有效数据元素(前 64 位)。
_mm_cmpeq_pd
被设计用于双精度(64 位)浮点元素,但将并行(打包)比较每两组 64 位。
_mm_cmpeq_ss
设计用于处理单精度(32 位)浮点元素,并且只会比较两个操作数(标量)的最低有效数据元素(前 32 位)。
_mm_cmpeq_ps
设计用于处理单精度(32 位)浮点元素,并将并行(打包)比较每组 32 位。
如果您使用 32 位浮点数,则可以将浮点数打包成四组以利用 128 位空间。这样,_mm_cmpeq_ps
就可以并行进行 4 个比较。
如果您使用的是 64 位双精度,则可以成对打包双精度以利用 128 位空间。这样,_mm_cmpeq_pd
就可以并行进行 2 个比较。
如果您一次只想进行一次比较,可以使用_mm_cmpeq_sd
比较两个 64 位 double 或_mm_cmpeq_ss
比较两个 32 位 float。
请注意,_mm_cmpeq_sd
and_mm_cmpeq_pd
是 SSE2,而_mm_cmpeq_ss
and_mm_cmpeq_ps
是 SSE。