
由於超線程,我的 CPU 每個核心有 2 個邏輯處理器。如果我正確理解超線程的前提,它允許每個核心同時為 2 個單獨的線程擁有單獨的快取和指令指針,但確實不是允許單一核心同時執行 2 個執行緒。因此,它基本上只是減輕了執行緒交換的高開銷,這意味著由於運行的執行緒多於運行它們的核心而產生的負面效能影響減少了。然而我仍然期望會有一些涉及的開銷,以及一些例如,在只有 8 個物理核心的系統上執行 16 個執行緒時,會對效能產生負面影響。
由於我的超線程具有 8 個物理核心,我的系統中運行的軟體似乎認為我有 16 個 CPU 核心。有些軟體(例如某些建置系統)預設使用所有可用核心以最大化並行化。我知道我可以透過我正在考慮的軟體的參數指定線程數。我是否正確地認為超過 8 個執行緒對效能沒有任何好處?我是否正確地認為超過 8 個線程實際上會降低效能?因此,我應該指示程式使用不超過 8 個執行緒嗎?
答案1
這取決於。
一般來說,每個 CPU 執行緒運行一個軟體執行緒將提供最佳效能。我經常看到每個CPU 核心運行一個軟體線程的速度提高了10% - 因此,我沒有讓一個軟體線程以100% 的速度運行,而是有兩個軟體線程,每個線程都以55% 的速度運轉。
但我也看到了更好的運行性能更少如果多個核心共享相同的緩存,則進程數比 CPU 核心數要多。然而,這種情況非常罕見。
通常您應該使用所有 16 個 CPU 線程,但確定您的系統狀況的唯一方法是測量。