我想向量化乘法运算。我尝试使用 _mm_mul_epi32
,但我的 CPU 仅支持“MMX、SSE (1,2,3,3S)、EM64T”指令。
有人可以告诉我是否可以尝试其他功能吗?
最佳答案
这取决于被乘数的范围 - 如果它们适合 16 位,则在 SSE4 之前有许多 16 x 16 位多重 SSE 指令可用(例如 mm_madd_epi16
、mm_mulhi_epi16
、mm_mullo_epi16
、mm_mulhrs_epi16
等)。
如果您需要 32 位操作数但它们是无符号的,那么您可以使用 mm_mul_epu32
。
或者,您可以转换为 float ,并使用 _mm_mul_ps
(SSE 中的整数 <-> float 转换非常高效,如果它能让您获得 4 倍的 SIMD 吞吐量改进,那么成本可能是合理的)。
关于x86 - 是否可以在不使用 SSE4 的情况下对 VC++ 中的乘法进行向量化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5452575/