我想矢量化乘法运算。我尝试使用_mm_mul_epi32
,但我的CPU只支持“MMX,SSE(1,2,3,3S),EM64T”指令。
有人可以告诉我是否可以尝试其他功能吗?
答案 0 :(得分:4)
它取决于被乘数的范围 - 它们适合16位,然后在SSE4之前有许多16 x 16位多个SSE指令(例如mm_madd_epi16
,mm_mulhi_epi16
,{ {1}},mm_mullo_epi16
等。)
如果您需要32位操作数但未签名,则可以使用mm_mulhrs_epi16
。
或者你可以转换为float,并使用mm_mul_epu32
(SSE中的整数&lt; - &gt;浮点转换是非常有效的,如果它能为你提供4倍的SIMD吞吐量提升,那么成本可能是合理的。)< / p>