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

标签 x86 sse intrinsics avx avx2

将两个 _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.

关于x86 - 将两个 32 位整数向量相乘,生成一个 32 位结果元素向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28479429/

相关文章:

assembly - AT&T 语法中 (%eax) 的含义?

c++ - 在 Visual Studio 2010/2012 和 Release 模式下使用 SSE 内部函数时结果不正确

c - x86指令中的非阻塞内存写入?

x86 - 使用 SSE 的位集的实现和性能

c++ - 比较总订单的两个 __m128i 值

code-generation - x86指令编码表

assembly - 为什么将 32 位寄存器移动到堆栈然后从堆栈移动到 xmm 寄存器?

c++ - 在 arm neon 中高效地重新洗牌和组合 16 个 3 位数字

c++ - 有效地计算 arm neon 中 16 字节缓冲区中不同值的数量

multithreading - `xchg` 是否包含 `mfence` 假设没有非时间指令?