使用AVX2有条件地选择常量值

时间:2016-04-18 03:25:29

标签: x86 simd intrinsics avx avx2

我正在寻找一种基于AVX2值的特定条件选择AVX2常数的无分支方式。

我正在做的伪代码:

condition = _mm256_cmp_gt(value, limit);
result = _mm256_or(_mm256_and(condition, constant_a), 
                   _mm256_andnot(condition, constant_b));

有没有比这更有效的东西?

1 个答案:

答案 0 :(得分:4)

您可以使用“混合”指令,例如_mm256_blendv_epi8

condition = _mm256_cmpgt_epi32(value, limit);
result = _mm256_blendv_epi8 (constant_a, constant_b, condition);

(请注意,_epi8内在函数可用于任何元素宽度,因为它只是根据掩码内容逐字节地从A和B中选择。)