多CPU、多執行緒效能

多CPU、多執行緒效能

我的程式:100% 基於 CPU 和 RAM, 施行數學計算,首先將HDD中的資料讀入RAM中。線程之間沒有通訊。線程,全部採用同時也(幾乎)。

問題:

如果我的程式使用的執行緒數等於 CPU 執行緒數,那麼 2 個 cpu 系統可以獲得什麼樣的效能?

假設我使用兩個 8 核心至強處理器,每個處理器有 16 個線程,因此總共 16x2 = 32 個線程。如果我的程式使用 32 個線程,且所有線程的使用率均為 100%,那麼與單個相同的 cpu 相比,我的效能是否會提高一倍?

答案1

實際上,您能給出的最佳答案是「可能不會,但這取決於情況」。您可用的原始 CPU 馬力是原來的兩倍,但是:

  1. 您實際上不會擁有兩倍的可用記憶體頻寬。

  2. 在 CPU 之間「乒乓」某些快取線路需要時間。

  3. 有時一個線程必須等待另一個線程,並且線程越多,發生的情況就越多。

  4. 有時,即使您有很多工作要做,您也無法一次完成所有工作。

等等。

在極少數情況下,您實際上可以獲得更多的性能的兩倍以上。如果一個操作是快取有限的,那麼擁有更多的核心可能意味著執行緒可以運行更長時間(因為該核心不會有其他事情要做,因為其他核心正在做這些事情),從而允許CPU 快取保持更長時間的熱狀態。

答案2

性能問題的最終答案是不要猜測,而是測試!

答案3

聽起來你正在做一個尷尬地平行計算任務,在這種情況下答案是肯定的,您的吞吐量將與所使用的 CPU 線程總數幾乎呈線性增長。

相關內容