将两个 32 位整数向量相乘,产生一个 32 位结果元素向量

Multiply two vectors of 32bit integers, producing a vector of 32bit result elements

将两个 _mm256i 寄存器的每个 32 位条目相乘的最佳方法是什么?

_mm256_mul_epu32 不是我要找的,因为它会产生 64 位输出。我想要每个 32 位输入元素的 32 位结果。

另外,我确定两个32位值相乘不会溢出。

谢谢!

您需要 _mm256_mullo_epi32() 内在函数。来自英特尔的优秀online intrinsics guide:

Synopsis

__m256i _mm256_mullo_epi32 (__m256i a, __m256i b)
#include "immintrin.h" 
Instruction: vpmulld ymm, ymm, ymm CPUID Flags: AVX2 

Description

Multiply the packed 32-bit integers in a and b, producing intermediate 64-bit integers, and store the low 32 bits of the intermediate integers in dst.