x86 - 是否可以在不使用 SSE4 的情况下对 VC++ 中的乘法进行向量化?

标签 x86 sse simd

我想向量化乘法运算。我尝试使用 _mm_mul_epi32,但我的 CPU 仅支持“MMX、SSE (1,2,3,3S)、EM64T”指令。

有人可以告诉我是否可以尝试其他功能吗?

最佳答案

这取决于被乘数的范围 - 如果它们适合 16 位,则在 SSE4 之前有许多 16 x 16 位多重 SSE 指令可用(例如 mm_madd_epi16mm_mulhi_epi16 mm_mullo_epi16mm_mulhrs_epi16 等)。

如果您需要 32 位操作数但它们是无符号的,那么您可以使用 mm_mul_epu32

或者,您可以转换为 float ,并使用 _mm_mul_ps (SSE 中的整数 <-> float 转换非常高效,如果它能让您获得 4 倍的 SIMD 吞吐量改进,那么成本可能是合理的)。

关于x86 - 是否可以在不使用 SSE4 的情况下对 VC++ 中的乘法进行向量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5452575/

相关文章:

创建 x86 Bootstrap

c++ - _mm_cmpistri 反向

sse - AVX2:U8绝对差

x86 - AVX2中广播高字

gcc inline - 'cmp' 的操作数类型不匹配

c - 生成的汇编代码包含一系列到下一个内存位置的跳转命令,目的是什么

assembly - 什么是学习MASM代码(不是HLA)的好资源?

c++ - SSE 加载相邻值

openmp - Intel 的 pragma simd 与 OpenMP 的 pragma omp simd