配置—鑒別系統(tǒng)及應(yīng)用軟件中的瓶頸
計劃—突出性能的關(guān)聯(lián)性和局限性來制定中期商業(yè)計劃

原型Linux集群(Prototypical Linux Cluster)

我們文中的Linux高性能計算集群模型包括四類主要的硬件組成部分。(1)執(zhí)行技術(shù)工作負載的計算節(jié)點或者服務(wù)器 (2)一個用于集群管理,工作控制等方面的主節(jié)點 (3)互相連接的電纜和現(xiàn)在高度普及的千兆以太網(wǎng)(GBE) (4)一些全球存儲系統(tǒng),像由主節(jié)點輸出的NFS文件一樣簡單易用。下面我們通過圖示1來向大家進行詳解。

 

圖示一

這里有一個簡單量化的運用模型

這樣一個量化的運用模型非常直觀。在一個集群上對既定的工作完成的時間大約等同于在獨立的子系統(tǒng)上花費的時間:
e
(1)時間(Time)=節(jié)點時間(Tnode)+電纜時間(Tfabric)+存儲時間(Tstorage)
Time  =  Tnode + Tfabric + Tstorag
這里所說的時間(Time)指的是執(zhí)行工作量的完成時間,節(jié)點時間(Tnode)是指在計算節(jié)點上花費的完成時間,電纜時間(Tfabric)是指在互聯(lián)網(wǎng)上各個節(jié)點進行互聯(lián)的完成時間,而存儲時間(Tstorage)則是指訪問局域網(wǎng)或全球存儲系統(tǒng)的完成時間。As in the webinar,有關(guān)電纜時間(Tfabric)和存儲時間(Tstorage)的議題我們稍后會為大家陳述。我們先來關(guān)注節(jié)點時間(Tnode)這個關(guān)鍵詞。計算節(jié)點的完成時間大約等同于在獨立的子系統(tǒng)上花費的時間:

(2)節(jié)點時間(Tnode)=內(nèi)核時間(Tcore) +內(nèi)存時間(Tmemory)
 
這里所說的內(nèi)核時間(Tcore)指的是在微處理器計算節(jié)點上的完成時間。而內(nèi)存時間(Tmemory)就是指訪問主存儲器的完成時間。這個模型對于單個的CPU計算節(jié)點來說是非常實用的,而且能很容易的擴展到通用雙插槽(SMP對稱多處理)計算節(jié)點。為了使第二套模型更加實用,子系統(tǒng)的完成時間也必須和計算節(jié)點的物理配置參數(shù)相關(guān)聯(lián),例如處理器的速度,內(nèi)存的速度等等。

計算節(jié)點

下面讓我們來一起關(guān)注圖示2中的計算節(jié)點原型來認識相關(guān)的配置參數(shù)。圖示上端的是2個處理器插槽,通過前端總線(FSB-front side bus)與內(nèi)存控制中心(MCH)相連。這個內(nèi)存控制中心(MCH)有四個存儲信道。同時還有一個Infiniband HCA通過信道點對點串行(PCIe)連接在一起。

象千兆以太網(wǎng)和串行接口(SATA)硬盤之類的低速的輸入輸出系統(tǒng)都是通過芯片組中的南橋通道(South Bridge)相連接的。在圖示2中,大家可以看到每個主要部件旁邊都用紅色標注了一個性能相關(guān)參數(shù)。這些參數(shù)詳細的說明了影響性能(并非全部)的硬件的特性。它們通常也和硬件的成本直接相關(guān)。舉例來說,,處理器時鐘頻率(fcore)在多數(shù)工作負荷狀態(tài)下對性能影響巨大。根據(jù)供求交叉半導(dǎo)體產(chǎn)額曲線原理,處理器速度越快,相應(yīng)成本也會更高。高速緩存存儲器的體積也會對性能產(chǎn)生影響,它能減少主頻所承載的工作負荷以提高其運算速度。處理器內(nèi)核的數(shù)量(Ncores)同樣會影響性能和成本。內(nèi)存子系統(tǒng)的速度可以根據(jù)雙列直插內(nèi)存模塊頻率(fDIMM)和總線頻率(fBus)進行參數(shù)化,它在工作負荷狀態(tài)下也對性能產(chǎn)生影響。同樣,電纜相互連接(interconnect fabric)的速度取決于信道點對點串行的頻率。而其他一些因素,比如雙列直插內(nèi)存模塊內(nèi)存延遲(DIMM CAS Latency),存儲信道的數(shù)量等都做為次要因素暫時忽略不計。
 

圖示二

我們能使用的性能參數(shù)

