2010-05-15 59 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