我的程式:100% 基於 CPU 和 RAM, 施行數學計算,首先將HDD中的資料讀入RAM中。線程之間沒有通訊。線程,全部採用同時也(幾乎)。
問題:
如果我的程式使用的執行緒數等於 CPU 執行緒數,那麼 2 個 cpu 系統可以獲得什麼樣的效能?
假設我使用兩個 8 核心至強處理器,每個處理器有 16 個線程,因此總共 16x2 = 32 個線程。如果我的程式使用 32 個線程,且所有線程的使用率均為 100%,那麼與單個相同的 cpu 相比,我的效能是否會提高一倍?
答案1
實際上,您能給出的最佳答案是「可能不會,但這取決於情況」。您可用的原始 CPU 馬力是原來的兩倍,但是:
您實際上不會擁有兩倍的可用記憶體頻寬。
在 CPU 之間「乒乓」某些快取線路需要時間。
有時一個線程必須等待另一個線程,並且線程越多,發生的情況就越多。
有時,即使您有很多工作要做,您也無法一次完成所有工作。
等等。
在極少數情況下,您實際上可以獲得更多的性能的兩倍以上。如果一個操作是快取有限的,那麼擁有更多的核心可能意味著執行緒可以運行更長時間(因為該核心不會有其他事情要做,因為其他核心正在做這些事情),從而允許CPU 快取保持更長時間的熱狀態。
答案2
性能問題的最終答案是不要猜測,而是測試!
答案3
聽起來你正在做一個尷尬地平行計算任務,在這種情況下答案是肯定的,您的吞吐量將與所使用的 CPU 線程總數幾乎呈線性增長。