4

*添加第二個內核或CPU可能會提高並行程序的性能,但不可能將其加倍。同樣, 四核機是不會執行你的並行程序有4個 倍quickly-部分是因爲在前面的章節中描述的開銷和協調 的。但是,計算機硬件的設計也限制了其擴展能力。您可以預期性能有顯着的提高,但是它不會是每個附加內核的100% ,並且幾乎肯定會有一個點,它將增加額外的內核或CPU並不完全改善性能 。添加附加內核或CPU不會改善性能的地方在哪裏?

*

,我讀了一本書,上面的段落。但我沒有得到最後一句話。 那麼,添加額外內核或CPU的位置在哪裏並不能改善性能?

回答

5

如果你把一個串行程序和同一程序的並行版本,然後並行程序必須做一些操作的串行程序不對,特別是涉及協調多個處理器的運算操作。這些貢獻於通常所說的「並行開銷」 - 並行程序必須做的額外工作。這是導致難以在2個處理器上獲得2倍加速的因素之一,在32000處理器上4倍或32000倍。

如果您檢查並行程序的代碼,你會經常發現片段,其序列,也就是隻使用一個處理器,而其他是空閒的。有一些(不完整)算法是可以並行化的,有些操作通常不是並行化的,但可能是:I/O操作,例如爲了平行化,需要某種並行I/O系統。這個「序列分數」爲您的計算提供了不可簡化的最短時間。 Amdahl's Law解釋了這一點,該文章爲您的進一步閱讀提供了一個有用的起點。

即使你確實有一個很好並行的程序,縮放比例(即加速度隨處理器數量的增加而變化的方式)也不等於1.對於大多數並行程序來說,並行開銷的大小(或者用於並行計算僅需要的操作的處理器時間量)隨着處理器數量的一些函數而增加。這通常意味着添加處理器會增加並行開銷,並且在程序和作業擴展的某個時刻,開銷的增加會消除(甚至反轉)處理器能力的增加。關於阿姆達爾定律的文章也涵蓋了與此相關的古斯塔夫森定律。

我已經說過這一切的一般條款,沒有考慮當前的處理器和計算機體系結構;我所描述的是並行計算的特性(目前我們可以理解),而不是任何特定的程序或計算機。

我不同意@丹尼爾皮特曼的斷言,這些問題只是理論上的問題。我們中的一些人正在努力使我們的程序擴展到大量的處理器(1000s)。現在幾乎所有的桌面和辦公室開發以及大多數移動開發都針對多處理器系統,並且使用所有這些內核是一個主要問題。

最後,要回答你的問題,在什麼時候添加處理器不再提高執行速度,現在這是一個與架構和程序相關的問題。令人高興的是,這是一種適合於實證調查的方法。確定並行程序的可擴展性,並找出改進方法,是軟件工程「專業」中的一個增長點。

1

答案是,當然,「這取決於」,但在共享存儲多處理器的當前世界短版本是「當交通協調共享內存或其他資源的消耗所有可用的總線帶寬和/或CPU時間」。

雖然這是一個非常理論性的問題。幾乎沒有任何規模足夠好,可以繼續利用更少的核心。少數應用程序受益於4,少於8,而現在64核心幾乎沒有應用程序 - 遠低於任何理論上的性能限制。

+3

我同意內存帶寬限制,這是目標共享內存多處理器體系結構時的一個嚴重問題。但是,我堅決不同意你的觀點,即這些問題只是理論上的。高性能計算中的大部分努力旨在利用這些限制,並且經常成功地將可擴展性限制推到數百/數千個內核之外。 – Francesco 2012-03-21 08:29:42

+0

-1「但這是一個非常理論化的問題。幾乎沒有任何規模足夠好,可以繼續利用更少的核心。很少有應用程序可以從4,少於8,幾乎不會從64核心中受益,遠低於任何理論上的性能限制。「這僅僅是無稽之談,我的八個Xeon內核中有兩個可以最大化整個系統的主內存帶寬。鞭打不會在理論上擴大規模,也不會在實踐中擴展,這不是「一個非常理論上的問題」,它決定了我如何編寫我的應用程序。 – 2012-06-02 10:51:23

1