在圖示2中標明的6個性能參數(shù)中,我們保留四個和模型相關(guān)的參數(shù)。首先讓我們先忽略信道點對點串行的頻率(fPCIe),因為它主要影響的是電纜相互連接(interconnect fabric)速度的性能,這不在我們此次議題討論范圍之列。接下來讓我們注意一下雙列直插內(nèi)存模塊頻率(fDIMM)和總線頻率(fBus)會由于內(nèi)存控制中心(MCH)而限于固定比率。在目前使用的雙核系統(tǒng)中,這些比率最具代表性的是4:5, 1:1, 5:4。我們一般情況下只會用到其中的一個。高速緩存存儲器的體積非常重要。在這個模型中我們保留這個參數(shù)。內(nèi)核的數(shù)量(Ncores)和內(nèi)核頻率(fcore)也非常重要,保留這兩個參數(shù)。

高性能計算(HPC)模型

接下來的章節(jié)我們講解的是數(shù)學運用模型。這但對于數(shù)學運算是個挑戰(zhàn),讓我們一起來關(guān)注這個模型。

這第二個模型的基本形式在計算機體系研究領(lǐng)域已經(jīng)存在了很多年。A普通模式是:

(3) CPI  =  CPI0 + MPI * PPM

這里的CPI指的是處理器在工作負荷狀態(tài)下每執(zhí)行一個指令的周期。CPI0是指內(nèi)核CPI,MPI I則是指在工作負荷狀態(tài)下高速緩存存儲器每個指令失誤的次數(shù)(注釋:在高性能計算領(lǐng)域,MPI主要用于信息傳遞界面,在此處主要是指處理器構(gòu)造慣例),PPM是指以處理器時鐘滴答聲為單位對高速緩存存儲器每個指令失誤的次數(shù)的記錄。第二和第三個方程式相互吻合。這第一個術(shù)語代表的是處理器,第二個術(shù)語代表的是內(nèi)存。

通過圖示我們可以直觀的看到,假設(shè)每項工作下執(zhí)行的P指令的工作負荷與代表處理器的頻率的內(nèi)核頻率(每秒鐘處理器運行周期的單位)再與方程式(3)相乘,就得到了方程式(4):

 Tnode  =  (CPIo * P) * (1 / fcore) + (MPI * P) * PPM * (1 / fcore)

在這里我們要注意(CPIo * P)是以每項工作分配下處理器的運行周期為單位,對微處理器架構(gòu)上運行的既定工作負荷通常是個恒量。因此我們把它命名為α。(處理器周期本身無法對時間進行測算,如果乘以內(nèi)核的頻率就可以得到時間的測算標準。因此Tnode在方程式(4)的右邊)。

(MPI * P)也是同理。對于既定工作負荷和體系結(jié)構(gòu)來說它也是個恒量,但它主要依賴于高速緩存存儲器的體積。我們把它命名為M(MBcache)。而PPM是指訪問主存的成本。對于既定的工作負荷來說,通常是個固定的數(shù)字C。PPM乘以內(nèi)存頻率和總線頻率的比值(fcore / fBus)就從總線周期(bus cycles)轉(zhuǎn)化成了處理器周期。因此PM = C * fcore / fBus。套入M(MBcache)就可以得到:

(5)  Tnode  =  α * (1 / fcore) + M(MBcache) * (1 / fbus)

這個例子說明總線頻率(bus frequency)也是個恒量,方程式(5)可以簡化為方程式(6):

(6)  Tnode  =  α * (1 / fcore) + β

在這里Tcore = α * (1 / fcore),而Tmemory = β(也就是公式2里的術(shù)語。我們把這些關(guān)鍵點關(guān)聯(lián)在一起)。首先在模型2里,公式5和公式6都有堅實的理論基礎(chǔ),因為我們已經(jīng)分析過它是如何從公式3推理而來(它主要應(yīng)用于計算機體系理論)。其次,目前的這個模型4個硬件性能參數(shù)的3個已經(jīng)包括其中。還差一個參數(shù)就是內(nèi)核數(shù)量(Ncores)。

我們用直觀的方式來說明內(nèi)核的數(shù)量,就是假設(shè)把N個內(nèi)核看做是一個網(wǎng)絡(luò)頻率上運行的一個內(nèi)核,我們稱之為N*fcore。那么根據(jù)公式(6)我們大致可以推算出:

(7)  Tcore ~ α / (N*fcore) 
  Tcore~ ( α / N) * (1 / fcore )

我們也可以把它寫成:

(8)  αN  =  ( α / N)

多核處理器的第一個字母Alpha可能是單核處理器的1/N次。

通過數(shù)學推算這幾乎是完全可能的。

通常情況下我們是根據(jù)系統(tǒng)內(nèi)核和總線頻率(bus frequencies)來衡量計算機系統(tǒng)性能,如公式(5)所闡述的。但是公式(5)的左邊是時間單位–這個時間單位指的是一項工作量的完成時間。這樣就能更清楚的以時間為單位說明右側(cè)的主系統(tǒng)參數(shù)。同時請注意內(nèi)核的時鐘周期τcore(是指每次內(nèi)核運行周期所需的時間)也等同于(1 / fcore)。總線時鐘(bus clock)周期也是同理。

