- 論壇徽章:
- 1
|
LMT NEW PBS高性能作業(yè)運(yùn)算系統(tǒng)多節(jié)點(diǎn)協(xié)同運(yùn)算分析
近年來,基于CPU+GPU的混合異構(gòu)計(jì)算系統(tǒng)開始逐漸成為國內(nèi)外高性能計(jì)算領(lǐng)域的熱點(diǎn)研究方向。在實(shí)際應(yīng)用中,許多基于 CPU+GPU 的混合異構(gòu)計(jì)算機(jī)系統(tǒng)表現(xiàn)出了良好的性能。但是,由于各種歷史和現(xiàn)實(shí)原因的制約,異構(gòu)計(jì)算仍然面臨著諸多方面的問題,其中最突出的問題是程序開發(fā)困難,尤其是擴(kuò)展到集群規(guī)模級(jí)別時(shí)這個(gè)問題更為突出。主要表現(xiàn)在擴(kuò)展性、負(fù)載均衡、自適應(yīng)性、通信、內(nèi)存等方面。
一、 CPU+GPU協(xié)同計(jì)算模式
CPU+GPU異構(gòu)協(xié)同計(jì)算集群如圖1所示,CPU+GPU異構(gòu)集群可以劃分成三個(gè)并行層次:節(jié)點(diǎn)間并行、節(jié)點(diǎn)內(nèi)CPU與GPU異構(gòu)并行、設(shè)備(CPU或GPU)內(nèi)并行。根據(jù)這三個(gè)層次我們可以得到CPU+GPU異構(gòu)協(xié)同計(jì)算模式為:節(jié)點(diǎn)間分布式+節(jié)點(diǎn)內(nèi)異構(gòu)式+設(shè)備內(nèi)共享式。
1 節(jié)點(diǎn)間分布式
CPU+GPU異構(gòu)協(xié)同計(jì)算集群中,各個(gè)節(jié)點(diǎn)之間的連接與傳統(tǒng)CPU集群一樣,采用網(wǎng)絡(luò)連接,因此,節(jié)點(diǎn)間采用了分布式的計(jì)算方式,可以采用MPI消息通信的并行編程語言。
2 節(jié)點(diǎn)內(nèi)異構(gòu)式
CPU+GPU異構(gòu)協(xié)同計(jì)算集群中,每個(gè)節(jié)點(diǎn)上包含多核CPU和一塊或多塊GPU卡,節(jié)點(diǎn)內(nèi)采用了異構(gòu)的架構(gòu),采用主從式的編程模型,即每個(gè)GPU卡需要由CPU進(jìn)程/線程調(diào)用。
由于每個(gè)節(jié)點(diǎn)上,CPU核數(shù)也比較多,計(jì)算能力也很大,因此,在多數(shù)情況下,CPU也會(huì)參與部分并行計(jì)算,根據(jù)CPU是否參與并行計(jì)算,我們可以把CPU+GPU異構(gòu)協(xié)同計(jì)算劃分成兩種計(jì)算模式:
1) CPU/GPU協(xié)同計(jì)算:CPU只負(fù)責(zé)復(fù)雜邏輯和事務(wù)處理等串行計(jì)算,GPU 進(jìn)行大規(guī)模并行計(jì)算;
2) CPU+GPU共同計(jì)算:由一個(gè)CPU進(jìn)程/線程負(fù)責(zé)復(fù)雜邏輯和事務(wù)處理等串行計(jì)算,其它CPU進(jìn)程/線程負(fù)責(zé)小部分并行計(jì)算,GPU負(fù)責(zé)大部分并行計(jì)算。
由于CPU/GPU協(xié)同計(jì)算模式比CPU+GPU共同計(jì)算模式簡(jiǎn)單,下面的介紹中,我們以CPU+GPU共同計(jì)算模式為例進(jìn)行展開介紹各種編程模式。
在CPU+GPU共同計(jì)算模式下,我們把所有的CPU統(tǒng)稱為一個(gè)設(shè)備(device),如雙路8核CPU共有16個(gè)核,我們把這16個(gè)核統(tǒng)稱成一個(gè)設(shè)備;每個(gè)GPU卡成為一個(gè)設(shè)備。根據(jù)這種劃分方式,我們可以采用MPI進(jìn)程或OpenMP線程控制節(jié)點(diǎn)內(nèi)的各設(shè)備之間的通信和數(shù)據(jù)劃分。
3 設(shè)備內(nèi)共享式
1) CPU設(shè)備:每個(gè)節(jié)點(diǎn)內(nèi)的所有多核CPU采用了共享存儲(chǔ)模型,因此,把節(jié)點(diǎn)內(nèi)的所有多核CPU看作一個(gè)設(shè)備, 可以采用MPI進(jìn)程或OpenMP線程、pThread線程控制這些CPU核的并行計(jì)算。
2) GPU設(shè)備:GPU設(shè)備內(nèi)有自己獨(dú)立的DRAM存儲(chǔ),GPU設(shè)備也是共享存儲(chǔ)模型,在GPU上采用CUDA或OpenCL編程控制GPU眾核的并行計(jì)算。CUDA編程模式只在NVIDIA GPU上支持,OpenCL編程模式在NVIDIA GPU和AMD GPU都支持。
根據(jù)前面對(duì)CPU+GPU異構(gòu)協(xié)同計(jì)算模式的描述,我們可以得到CPU+GPU異構(gòu)協(xié)同計(jì)算的編程模型(以MPI和OpenMP為例)如表1所示。
圖片1.jpg (65.99 KB, 下載次數(shù): 61)
下載附件
2015-01-28 15:49 上傳
圖1 CPU+GPU異構(gòu)協(xié)同計(jì)算架構(gòu)
表1 CPU+GPU異構(gòu)協(xié)同計(jì)算編程模型
圖片2.png (25.62 KB, 下載次數(shù): 63)
下載附件
2015-01-28 15:49 上傳
二、 CPU+GPU協(xié)同計(jì)算負(fù)載均衡性設(shè)計(jì)
下面以模式2為例簡(jiǎn)單介紹多節(jié)點(diǎn)CPU+GPU協(xié)同計(jì)算任務(wù)劃分和負(fù)載均衡,模式2的進(jìn)程和線程與CPU核和GPU設(shè)備對(duì)應(yīng)關(guān)系如圖2所示。若采用主從式MPI通信機(jī)制,我們?cè)诠?jié)點(diǎn)0上多起一個(gè)進(jìn)程(0號(hào)進(jìn)程)作為主進(jìn)程,控制其它所有進(jìn)程。每個(gè)節(jié)點(diǎn)上啟動(dòng)3個(gè)計(jì)算進(jìn)程,其中兩個(gè)控制GPU設(shè)備,一個(gè)控制其余所有CPU核的并行,在GPU內(nèi)采用CUDA/OpenCL并行,在CPU設(shè)備內(nèi)采用OpenMP多線程并行。
由于CPU+GPU協(xié)同計(jì)算模式分為3個(gè)層次,那么負(fù)載均衡性也需要在這3個(gè)層次上分別設(shè)計(jì)。在模式2的編程方式下,節(jié)點(diǎn)內(nèi)和節(jié)點(diǎn)間均采用MPI進(jìn)程,合二為一,設(shè)計(jì)負(fù)載均衡時(shí),只需要做到進(jìn)程間(設(shè)備之間)的負(fù)載均衡和CPU設(shè)備內(nèi)OpenMP線程負(fù)載均衡、GPU設(shè)備內(nèi)CUDA線程負(fù)載均衡即可。
對(duì)于設(shè)備內(nèi),采用的是共享存儲(chǔ)器模型,CPU設(shè)備上的OpenMP線程可以采用schedule(static/ dynamic/ guided )方式;GPU設(shè)備上只要保證同一warp內(nèi)的線程負(fù)載均衡即可。
對(duì)于CPU+GPU協(xié)同計(jì)算,由于CPU和GPU計(jì)算能力相差很大,因此,在對(duì)任務(wù)和數(shù)據(jù)劃分時(shí)不能給CPU設(shè)備和GPU設(shè)備劃分相同的任務(wù)/數(shù)據(jù)量,這就增加了CPU與GPU設(shè)備間負(fù)載均衡的難度。CPU與GPU之間的負(fù)載均衡最好的方式是采用動(dòng)態(tài)負(fù)載均衡的方法,然而有些應(yīng)用無法用動(dòng)態(tài)劃分而只能采用靜態(tài)劃分的方式。下面我們分別介紹動(dòng)態(tài)劃分和靜態(tài)劃分。
1) 動(dòng)態(tài)劃分:對(duì)于一些高性能計(jì)算應(yīng)用程序,在CPU與GPU之間的負(fù)載均衡可以采用動(dòng)態(tài)負(fù)載均衡的優(yōu)化方法,例如有N個(gè)任務(wù)/數(shù)據(jù),一個(gè)節(jié)點(diǎn)內(nèi)有2個(gè)GPU卡,即三個(gè)設(shè)備(CPU和2個(gè)GPU),動(dòng)態(tài)負(fù)載均衡的方法是每個(gè)設(shè)備先獲取一個(gè)任務(wù)/數(shù)據(jù)進(jìn)行計(jì)算,計(jì)算之后立即獲取下一個(gè)任務(wù),不需要等待其他設(shè)備,直到N個(gè)任務(wù)/數(shù)據(jù)計(jì)算完成。這種方式只需要在集群上設(shè)定一個(gè)主進(jìn)程,負(fù)責(zé)給各個(gè)計(jì)算進(jìn)程分配任務(wù)/數(shù)據(jù)。
2) 靜態(tài)劃分:在一些應(yīng)用中,無法采用動(dòng)態(tài)劃分的方式,需要靜態(tài)劃分方法,然而靜態(tài)劃分方法使異構(gòu)設(shè)備間的負(fù)載均衡變得困難,有時(shí)甚至無法實(shí)現(xiàn)。對(duì)于一些迭代應(yīng)用程序,我們可以采用學(xué)習(xí)型的數(shù)據(jù)劃分方法,如先讓CPU和GPU分別做一次相同計(jì)算量的計(jì)算,然后通過各自的運(yùn)行時(shí)間計(jì)算出CPU與GPU的計(jì)算能力比例,然后再對(duì)數(shù)據(jù)進(jìn)行劃分。
圖片3.jpg (46.85 KB, 下載次數(shù): 69)
下載附件
2015-01-28 15:49 上傳
圖2 CPU+GPU協(xié)同計(jì)算示意圖(以每個(gè)節(jié)點(diǎn)2個(gè)GPU為例)
三、 CPU+GPU協(xié)同計(jì)算數(shù)據(jù)劃分示例
假設(shè)某一應(yīng)用的數(shù)據(jù)特點(diǎn)如圖3所示,從輸出看,結(jié)果中的每個(gè)值的計(jì)算需要所有輸入數(shù)據(jù)的信息,所有輸出值的計(jì)算之間沒有任何數(shù)據(jù)依賴性,可以表示成outj=;從輸入看,每個(gè)輸入值對(duì)所有的輸出值都產(chǎn)生影響,所有輸入數(shù)據(jù)之間也沒有任何數(shù)據(jù)依賴性。從數(shù)據(jù)特點(diǎn)可以看出,該應(yīng)用既可以對(duì)輸入進(jìn)行并行數(shù)據(jù)劃分也可以對(duì)輸出進(jìn)行數(shù)據(jù)劃分。下面我們分析CPU+GPU協(xié)同計(jì)算時(shí)的數(shù)據(jù)劃分方式。
圖片4.jpg (21.89 KB, 下載次數(shù): 69)
下載附件
2015-01-28 15:49 上傳
圖3 并行數(shù)據(jù)示例
1 按輸入數(shù)據(jù)劃分
假設(shè)按輸入數(shù)據(jù)劃分,我們可以采用動(dòng)態(tài)的方式給每個(gè)CPU或GPU設(shè)備分配數(shù)據(jù),做到動(dòng)態(tài)負(fù)載均衡,然而這種劃分方式,使所有的線程向同一個(gè)輸出位置保存結(jié)果,為了正確性,需要使所有的線程對(duì)每個(gè)結(jié)果進(jìn)行原子操作,這樣將會(huì)嚴(yán)重影響性能,極端情況下,所有線程還是按順序執(zhí)行的。因此,這種方式效果很差。
2 按輸出數(shù)據(jù)劃分
按輸出數(shù)據(jù)劃分的話可以讓每個(gè)線程做不同位置的結(jié)果計(jì)算,計(jì)算完全獨(dú)立,沒有依賴性。如果采用靜態(tài)劃分的方式,由于CPU和GPU計(jì)算能力不同,因此,很難做到負(fù)載均衡。采用動(dòng)態(tài)的方式可以做到負(fù)載均衡,即把結(jié)果每次給CPU或GPU設(shè)備一塊,當(dāng)設(shè)備計(jì)算完本次之后,立即向主進(jìn)程申請(qǐng)下一個(gè)分塊,這樣可以做到完全負(fù)載均衡。按輸出數(shù)據(jù)劃分,無論采用靜態(tài)劃分還是動(dòng)態(tài)劃分,都會(huì)帶來另外一個(gè)問題,由于每個(gè)結(jié)果的計(jì)算都需要所有輸入信息,那么所有進(jìn)程(設(shè)備)都需要讀取一遍所有輸入數(shù)據(jù),動(dòng)態(tài)劃分時(shí)還不只一次,尤其對(duì)于輸入數(shù)據(jù)很大時(shí),這將會(huì)對(duì)輸入數(shù)據(jù)的IO產(chǎn)生很大的影響,很有可能使IO程序性能瓶頸。
3 按輸入和輸出同時(shí)劃分
由于按輸入或按輸出劃分都存在不同的缺點(diǎn),我們可以采用輸入和輸出同時(shí)劃分的方式進(jìn)行數(shù)據(jù)劃分,如圖4所示。
從輸出角度,讓所有的計(jì)算進(jìn)程(設(shè)備)都有一份計(jì)算結(jié)果,設(shè)備內(nèi)的線程對(duì)結(jié)果進(jìn)行并行計(jì)算,每個(gè)設(shè)備都有一份局部的計(jì)算結(jié)果,所有設(shè)備都計(jì)算完畢之后,利用MPI進(jìn)程對(duì)所有設(shè)備的計(jì)算結(jié)果進(jìn)行規(guī)約,規(guī)約最后的結(jié)果即是最終的結(jié)果。
從輸入角度,按輸入數(shù)據(jù)動(dòng)態(tài)劃分給不同的計(jì)算進(jìn)程(設(shè)備),這樣可以滿足所有的計(jì)算進(jìn)程負(fù)載均衡。
圖片5.jpg (69.97 KB, 下載次數(shù): 78)
下載附件
2015-01-28 15:49 上傳
圖4 CPU+GPU協(xié)同計(jì)算數(shù)據(jù)劃分示例
|
|