| 指令 | 操作 | 输入数据类型 | 输出数据类型 |
|---|---|---|---|
pcmpeqw | 比较 a 和 b 中的 16 位整数是否相等,并将结果存储在 dst 中。 | __m128i a, __m128i b | __m128i dst |
pcmpeqd | 比较 a 和 b 中的 32 位整数是否相等,并将结果存储在 dst 中。 | __m128i a, __m128i b | __m128i dst |
pcmpeqq | 比较 a 和 b 中的 64 位整数是否相等,并将结果存储在 dst 中。 | __m128i a, __m128i b | __m128i dst |
pcmpeqb | 比较 a 和 b 中的 8 位整数是否相等,并将结果存储在 dst 中。 | __m128i a, __m128i b | __m128i dst |
以下表格总结了四个指令的区别:
| 特征 | pcmpeqw | pcmpeqd | pcmpeqq | pcmpeqb |
|---|---|---|---|---|
| 输入数据类型 | 16 位整数 | 32 位整数 | 64 位整数 | 8 位整数 |
| 输出数据类型 | __m128i | __m128i | __m128i | __m128i |
| CPUID 标志 | SSE2 | SSE2 | SSE4.1 | SSE2 |
| 操作 | 比较 packed 整数是否相等 | 比较 packed 整数是否相等 | 比较 packed 整数是否相等 | 比较 packed 整数是否相等 |
| 每个元素的延迟 | 10.5 周期 | 10.5 周期 | 10.5 周期 | 10.5 周期 |
| 吞吐量(CPI) | 0.77 | 0.77 | 0.77 | 0.77 |
总体而言,这四个指令都用于比较 packed 整数是否相等。它们的区别在于输入数据类型和延迟。
pcmpeqw和pcmpeqb的输入数据类型分别是 16 位整数和 8 位整数,延迟为 10.5 周期。pcmpeqd和pcmpeqq的输入数据类型分别是 32 位整数和 64 位整数,延迟也为 10.5 周期。
在选择指令时,应考虑输入数据类型和延迟。如果输入数据类型是 16 位或 8 位,则应使用 pcmpeqw 或 pcmpeqb。如果输入数据类型是 32 位或 64 位,则应使用 pcmpeqd 或 pcmpeqq。