使用AVX2

时间:2019-11-06 19:27:41

标签: c assembly x86 low-level avx2

我正在使用乘法(加上其他运算)代替整数除法。我的解决方案最终要求我将2个32位数字相乘并取前32位(就像mulhi函数一样),但是AVX2不提供_mm256_mulhi_epu16的32位变体(例如:没有'_mm256_mulhi_epu32'函数)。

我尝试了各种方法,例如检查AVX512的功能,甚至将32位整数处理为2个高/低16位整数。我对使用低级编程非常陌生,因此我不知道什么是最佳的,甚至是可能的。

1 个答案:

答案 0 :(得分:3)

这可以通过执行以下操作来完成:

__m256i t1 = _mm256_mul_epu32(m, n);
t1 = _mm256_srli_epi64(t1, 32);