是否可以在 VC++ 中对乘法进行向量化?没有SSE4?
我想向量化乘法运算。我尝试使用 _mm_mul_epi32
,但我的 CPU 仅支持“MMX、SSE (1,2,3,3S)、EM64T”指令。
有人可以告诉我是否可以尝试其他功能吗?
I want to vectorize a multiplication operation. I tried using _mm_mul_epi32
, but my CPU has only support for the "MMX, SSE (1,2,3,3S), EM64T" instruction.
Can someone please tell if I can try another function?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这取决于被乘数的范围 - 如果它们适合 16 位,则在 SSE4 之前有许多 16 x 16 位多重 SSE 指令可用(例如
mm_madd_epi16
、mm_mulhi_epi16
、mm_mullo_epi16
、mm_mulhrs_epi16
等)。如果您需要 32 位操作数但它们是无符号的,那么您可以使用
mm_mul_epu32
。或者,您可以转换为浮点数,并使用
_mm_mul_ps
(SSE 中的整数 <-> 浮点数转换非常高效,如果它能让您获得 4 倍的 SIMD 吞吐量改进,那么成本可能是合理的)。It depends on the range of your multiplicands - it they fit within 16 bits then there are a number of 16 x 16 bit multiple SSE instructions available prior to SSE4 (e.g.
mm_madd_epi16
,mm_mulhi_epi16
,mm_mullo_epi16
,mm_mulhrs_epi16
, etc).If you need 32 bit operands but they are unsigned then you can use
mm_mul_epu32
.Alternatively you may convert to float, and use
_mm_mul_ps
(integer <-> float conversion in SSE is quite efficient, and the cost may be justified if it gets you a 4x SIMD throughput improvement).