x86-64 SIMD 机制“比较”整数?

问题描述 投票:0回答:1

假设我有两个无符号整数(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 功能。

simd avx avx2 avx512
1个回答
0
投票

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)

© www.soinside.com 2019 - 2024. All rights reserved.