我想对 8 位元素实现以下操作:_a = _b * 8 + _c
与 vector 。对于加号,显然是_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);
关于c++ - AVX2:有没有办法实现 _mm256_mul_epi8 函数的 2 的恒定幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68983613/