是否可以在没有 SSE4 的情况下在 VC++ 中向量化乘法?

Posted

技术标签:

【中文标题】是否可以在没有 SSE4 的情况下在 VC++ 中向量化乘法?【英文标题】:Is it possible to vectorize a multiplication in VC++ without SSE4? 【发布时间】:2011-03-27 21:27:25 【问题描述】:

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

谁能告诉我是否可以尝试其他功能?

【问题讨论】:

查看我的 SSE2 整数乘法库:github.com/LiraNuna/glsl-sse2/blob/master/source/ivec4.h#L404 glsl-sse2 看起来很有趣,但我无法弄清楚代码许可证。我错过了什么?如果您尚未选择许可证并且您的意图是免费共享,我建议您查看 boost 软件许可证。 【参考方案1】:

这取决于您的被乘数的范围 - 如果它们适合 16 位,那么在 SSE4 之前有许多 16 x 16 位多 SSE 指令可用(例如 mm_madd_epi16mm_mulhi_epi16mm_mullo_epi16、@ 987654324@等)。

如果您需要 32 位操作数但它们是无符号的,那么您可以使用 mm_mul_epu32

或者,您可以转换为浮点数,并使用_mm_mul_ps(整数 在 SSE 中浮点数转换非常有效,如果它使您的 SIMD 吞吐量提高了 4 倍,那么成本可能是合理的)。

【讨论】:

这与个人无关,我会“跟踪”任何发布有关 SSE、SIMD 等内容的人 ;-)

以上是关于是否可以在没有 SSE4 的情况下在 VC++ 中向量化乘法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 segue 的情况下在 Swift 3 中将数据从 VC 传递到另一个?

是否可以在没有鼠标的情况下在 zathura 中选择文本?

是否可以在没有外部文件的情况下在 Java 中保存进度?

是否可以在没有目标实体的情况下在 Doctrine2 中建立关联?

是否可以在没有设置器的情况下在属性中设置值?

是否可以在没有动态多态性的情况下在 C++ 中实现状态设计模式?