将 2 个 32 位数字相乘并使用 AVX2 取前 32 位
Multiplying 2 32-bit numbers and taking the top 32 bits using AVX2
我正在使用乘法(加上其他运算)代替整数除法。我的解决方案最终要求我将 2 个 32 位数字相乘并取前 32 位(就像 mulhi 函数一样),但 AVX2 不提供 _mm256_mulhi_epu16 的 32 位变体(例如:没有 '_mm256_mulhi_epu32'函数).
我试过各种方法,比如检查AVX512的功能,甚至把32位整数操作成2个hi/lo 16位整数。我对使用低级编程还很陌生,所以我不知道什么是最佳的,甚至不知道什么是可能的。
这可以通过执行以下操作来完成:
__m256i t1 = _mm256_mul_epu32(m, n);
t1 = _mm256_srli_epi64(t1, 32);
我正在使用乘法(加上其他运算)代替整数除法。我的解决方案最终要求我将 2 个 32 位数字相乘并取前 32 位(就像 mulhi 函数一样),但 AVX2 不提供 _mm256_mulhi_epu16 的 32 位变体(例如:没有 '_mm256_mulhi_epu32'函数).
我试过各种方法,比如检查AVX512的功能,甚至把32位整数操作成2个hi/lo 16位整数。我对使用低级编程还很陌生,所以我不知道什么是最佳的,甚至不知道什么是可能的。
这可以通过执行以下操作来完成:
__m256i t1 = _mm256_mul_epu32(m, n);
t1 = _mm256_srli_epi64(t1, 32);