(9)  Tnode  =  αN * τcore + M(MBcache) * τBus

這個公式的轉(zhuǎn)化也給了我們一個完成時間的模型,那就是2個基本的自變量τcore和τBus呈現(xiàn)出直線性變化。這對我們稍后使用一個簡單的棋盤式對照表對真實系統(tǒng)數(shù)據(jù)進行分析是有幫助的。

這個模型是如何工作的?

公式(9)中的這個模型好處何在呢?為了回答這個問題,首先讓我們一起來分析兩項常用的基準測試指標,Linpack(注釋:指標為實數(shù),指HPC采用高斯消元法求解一元N次稠密線性代數(shù)方程組的每秒處理次數(shù))和Stream(注釋:對單環(huán)境和多重負荷時的內(nèi)存性能進行測評的基準)。我們通常會對他們進行綜合的考量,這兩者主要適用于商業(yè)領(lǐng)域。舉例來說,Linpack基準測試運用的是邊界元素方法,主要適用于模擬飛機雷達橫截面或者模擬潛艇聲學回音。Stream基準測試的核心則運用于高性能計算應(yīng)用編碼的方方面面。他們代表了矢量或者Level 1 BLAS。這兩項基準測試指標都非常的有用因為他們從不同角度代表了高性能計算工作量頻譜的兩個極端。Linpack測試的是內(nèi)核的計算范圍,而Stream主要針對的是內(nèi)存訪問。這兩項工作是對完成時間模型(1)一個很好的初始測試。

Linpack測試:內(nèi)核范圍的工作負載

圖示3向我們展示的是使用了三個不同的多核CPU(以英特爾S3000PT服務(wù)器為基礎(chǔ))的Linpack完成時間以及使用一個單獨的CPU系統(tǒng)τcore的結(jié)構(gòu)圖。第一臺CPU是英特爾公司的PentiumD(Netburst microarchitecture)雙核運行多種頻率可達到3.2 GHz。對于這項工作負載Linpack完成時間數(shù)據(jù)點用黃色三角標注。數(shù)據(jù)點連成的直線用黃色虛線表示。

第二臺CPU是英特爾公司的酷睿雙核處理器Core 2 Duo (Conroe)運行四組頻率達到2.66 GHz。這個CPU的數(shù)據(jù)點和連成的直線用藍色標注。第三臺CPU是英特爾公司的酷睿四核處理器Core 2 Quad(Kentsfield)運行兩組頻率達到2.4 GHz。它的數(shù)據(jù)點和連成的直線用紅色標注??偩€頻率(bus frequency)在266 MHz頻率下保持恒量。結(jié)合方程式(1)和線性圖可以清楚的看到β或者M(MBcache) * (1/ fBus )都為零。

假設(shè)Linpack能完全脫離高速緩存存儲器運行而且?guī)缀醪辉傩枰L問主存儲器,那就能符合用戶的需求。我們希望Tmemory或者β也能為零,這一點通過線性圖已經(jīng)可以確認。在這個方面模型看起來是不錯的。接下來我們來分析每個數(shù)據(jù)點的變化情況。舉例來說,酷睿雙核處理器Core2 Duo的四個數(shù)據(jù)點連接成一條幾乎完全精確的直線。在這些數(shù)據(jù)點的范圍內(nèi),我們可以推斷系統(tǒng)真實的物理性能運算與τcore成線性關(guān)系。由此我們也可以斷定這個模型一個重要的方面–那就是τcore內(nèi)的物理性能運算成直線型。
 

圖示三

現(xiàn)在我們來關(guān)注一下這個線程的傾斜度。從方程式(9)我們知道了傾斜度與αN的值相吻合。由此我們可以推斷αN = α / N 。那就是說多核并行的工作負載完成時間傾斜度與單核相比是在同等工作負載下完成時間傾斜度的1/N次。從酷睿雙核處理器Core 2 Duo的直線分析,我們會發(fā)現(xiàn)斜面值為0.154,而C酷睿四核處理器ore 2 Quad的直線斜面值為0.0806。這是個1.91x和期望的2x的標準比。誤差率大概在5%,這對于實際應(yīng)用來說已經(jīng)足夠好了。

把Pentium D和酷睿雙核處理器 Core 2 Duo的傾斜度進行對比,我們可以看到alpha (α)的另外一面。這兩個處理器都是雙核的,但是酷睿四核處理器Core 2 Duo每個時鐘周期能執(zhí)行4個SSE2指令而Pentium D只能執(zhí)行兩個。Linpack的工作負載能夠利用SSE2指令集的完成時間單位。因此我們希望Pentium D的斜面值應(yīng)該是2x酷睿雙核處理器Core 2 Duo的斜面值。