如果我們在談論x86架構或多或少處於極限。 @ 3 GHz的電流每赫茲傳播10釐米(實際上稍小),芯片面積約爲1平方釐米,器件必須能夠以單赫茲(1/3000000000秒)切換狀態。目前的製造工藝(22納米)給出了88(硅)原子寬的互連(我可能誤解了這一點)。考慮到這一點,你意識到這裏沒有更多的物理能夠做到這一點(互連有多大?10個原子?20?)。另一方面,製造商爲了能夠將設備作爲比其前任「更高性能」的設備進行銷售,增加了一個理論上使處理能力翻倍的內核。

「理論上」實際上並非完全正確。一些專門編寫的應用程序會將大問題細分爲足夠小的部分,以便包含在單個內核及其獨佔緩存內(L1 & L2)。一部分給予核心,並且它處理大量時間而不訪問L3緩存或RAM(與其他核心共享,因此將發生衝突/瓶頸)。完成後,它將結果寫入RAM並接收新問題的一部分。

如果一個內核花費99%的時間進行內部處理和1%讀寫共享內存(L3緩存和RAM),那麼您可能會有另外99個內核執行相同的操作,因爲最後,限制因素將是共享內存能夠訪問的數量。以我99:1的例子來說,這樣的應用程序可以有效利用100個內核。

隨着更常見的程序 - 辦公室,即等 - 可用的額外處理能力將很難被注意到。程序的某些部分可能會寫入較小的部分以利用多個內核,並且如果您知道哪些部分可能會注意到這些程序的這些部分要快得多。

以3 GHz爲例,因爲它可以在300000000米/秒的光速下工作。我最近讀到AMD最新的架構能夠在5GHz下執行,但是這是使用特殊的冷卻器,即使這樣,它的運行速度也比較慢(處理速度較慢),而不是以明顯較慢的頻率運行的intel i7。

1

它很大程度上取決於您的程序架構/設計。添加核心可改進並行處理。如果您的程序沒有並行執行任何操作,只能按順序執行,添加內核並不會完全改善其性能。它可能會改進其他的東西,雖然像框架內部處理(如果你使用框架)。

因此,在您的程序中允許的並行處理越多,它就越能夠隨着更多的內核而擴展。但是,如果您的程序對並行處理(按設計或數據性質)有限制,則它不會無限縮放。在數百個內核上運行程序需要付出很大努力,主要是因爲開銷增加,資源鎖定和所需的數據協調。最強大的超級計算機確實是大規模多核心的,但是編寫可以利用它們的程序是一項重大的努力,它們只能在本質上並行的任務中展現自己的力量。

2

@High Performance Mark是對的。當你試圖以最快的方式解決一個固定大小的問題時,會發生這種情況,所以適用Amdahl法則。當你試圖在固定的時間內解決問題時,它通常不會發生。在前一種情況下,您願意使用相同的時間來解決問題

  • 其尺寸較大;
  • 其尺寸與以前完全一樣,但具有迎賓準確性。

在這種情況下,適用古斯塔夫森法則。

所以,讓我們回到固定大小的問題。 在加速式可以區分這些部件:

  • 固有順序計算:σ(n)的
  • 潛在並行計算:φ(n)的
  • 開銷(通信操作等):κ(N, p)

p上的加速比的問題大小處理器ñ

enter image description here

添加處理器減少了計算時間,但增加了通信時間(對於消息傳遞算法;它增加了共享內存算法的同步開銷等);如果我們繼續增加更多的處理器,那麼通信時間的增加將會大於相應的計算時間的減少。

發生這種情況時,並行執行時間開始增加。 加速與執行時間成反比,因此其曲線開始下降。 對於任何固定的問題大小,都有一個最佳數量的處理器,可以最大限度地減少整個並行執行時間。

以下是如何準確計算(解析解決方案的封閉形式)通過添加額外處理器(或核心,如果您願意)沒有獲益的點。 enter image description here

enter image description here

enter image description here

1

您可能會發現下面的文章有用: 哈迪Esmaeilzadeh,et.al, 「黑硅和多核縮放的結束,」 在ISCA'11,6月4日-8,2011,美國加利福尼亞州聖何塞市