我正在编写一个多线程的高度并行应用程序。我已经编写了一个SSE加速线程类。如果我要写一个MMX加速线程类,那么同时运行两个(一个SSE线程和每个核心一个MMX线程)性能会明显提高吗?
我认为这个设置有助于隐藏内存延迟,但我想在开始花时间之前确定它。
答案 0 :(得分:8)
SSE和MMX指令集共享CPU中的同一组矢量处理执行单元。因此,运行SSE线程和MMX线程将使每个线程具有相同的资源,就像运行两个SSE线程(或两个MMX线程)一样。唯一的区别在于SSE中存在的指令而不是MMX(因为SSE是MMX的扩展)。但在这种情况下,MMX可能会变慢,因为它没有更高级的指令。
所以答案是:不,与运行两个SSE线程相比,你不会看到性能提升。
答案 1 :(得分:-1)
SSE和MMX使用相同的寄存器,所以你使用哪两个并不重要(当然,除了MMX吸吮和SSE是有用的)
更好的问题是如何在目标CPU上实施SSE。它是否每个核心都有一个SSE单元? (可能)如果是这样,那么你也可以在每个线程上运行SSE指令。
如果它在核心之间有一个共享的SSE单元,那么不同的线程将争夺它,因此在多个线程中执行SSE指令不会有太大的好处。 (我不知道是否有任何CPU实际上在线程之间共享SSE单元,所以把它作为一个假设的情况)