Stream測試:總線范圍的工作負載

圖示4展示的是在酷睿雙核處理器Core 2 Duo平臺系統(tǒng)上執(zhí)行工作負載的Linpack和Stream結(jié)構(gòu)圖。象圖示3一樣,Linpack線性圖有一個接近于零的測試值傾斜度比較大。Stream的線性圖則正好相反。它的值相對較大,傾斜度卻非常小。這種計算行為適用于總線范圍內(nèi)的工作負載。處理器的速度對于Stream工作負載的完成時間影響非常小。
 

圖示四

總線(bus)的頻率(類似于MCH的速度和DIMM的速度)對Stream性能測試會有什么影響呢?從圖示5我們可以看到前端總線頻率(fBus)變化情況的影響。這些數(shù)據(jù)來自于使用酷睿雙核處理器Core 2 Duo的ASUS P5B系統(tǒng)??偩€頻率(fBus)和內(nèi)核頻率(fcore)的比值固定在7上就簡單了許多。總線頻率(fBus)和雙列直插內(nèi)存模塊頻率(fDIMM)兩項不同的比值分別為1:1和4:5。

圖示5中的線性圖說明了內(nèi)存時間(Tmemory)的變化情況是和總線(bus)時鐘周期τBus成正比的。我們能看到這張圖示上有兩處截然不同的數(shù)據(jù)點。這些點和1:1 的總線頻率(fBus)比值相吻合而雙列直插內(nèi)存模塊頻率(fDIMM)比值是4:5。

 

圖示五
更為復(fù)雜的工作負載:SPEC_CPU2000

讓我們來關(guān)注一下更為復(fù)雜的工作負載,完成時間的性能計算在初始參數(shù)上仍然是直線。由此可以看出內(nèi)存時間(Tmemory)還需要較大的高速緩存存儲器進行緩沖存儲。這個分析讓我們意識到M(MBcache)的重要性。SPEC CPU2000 benchmark suite無疑是個不錯的選擇。這一點已經(jīng)為大家所熟知。在這張圖示上我們將基線編譯器標記(-O2)與每一項工作負載相結(jié)合。復(fù)合工作負載的完成時間剛好是單個組件工作負載的完成時間(約等于25)。

為了測試高速緩存存儲器體積對性能的影響程度,我們用"Gallatin"處理器系統(tǒng)來作為測試平臺。這個處理器是單核Netburst體系機構(gòu)的CPU,512KB L2和2MB L3高速緩存存儲器。圖示6向我們展示的是在處理器時鐘周期變化時復(fù)合工作負載的完成時間。
 

圖示六

深藍色的數(shù)據(jù)點和線性圖符合了激活的2MB L3高速緩存存儲器的結(jié)構(gòu)。淡藍色的數(shù)據(jù)點和線性圖則反映了不起作用的L3高速緩存存儲器的結(jié)構(gòu)情況,非常有效的把高速緩存存儲器的體積精簡到了512KB。這兩個線性圖都是平行線。斜面值是一樣的,幾乎沒什么差別。更有趣的是我們能看到,當高速緩存存儲器的體積從512KB變成2MB時,測試值的變化。內(nèi)存訪問和Tmemory完成的時間總計減少了1.75x。這個結(jié)論等同于增大了總線(bus)和內(nèi)存頻率1.75x。對于復(fù)合工作負載來說,高速緩存存儲器的體積非常重要。

綜述

現(xiàn)在對我們的分析做一個綜述。在定性的基礎(chǔ)上我們可以輕易的對影響高性能計算性能的因素進行羅列,比如更快的處理器,更大容量的內(nèi)存,磁盤,網(wǎng)絡(luò)等等。如果是在量化的基礎(chǔ)上來回答這個問題,答案則有較大的不同。尤其是對于那些預(yù)算有限的用戶而言,這一點是比較重要的。一臺速度更快的處理器會花費更多的費用嗎?在我的集群上需要PCIExpress Gen2時鐘緩沖器嗎?我應(yīng)該購買更快的內(nèi)存來獲取每個計算節(jié)點上更多的內(nèi)存容量嗎?我如何能為用戶提供更大的計算機功率(在相同的年度預(yù)算前提下)?

我們試圖向大家闡明使用一個相對簡單的計算節(jié)點運用模型就能很好的解釋這些疑問。對于既定的工作量和計算節(jié)點,這個模型只需要簡單的工具(那就是電子數(shù)據(jù)表)就能輕易的進行驗證。使用這個模型還能夠幫助我們解決如何選購,容量規(guī)劃方面的疑問。那么回到我們最初的問題上來"如何優(yōu)化高性能計算的性能?",答案是一切都取決于工作負載。

分享到

多易

相關(guān)推薦