AVX2:有没有办法实现 _mm256_mul_epi8 函数的 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);
- 注意:如果已知 `b` 小于 `32`,则不需要位掩码操作。
THE END
二维码