同时使用多个SIMD指令集的好处

3
我正在编写一个高度并行的多线程应用程序。我已经编写了一个支持SSE加速的线程类。如果我再编写一个支持MMX加速的线程类,然后同时运行两个线程(每个核心一个SSE线程和一个MMX线程),是否会显著提高性能?
我认为这种设置可以帮助隐藏内存延迟,但在开始投入时间之前,我想确认一下。

3
你下面得到了一些不错的答案,但我认为编写一些测试代码并获得实际的真实数据可能会得到更好的答案。 - JUST MY correct OPINION
2个回答

8
SSE和MMX指令集在CPU中共享相同的向量处理执行单元。因此,运行SSE线程和MMX线程将使每个线程具有与运行两个SSE线程(或两个MMX线程)相同的可用资源。唯一的区别在于,存在于SSE但不存在于MMX中的指令(因为SSE是MMX的扩展)。但在这种情况下,MMX可能会更慢,因为它没有那些更先进的指令可用。
因此,答案是:与运行两个SSE线程相比,您不会看到性能提高。

-1

SSE和MMX使用相同的寄存器,因此你使用其中之一都无所谓(当然除了MMX很差而SSE很有用的情况下)

更好的问题是SSE在目标CPU上如何实现。它是否每个核心都有一个SSE单元?(很可能)如果是这样,那么你可以在每个线程上运行SSE指令。

如果它在多个核心之间共享SSE单元,则不同的线程将会争夺它,因此在多个线程中执行SSE指令不会带来太多收益。(我不知道是否有任何CPU实际上在线程之间共享SSE单元,因此请将其视为假设情况)


1
抱歉?SSE使用自己的128位寄存器,而MMX则滥用浮点寄存器。 - jakogut

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