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`,则不需要位掩码操作。

以上是AVX2:有没有办法实现 _mm256_mul_epi8 函数的 2 的恒定幂?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>