我正在使用乘法(加上其他运算)代替整数除法。我的解决方案最终要求我将2个32位数字相乘并取前32位(就像mulhi函数一样),但是AVX2不提供_mm256_mulhi_epu16的32位变体(例如:没有'_mm256_mulhi_epu32'函数)。
我尝试了各种方法,例如检查AVX512的功能,甚至将32位整数处理为2个高/低16位整数。我对使用低级编程非常陌生,因此我不知道什么是最佳的,甚至是可能的。
答案 0 :(得分:3)
这可以通过执行以下操作来完成:
__m256i t1 = _mm256_mul_epu32(m, n);
t1 = _mm256_srli_epi64(t1, 32);