查看指令集和指令,比如pcmpeq

198 阅读2分钟

网址:www.intel.com/content/www…

指令操作输入数据类型输出数据类型
pcmpeqw比较 ab 中的 16 位整数是否相等,并将结果存储在 dst 中。__m128i a, __m128i b__m128i dst
pcmpeqd比较 ab 中的 32 位整数是否相等,并将结果存储在 dst 中。__m128i a, __m128i b__m128i dst
pcmpeqq比较 ab 中的 64 位整数是否相等,并将结果存储在 dst 中。__m128i a, __m128i b__m128i dst
pcmpeqb比较 ab 中的 8 位整数是否相等,并将结果存储在 dst 中。__m128i a, __m128i b__m128i dst

以下表格总结了四个指令的区别:

特征pcmpeqwpcmpeqdpcmpeqqpcmpeqb
输入数据类型16 位整数32 位整数64 位整数8 位整数
输出数据类型__m128i__m128i__m128i__m128i
CPUID 标志SSE2SSE2SSE4.1SSE2
操作比较 packed 整数是否相等比较 packed 整数是否相等比较 packed 整数是否相等比较 packed 整数是否相等
每个元素的延迟10.5 周期10.5 周期10.5 周期10.5 周期
吞吐量(CPI)0.770.770.770.77

总体而言,这四个指令都用于比较 packed 整数是否相等。它们的区别在于输入数据类型和延迟。

  • pcmpeqwpcmpeqb 的输入数据类型分别是 16 位整数和 8 位整数,延迟为 10.5 周期。
  • pcmpeqdpcmpeqq 的输入数据类型分别是 32 位整数和 64 位整数,延迟也为 10.5 周期。

在选择指令时,应考虑输入数据类型和延迟。如果输入数据类型是 16 位或 8 位,则应使用 pcmpeqwpcmpeqb。如果输入数据类型是 32 位或 64 位,则应使用 pcmpeqdpcmpeqq