3

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

我认为这种设置将有助于隐藏内存延迟,但在我开始投入时间之前我想确定一下。

4

2 回答 2

8

SSE 和 MMX 指令集在 CPU 中共享同一组向量处理执行单元。因此,运行一个 SSE 线程和一个 MMX 线程,每个线程将拥有相同的资源,就像运行两个 SSE 线程(或两个 MMX 线程)一样。唯一的区别在于存在于 SSE 但不存在于 MMX 中的指令(因为 SSE 是 MMX 的扩展)。但在这种情况下,MMX 可能会更慢,因为它没有可用的那些更高级的指令。

所以答案是:不,与运行两个 SSE 线程相比,您不会看到性能提升。

于 2010-05-15T14:07:05.600 回答
-1

SSE 和 MMX 使用相同的寄存器,因此您使用两者中的哪一个并不重要(当然,除了 MMX 吸吮和 SSE 有用)

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

如果它在内核之间有一个共享的 SSE 单元,那么不同的线程将争夺它,因此在多个线程中执行 SSE 指令不会有太多好处。(我不知道是否有任何 CPU 实际上在线程之间共享 SSE 单元,所以将此作为假设情况)

于 2010-05-15T14:07:44.620 回答