2010-05-15 26 views
4

我正在编写多线程的高度并行应用程序。我已经写了一个SSE加速的线程类。如果我要编写MMX加速线程类,那么同时运行两个线程(一个SSE线程和一个每个内核的MMX线程)会使性能显着提高吗?同时使用多个SIMD指令集的好处

我认为这样的设置可以帮助隐藏内存延迟,但是我想在开始向它倾注时间之前确定。

+3

您在下面有一些很好的答案,但我认为通过编写可以获得更好的答案一些测试代码和获得真实世界的数字。 – 2010-05-15 14:27:43

回答

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(ab)使用浮点寄存器。 (引证:http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) – jakogut 2010-05-15 14:51:26