是否可以在 VC++ 中对乘法进行向量化?没有SSE4?

发布于 2024-10-26 19:07:45 字数 118 浏览 1 评论 0原文

我想向量化乘法运算。我尝试使用 _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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜嗑 2024-11-02 19:07:45

这取决于被乘数的范围 - 如果它们适合 16 位,则在 SSE4 之前有许多 16 x 16 位多重 SSE 指令可用(例如 mm_madd_epi16mm_mulhi_epi16mm_mullo_epi16mm_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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文