如果你把一個串行程序和同一程序的並行版本,然後並行程序必須做一些操作的串行程序不對,特別是涉及協調多個處理器的運算操作。這些貢獻於通常所說的「並行開銷」 - 並行程序必須做的額外工作。這是導致難以在2個處理器上獲得2倍加速的因素之一,在32000處理器上4倍或32000倍。
如果您檢查並行程序的代碼,你會經常發現片段,其序列,也就是隻使用一個處理器,而其他是空閒的。有一些(不完整)算法是可以並行化的,有些操作通常不是並行化的,但可能是:I/O操作,例如爲了平行化,需要某種並行I/O系統。這個「序列分數」爲您的計算提供了不可簡化的最短時間。 Amdahl's Law解釋了這一點,該文章爲您的進一步閱讀提供了一個有用的起點。
即使你確實有一個很好並行的程序,縮放比例(即加速度隨處理器數量的增加而變化的方式)也不等於1.對於大多數並行程序來說,並行開銷的大小(或者用於並行計算僅需要的操作的處理器時間量)隨着處理器數量的一些函數而增加。這通常意味着添加處理器會增加並行開銷,並且在程序和作業擴展的某個時刻,開銷的增加會消除(甚至反轉)處理器能力的增加。關於阿姆達爾定律的文章也涵蓋了與此相關的古斯塔夫森定律。
我已經說過這一切的一般條款,沒有考慮當前的處理器和計算機體系結構;我所描述的是並行計算的特性(目前我們可以理解),而不是任何特定的程序或計算機。
我不同意@丹尼爾皮特曼的斷言,這些問題只是理論上的問題。我們中的一些人正在努力使我們的程序擴展到大量的處理器(1000s)。現在幾乎所有的桌面和辦公室開發以及大多數移動開發都針對多處理器系統,並且使用所有這些內核是一個主要問題。
最後,要回答你的問題,在什麼時候添加處理器不再提高執行速度,現在這是一個與架構和程序相關的問題。令人高興的是,這是一種適合於實證調查的方法。確定並行程序的可擴展性,並找出改進方法,是軟件工程「專業」中的一個增長點。
我同意內存帶寬限制,這是目標共享內存多處理器體系結構時的一個嚴重問題。但是,我堅決不同意你的觀點,即這些問題只是理論上的。高性能計算中的大部分努力旨在利用這些限制,並且經常成功地將可擴展性限制推到數百/數千個內核之外。 – Francesco 2012-03-21 08:29:42
-1「但這是一個非常理論化的問題。幾乎沒有任何規模足夠好,可以繼續利用更少的核心。很少有應用程序可以從4,少於8,幾乎不會從64核心中受益,遠低於任何理論上的性能限制。「這僅僅是無稽之談,我的八個Xeon內核中有兩個可以最大化整個系統的主內存帶寬。鞭打不會在理論上擴大規模,也不會在實踐中擴展,這不是「一個非常理論上的問題」,它決定了我如何編寫我的應用程序。 – 2012-06-02 10:51:23