在VC++中是否可以对乘法进行向量化而不使用SSE4?

4

我想对乘法操作进行向量化。我尝试使用_mm_mul_epi32,但我的CPU只支持"MMX,SSE(1,2,3,3S),EM64T"指令。

请问是否有其他函数可以尝试?


请查看我的SSE2整数乘法库:https://github.com/LiraNuna/glsl-sse2/blob/master/source/ivec4.h#L404 - LiraNuna
glsl-sse2 看起来很有趣,但我没能找到代码许可证信息。我错过了什么吗?如果您还没有选择一个许可证并且打算自由共享,我建议您看看 Boost 软件许可证。 - Mark Borgerding
1个回答

4
这取决于您的乘数范围 - 如果它们适合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吞吐量的提升,则成本可能是合理的)。

没什么个人恩怨,我只是“跟踪”任何发布有关SSE、SIMD等的人。;-) - Paul R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接