假设我有两个无符号整数(8 位)打包寄存器 a 和 b。我想比较它们并返回 +1(a > b)、0(a=b)或 -1(a < b. Alternatively, distance also works (i.e. instead of -1/+1, the actual difference is returned).
)有效完成此任务的 SIMD(大概是 AVX2)方法是什么?我无法使用 AVX512,但很高兴知道这是否是 AVX512 功能。
a <=> b
对于有符号字节将是 _mm256_subs_epi8(a, b)
(饱和相减)
a <=> b
对于无符号字节将是 _mm256_sub_epi8(a, b)
(只需减去)
结果可以使用
-1 / 0 / 1
标准化为
_mm256_sign_epi8(_mm256_set1_epi8(-1), res)