是否可以在没有SSE4的情况下在C ++中对乘法进行矢量化?

时间:2011-03-27 21:27:25

标签: x86 sse simd

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

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

1 个答案:

答案 0 :(得分:4)

它取决于被乘数的范围 - 它们适合16位,然后在SSE4之前有许多16 x 16位多个SSE指令(例如mm_madd_epi16mm_mulhi_epi16,{ {1}},mm_mullo_epi16等。)

如果您需要32位操作数但未签名,则可以使用mm_mulhrs_epi16

或者你可以转换为float,并使用mm_mul_epu32(SSE中的整数&lt; - &gt;浮点转换是非常有效的,如果它能为你提供4倍的SIMD吞吐量提升,那么成本可能是合理的。)< / p>