AVX2:有没有办法实现 2 的恒定幂的 _mm256_mul_epi8 函数?

AVX2: Is there a way to implement _mm256_mul_epi8 function for a constant power of 2?

我想在8位元素上实现以下操作:

_a = _b * 8 + _c

用向量。对于加号,显然有 _mm256_add_epi8 但我找不到 _mm256_mul_epi8 或与 8 位元素相乘的东西。我也试图找到一个左移 3 的函数,但没有成功。

感谢您的帮助!

您只需添加即可:

__m256i _b2 = _mm256_add_epi8(_b,_b);
__m256i _b4 = _mm256_add_epi8(_b2,_b2);
__m256i _b8 = _mm256_add_epi8(_b4,_b4);
__m256i _a = _mm256_add_epi8(_b8,_c);

您也可以对任何移位执行此操作,如果您屏蔽掉每个字节的高位以模拟移出:

// not needed if _b values are smaller than 32
__m256i _b_low = _mm256_and_si256(_b,_mm256_set1_epi8(0x1F));

__m256i _b8 = _mm256_slli_epi32(_b_low,3);
__m256i _a = _mm256_add_epi8(_b8,_c);