999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向異構(gòu)體系結(jié)構(gòu)的GA模型拓展

2017-11-07 08:38:54盧宇彤王晨旭
關(guān)鍵詞:模型

程 鵬 盧宇彤 高 濤 王晨旭

(高性能計(jì)算國(guó)家重點(diǎn)實(shí)驗(yàn)室(國(guó)防科學(xué)技術(shù)大學(xué)) 長(zhǎng)沙 410073)

(國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院 長(zhǎng)沙 410073)

(peng_cheng_13@163.com)

隨著科學(xué)與工程應(yīng)用對(duì)計(jì)算性能要求的不斷增加,基于CPU的同構(gòu)系統(tǒng)已經(jīng)不能滿足計(jì)算需求.而圖形處理單元(GPU)、英特爾至強(qiáng)融核(many integrated core, MIC)或其他加速單元在處理高度并行性負(fù)載的情況下可以提供遠(yuǎn)強(qiáng)于CPU的浮點(diǎn)計(jì)算能力,因此使用GPU或MIC等加速單元作為協(xié)處理器負(fù)責(zé)數(shù)據(jù)密集型負(fù)載的異構(gòu)計(jì)算得到了迅速發(fā)展[1-5].在2015年6月的TOP500排名中,共有88臺(tái)超級(jí)計(jì)算機(jī)為異構(gòu)系統(tǒng),使用英特爾Xeon Phi(MIC)協(xié)處理器的超級(jí)計(jì)算機(jī)共有33臺(tái),其中也包括排名第一的天河二號(hào)[6].近年來(lái),為了簡(jiǎn)化異構(gòu)編程難度,CUDA[7],OpenCL[8]等編程模型也得到了廣泛應(yīng)用.由于MIC結(jié)構(gòu)是基于現(xiàn)有的X86架構(gòu)進(jìn)行設(shè)計(jì),采用與CPU相同的X86指令集,支持OpenMP[9],TBB[10]等現(xiàn)有并行編程模型,因此CPU+MIC的異構(gòu)編程難度小于CPU+GPU的異構(gòu)編程難度.盡管如此,使用MIC高效進(jìn)行異構(gòu)計(jì)算還存在2個(gè)難點(diǎn):1)由于CPU與MIC之間沒(méi)有共享內(nèi)存空間,程序員必須區(qū)分?jǐn)?shù)據(jù)的本地或遠(yuǎn)程訪問(wèn),并顯式地指定數(shù)據(jù)在CPU和MIC之間的傳遞情況;2)傳統(tǒng)的加載模式,如英特爾的語(yǔ)言拓展加載模式(LEO)受限于在單個(gè)計(jì)算節(jié)點(diǎn)之內(nèi)實(shí)現(xiàn),并且無(wú)法在MIC之間直接進(jìn)行傳輸數(shù)據(jù).

分塊全局地址空間(PGAS)模型適用于分布式存儲(chǔ)系統(tǒng),通過(guò)提供邏輯上共享的尋址空間和允許所有處理單元訪問(wèn)位于共享內(nèi)存空間的數(shù)據(jù),簡(jiǎn)化數(shù)據(jù)管理和進(jìn)程間通信.常見(jiàn)的PGAS模型包括UPC,CAF(co-array Fortran),Titanium[11]和全局?jǐn)?shù)組(global arrays, GA).GA模型[12]基于聚合遠(yuǎn)程內(nèi)存拷貝接口(ARMCI)為分布式存儲(chǔ)系統(tǒng)提供異步單邊通信、共享內(nèi)存的編程環(huán)境,通過(guò)允許編程人員創(chuàng)建一個(gè)分布在多個(gè)計(jì)算節(jié)點(diǎn)之間的全局共享數(shù)組,并對(duì)共享數(shù)組的直接訪問(wèn)隱藏?cái)?shù)據(jù)在不同內(nèi)存空間的傳輸細(xì)節(jié).GA近年來(lái)應(yīng)用廣泛,相比于UPC和CAF,GA允許編程人員顯式控制數(shù)據(jù)局部性,且GA基于庫(kù)實(shí)現(xiàn)而不依賴(lài)編譯器,具有很好的可移植性.因此,結(jié)合異構(gòu)系統(tǒng)特點(diǎn)實(shí)現(xiàn)GA模型可以為CPU與加速單元之間提供邏輯上共享的數(shù)據(jù)結(jié)構(gòu),從而隱藏?cái)?shù)據(jù)在CPU和MIC之間的傳輸細(xì)節(jié),達(dá)到簡(jiǎn)化編程并優(yōu)化數(shù)據(jù)傳輸?shù)哪康?然而,ARMCI通信接口是GA模型實(shí)現(xiàn)的關(guān)鍵,也關(guān)系到GA模型的可移植性,即在新的系統(tǒng)中使用GA模型前必須結(jié)合該平臺(tái)特點(diǎn)實(shí)現(xiàn)ARMCI接口.而此時(shí)尚未有AMRCI針對(duì)CPU+MIC異構(gòu)系統(tǒng)的實(shí)現(xiàn),因此通過(guò)標(biāo)準(zhǔn)GA模型簡(jiǎn)化異構(gòu)編程難度并優(yōu)化數(shù)據(jù)傳輸?shù)哪繕?biāo)難以實(shí)現(xiàn).

為了在CPU+MIC的異構(gòu)系統(tǒng)中高效實(shí)現(xiàn)GA模型,我們?cè)诒疚闹刑岢隽薈oGA,并基于MIC上的對(duì)稱(chēng)傳輸接口(symmetric communication interface, SCIF)[13]實(shí)現(xiàn)對(duì)GA模型的異構(gòu)拓展.CoGA通過(guò)為CPU與MIC之間提供邏輯上共享的全局?jǐn)?shù)組,隱藏?cái)?shù)據(jù)在CPU與MIC之間的傳輸細(xì)節(jié).通過(guò)CoGA,編程人員可以像訪問(wèn)本地?cái)?shù)組一樣去訪問(wèn)全局?jǐn)?shù)組而不必關(guān)心數(shù)據(jù)的具體存儲(chǔ)位置.此外,我們還結(jié)合SCIF接口的特點(diǎn),對(duì)CPU與MIC間的數(shù)據(jù)傳輸進(jìn)行優(yōu)化,針對(duì)小數(shù)據(jù)通信特點(diǎn)提供低延遲的通信接口,并允許節(jié)點(diǎn)內(nèi)MIC之間直接進(jìn)行數(shù)據(jù)傳遞,而不必像offload模式那樣先將數(shù)據(jù)傳送回CPU,再由CPU傳遞至另一個(gè)MIC.本文的主要貢獻(xiàn)有3點(diǎn):

1) 結(jié)合GA模型特點(diǎn),針對(duì)CPU+MIC異構(gòu)系統(tǒng)設(shè)計(jì)并實(shí)現(xiàn)了CoGA庫(kù),簡(jiǎn)化了異構(gòu)編程難度;

2) 分析MIC協(xié)處理器特點(diǎn),邏輯上拓展了MIC內(nèi)存,并結(jié)合SCIF接口優(yōu)化數(shù)據(jù)傳輸性能;

3) 通過(guò)數(shù)據(jù)傳輸帶寬、消息傳遞延遲和稀疏矩陣乘問(wèn)題評(píng)估CoGA性能并證明其有效性和實(shí)用性.

1 背景及動(dòng)機(jī)

1.1 MIC協(xié)處理器和SCIF接口

英特爾MIC結(jié)構(gòu)基于X86架構(gòu),支持包括OpenMP和MPI在內(nèi)的多種并行模型,采用C,C++,F(xiàn)ortran等語(yǔ)言進(jìn)行軟件移植開(kāi)發(fā),特點(diǎn)以編程簡(jiǎn)單(引語(yǔ)方式)著稱(chēng),工具鏈豐富.MIC卡含有57~61個(gè)核,每個(gè)核可以支持4個(gè)線程,浮點(diǎn)運(yùn)算性能超過(guò)1TFLOPS,含有512 b的向量寬度,支持8個(gè)雙通道GDDR內(nèi)存控制器,內(nèi)存大小為6 GB或8 GB[14].由于MIC既可以作為CPU的協(xié)處理器也可以單獨(dú)作為處理節(jié)點(diǎn),因此MIC與CPU的協(xié)同方式非常靈活.常用協(xié)同方式包括:加載模式、原生模式和對(duì)等模式.在加載模式下,CPU作為主機(jī)端并將數(shù)據(jù)密集型任務(wù)加載到MIC上運(yùn)行;在原生模式下,MIC作為一個(gè)獨(dú)立的計(jì)算節(jié)點(diǎn),程序只在MIC上單獨(dú)運(yùn)行;在對(duì)等模式下,MIC設(shè)備可以看作與CPU對(duì)等的計(jì)算節(jié)點(diǎn).在異構(gòu)計(jì)算中,加載(offload)模式是最常用的模式,MIC設(shè)備的啟動(dòng)、關(guān)閉和數(shù)據(jù)傳輸操作都通過(guò)編譯指導(dǎo)命令動(dòng)態(tài)實(shí)現(xiàn).

SCIF作為一種簡(jiǎn)單高效的對(duì)稱(chēng)傳輸接口,允許數(shù)據(jù)從MIC設(shè)備通過(guò)PCIE總線與CPU進(jìn)行數(shù)據(jù)傳輸.SCIF應(yīng)用程序接口提供了2種類(lèi)型的數(shù)據(jù)傳輸操作:點(diǎn)對(duì)點(diǎn)的發(fā)送-接收操作和遠(yuǎn)程內(nèi)存訪問(wèn)(RMA)操作.發(fā)送-接收語(yǔ)義支持阻塞和非阻塞傳輸,一端作為源而另一端作為目的地;RMA操作則支持單邊通信,當(dāng)知道本地和遠(yuǎn)程數(shù)據(jù)地址的時(shí)候,數(shù)據(jù)就可以被傳輸.2個(gè)端點(diǎn)之間成功的數(shù)據(jù)通信必須通過(guò)注冊(cè)地址空間,即本地進(jìn)程注冊(cè)其部分地址空間作為遠(yuǎn)端進(jìn)程訪問(wèn)的窗口,并建立該段地址空間與物理內(nèi)存的映射關(guān)系.

Sreeram等人[15]在其近期工作中通過(guò)共享內(nèi)存,IB verbs和SCIF接口設(shè)計(jì)了含有MIC的異構(gòu)節(jié)點(diǎn)內(nèi)的高效數(shù)據(jù)傳輸方式.Nishkam等人[16]在其近期工作中提出了一組新的指令,以更為寬松的語(yǔ)義添加到原有的指令基礎(chǔ)語(yǔ)言中,從而允許使用者在源代碼中建議而不是指定加載區(qū)域.然而,由于CPU與MIC之間沒(méi)有共享內(nèi)存空間,程序員必須區(qū)分?jǐn)?shù)據(jù)的本地或遠(yuǎn)程訪問(wèn),并顯式地指定數(shù)據(jù)在CPU和MIC之間的傳遞情況.此外,如圖1所示,現(xiàn)有的offload模式中,由于MIC設(shè)備之間沒(méi)有建立直接連接,因此數(shù)據(jù)在MIC設(shè)備之間的傳輸較為復(fù)雜,數(shù)據(jù)必須經(jīng)CPU中轉(zhuǎn)才能加載到另一塊MIC上.

Fig. 1 Data transmission in offload mode圖1 offload數(shù)據(jù)傳輸方式

1.2 GA模型

GA模型是一種PGAS語(yǔ)言,可以為分布式存儲(chǔ)系統(tǒng)提供異步單邊通信、共享內(nèi)存的編程環(huán)境,同時(shí)優(yōu)化整體性能,減少處理器之間顯式的通信開(kāi)銷(xiāo).傳統(tǒng)的GA模型通過(guò)聚合遠(yuǎn)程內(nèi)存拷貝接口(ARMCI)實(shí)現(xiàn)put和get單邊通信,最新版本的GA模型(GA-5-4b)增加了對(duì)拓展性通信庫(kù)ComEx的兼容性,允許GA通過(guò)MPI雙邊通信語(yǔ)義(即MPI_Send和MPI_Recv)實(shí)現(xiàn)單邊通信協(xié)議,并將默認(rèn)通信模式由socket改為MPI雙邊通信,從而允許GA模型在任何支持MPI編程模型的平臺(tái)上實(shí)現(xiàn)[17].

近期的使用C++庫(kù)拓展并行編程模型研究包括UPC++[18],Coarrays C++[19-20]和Charm++[21]等.Manojkumar等人[22]提出了在Blue GeneP超級(jí)計(jì)算機(jī)上通過(guò)IBM DCMF(deep computing messaging framework)框架實(shí)現(xiàn)GA模型.其中,ARMCI put和get操作通過(guò)DCMF應(yīng)用接口實(shí)現(xiàn)并表現(xiàn)出比原本的GA和MPI接口更好的性能.Daniel等人[23]則基于PGAS動(dòng)態(tài)消息傳遞范例提出了global futures,增加可拓展性的同時(shí)保持與GA和MPI兼容,通過(guò)一系列API允許用戶(hù)定義的計(jì)算任務(wù)(futures)在擁有GA數(shù)據(jù)分塊的位置遠(yuǎn)程執(zhí)行.James等人[24]則通過(guò)協(xié)調(diào)MPI RMA和PGAS模型語(yǔ)義,通過(guò)MPI單邊通信實(shí)現(xiàn)GA模型.

然而,現(xiàn)有的offload模式下,編程人員必須區(qū)分?jǐn)?shù)據(jù)是本地或遠(yuǎn)程訪問(wèn),并顯式地指定數(shù)據(jù)在CPU和MIC之間的傳遞情況,而且同一節(jié)點(diǎn)內(nèi)MIC之間無(wú)法直接進(jìn)行通信.此外,迄今為止還未出現(xiàn)在異構(gòu)系統(tǒng)中使用GA模型簡(jiǎn)化CPU和MIC之間顯式的數(shù)據(jù)傳輸?shù)姆桨福F(xiàn)有的GA模型也沒(méi)有針對(duì)MIC結(jié)構(gòu)的高效實(shí)現(xiàn).而若GA模型在CPU+MIC異構(gòu)系統(tǒng)中通過(guò)MPI雙邊通信網(wǎng)絡(luò)模式進(jìn)行數(shù)據(jù)傳輸必然導(dǎo)致性能低下.

2 CoGA拓展

為了能夠在CPU+MIC的異構(gòu)系統(tǒng)中實(shí)現(xiàn)GA模型并保證數(shù)據(jù)傳輸性能,我們提出CoGA,基于SCIF接口在CPU與MIC之間高效實(shí)現(xiàn)GA模型,通過(guò)提供邏輯上共享數(shù)組隱藏?cái)?shù)據(jù)傳輸細(xì)節(jié),簡(jiǎn)化異構(gòu)編程難度.本節(jié)簡(jiǎn)要介紹CoGA的拓展方式及API接口.

圖2對(duì)比了GA與CoGA的軟件層次結(jié)構(gòu).原本的GA模型使用Fortran或C語(yǔ)言等應(yīng)用接口實(shí)現(xiàn)對(duì)分布式共享數(shù)組的管理,通過(guò)ARMCI或ComEx動(dòng)態(tài)庫(kù)內(nèi)部的網(wǎng)絡(luò)通信接口,如MPI雙邊通信接口,調(diào)用網(wǎng)絡(luò)驅(qū)動(dòng)及操作系統(tǒng)庫(kù)實(shí)現(xiàn)內(nèi)存管理和數(shù)據(jù)傳輸?shù)炔僮鳎欢鳦oGA則通過(guò)SCIF接口直接調(diào)用網(wǎng)絡(luò)驅(qū)動(dòng)及操作系統(tǒng)庫(kù),更高效地實(shí)現(xiàn)對(duì)CPU和MIC的內(nèi)存管理及CPU與MIC間的數(shù)據(jù)傳輸.

Fig. 2 Comparison between GA and CoGA圖2 GA和CoGA軟件層對(duì)比

表1總結(jié)了CoGA現(xiàn)有的API接口.其主要分為2大類(lèi),coGA_Initialize等接口是基于原本的GA接口進(jìn)行的拓展,實(shí)現(xiàn)了CoGA庫(kù)的初始化和終止、全局?jǐn)?shù)組的創(chuàng)建與銷(xiāo)毀、put和get單邊通信等操作,這些接口在實(shí)現(xiàn)原有功能的同時(shí)還結(jié)合MIC結(jié)構(gòu)與SCIF傳輸特點(diǎn)進(jìn)行了優(yōu)化;coGA_Reg等接口則是為了簡(jiǎn)化數(shù)組操作并優(yōu)化數(shù)據(jù)傳輸所拓展的新接口,包括小數(shù)據(jù)的發(fā)送與接收、快速獲取本地緩存指針等操作.通過(guò)這些接口,編程人員可以在異構(gòu)系統(tǒng)中高效使用CoGA模型實(shí)現(xiàn)內(nèi)存管理和數(shù)據(jù)傳輸,達(dá)到簡(jiǎn)化編程而不影響性能的目的.

Table 1 Summary of GA and CoGA Function Call表1 GA與CoGA接口對(duì)比

3 內(nèi)存管理

本節(jié)對(duì)原有GA模型內(nèi)存管理方式進(jìn)行簡(jiǎn)要分析,并針對(duì)CPU+MIC的異構(gòu)系統(tǒng)提出CoGA模型的內(nèi)存管理方式.

GA模型通過(guò)不同的函數(shù)調(diào)用實(shí)現(xiàn)全局?jǐn)?shù)組對(duì)象在對(duì)稱(chēng)多處理節(jié)點(diǎn)上的規(guī)則和不規(guī)則分布,動(dòng)態(tài)分配大部分內(nèi)存空間用于存儲(chǔ)新創(chuàng)建的全局?jǐn)?shù)組數(shù)據(jù)或者作為其他操作的臨時(shí)緩存,并在程序運(yùn)行結(jié)束后釋放.在提供共享內(nèi)存的系統(tǒng)上,內(nèi)存空間由ARMCI動(dòng)態(tài)庫(kù)管理,其首先從操作系統(tǒng)中劃分大段共享內(nèi)存空間,之后再根據(jù)GA操作分配或釋放內(nèi)存.在程序終止之前,ARMCI庫(kù)所管理的大段內(nèi)存空間不會(huì)被釋放.

然而,由于MIC設(shè)備的時(shí)鐘頻率低于CPU,分配同樣大小的內(nèi)存空間時(shí),MIC上的內(nèi)存分配開(kāi)銷(xiāo)比CPU的內(nèi)存分配開(kāi)銷(xiāo)更大.為了減少內(nèi)存分配次數(shù)進(jìn)而降低整體開(kāi)銷(xiāo),CoGA通過(guò)函數(shù)coGA_Create為全局?jǐn)?shù)組分配固定內(nèi)存空間,一旦全局?jǐn)?shù)組創(chuàng)建,該數(shù)組就可以被用于存儲(chǔ)不同數(shù)據(jù)直至數(shù)組被銷(xiāo)毀.

函數(shù)coGA_Create的語(yǔ)義與其他標(biāo)準(zhǔn)內(nèi)存分配調(diào)用的語(yǔ)義類(lèi)似,參與計(jì)算的每個(gè)進(jìn)程都必須執(zhí)行該函數(shù),并根據(jù)參數(shù)分配相應(yīng)的內(nèi)存空間.參數(shù)type表示全局?jǐn)?shù)組的數(shù)據(jù)類(lèi)型,如整型、浮點(diǎn)型等;參數(shù)size表示全局?jǐn)?shù)組的整體長(zhǎng)度;參數(shù)dis[n]則表示數(shù)據(jù)的分布情況.編程人員可以通過(guò)dis[n]參數(shù)直觀地控制數(shù)據(jù)如何分布在CPU和MIC上.圖3說(shuō)明了函數(shù)coGA_Create對(duì)內(nèi)存的分配和注冊(cè).CPU端和MIC端都執(zhí)行該函數(shù),并為全局?jǐn)?shù)組分布本地內(nèi)存空間.CPU的進(jìn)程號(hào)為0,CPU所分配的內(nèi)存大小為dis[0]-0;MIC的進(jìn)程號(hào)為1,則MIC上分配的內(nèi)存大小為dis[1]-dis[0].全局?jǐn)?shù)組的總大小為dis[1]-0.在異構(gòu)系統(tǒng)上創(chuàng)建全局?jǐn)?shù)組后,為便于CoGA接口通過(guò)SCIF接口實(shí)現(xiàn)遠(yuǎn)程內(nèi)存訪問(wèn),函數(shù)coGA_Create內(nèi)部調(diào)用接口scif_register將各進(jìn)程所分配的全局?jǐn)?shù)組本地內(nèi)存空間注冊(cè)為遠(yuǎn)程訪問(wèn)地址空間,并建立注冊(cè)地址空間與物理頁(yè)面的固定映射關(guān)系,從而允許遠(yuǎn)端進(jìn)程直接對(duì)該部分地址空間進(jìn)行讀寫(xiě)操作.

Fig. 3 Memory allocation of GA and CoGA圖3 GA和CoGA內(nèi)存分配對(duì)比

4 遠(yuǎn)程通信設(shè)計(jì)與實(shí)現(xiàn)

4.1 CPU與MIC連接

為了保證CoGA庫(kù)一旦初始化就可以實(shí)現(xiàn)對(duì)CPU和MIC的內(nèi)存管理并進(jìn)行遠(yuǎn)端通信,我們使用函數(shù)coGA_Initialize負(fù)責(zé)初始化CoGA庫(kù)并通過(guò)SCIF接口建立CPU與MIC的連接:CPU和MIC各自創(chuàng)建新的端口并將地址綁到其本地節(jié)點(diǎn);CPU端的端口作為監(jiān)聽(tīng)端接收MIC端所發(fā)送的連接請(qǐng)求,請(qǐng)求響應(yīng)后CPU與MIC可成功建立連接.在SCIF實(shí)現(xiàn)中,每個(gè)建立連接的端口稱(chēng)為端點(diǎn),每個(gè)計(jì)算節(jié)點(diǎn)可與多個(gè)不同節(jié)點(diǎn)建立多個(gè)連接,而且每個(gè)連接都通過(guò)其各自的端點(diǎn)完成,即一個(gè)節(jié)點(diǎn)上可以擁有多個(gè)端點(diǎn),各個(gè)端點(diǎn)負(fù)責(zé)與其連接的對(duì)應(yīng)端點(diǎn)間通信.

4.2 遠(yuǎn)程內(nèi)存訪問(wèn)

CoGA的核心思想是隱藏?cái)?shù)據(jù)傳輸細(xì)節(jié)的同時(shí)為CPU和MIC提供對(duì)等的API接口.圖4說(shuō)明了CoGA模型的數(shù)據(jù)傳輸方式.MIC設(shè)備在CoGA庫(kù)初始化時(shí)通過(guò)SCIF接口直接建立連接,進(jìn)而允許用戶(hù)調(diào)用CoGA函數(shù)實(shí)現(xiàn)數(shù)據(jù)在MIC間的直接傳輸.

Fig. 4 Data transmission in CoGA圖4 CoGA數(shù)據(jù)傳輸

CoGA的put和get操作包含完成單邊通信的參數(shù),如全局?jǐn)?shù)組的句柄、數(shù)據(jù)的上下邊界及本地?cái)?shù)組的指針.在調(diào)用put和get操作后,進(jìn)程首先對(duì)數(shù)據(jù)邊界和全局?jǐn)?shù)組分布情況進(jìn)行對(duì)比,再根據(jù)數(shù)據(jù)在遠(yuǎn)程或本地選擇不同傳輸方式.put和get操作定義2種不同的完成方式:本地傳輸和遠(yuǎn)程傳輸.本地傳輸是指數(shù)據(jù)在CPU或MIC內(nèi)部傳遞,可通過(guò)函數(shù)memcpy實(shí)現(xiàn);遠(yuǎn)端傳輸則意味著數(shù)據(jù)在CPU和MIC之間進(jìn)行傳輸,可以通過(guò)SCIF RMA訪問(wèn)操作實(shí)現(xiàn).SCIF提供2組接口完成RMA訪問(wèn):scif_readfrom,scif_writeto和scif_vreadfrom,scif_vwriteto.接口scif_readfrom,scif_writeto在本地注冊(cè)地址空間和遠(yuǎn)端注冊(cè)地址空間之間完成數(shù)據(jù)的讀寫(xiě)訪問(wèn),而接口scif_vreadfrom和scif_vwriteto則將本地用戶(hù)空間作為參數(shù)與遠(yuǎn)端注冊(cè)地址空間進(jìn)行數(shù)據(jù)傳輸操作,即數(shù)據(jù)可以直接從用戶(hù)虛擬地址發(fā)送到遠(yuǎn)端數(shù)組對(duì)象而無(wú)需對(duì)該段虛擬地址進(jìn)行注冊(cè).如果已知本地緩存將被使用多次作為RMA訪問(wèn)的源或者目的地,那么scif_readfrom,scif_writeto可提供更好的傳輸性能;反之,若本地緩存僅僅是源或一次傳輸?shù)哪康牡兀敲磗cif_vreadfrom,scif_vwriteto則能避免注冊(cè)窗口、數(shù)據(jù)傳輸、釋放窗口的復(fù)雜操作,減少注冊(cè)開(kāi)銷(xiāo).

為了保證傳輸性能的同時(shí)不影響簡(jiǎn)易性,我們同時(shí)提供這2種完成方式:在put和get操作中增加flag標(biāo)志位,flag值默認(rèn)為-1,若用戶(hù)未注冊(cè)本地臨時(shí)緩存,則put和get操作自動(dòng)調(diào)用scif_vwriteto,scif_vreadfrom在本地虛擬地址和遠(yuǎn)端注冊(cè)地址之間完成數(shù)據(jù)傳輸;當(dāng)用戶(hù)使用函數(shù)coGA_Reg提前為本地臨時(shí)緩存注冊(cè)地址空間后,返回的flag值即為注冊(cè)地址空間偏移,put或get操作自動(dòng)調(diào)用scif_writeto或scif_readfrom,在注冊(cè)地址空間之間進(jìn)行數(shù)據(jù)傳輸.當(dāng)需要進(jìn)行遠(yuǎn)端數(shù)據(jù)傳輸時(shí),CoGA函數(shù)直接將參數(shù)傳遞給SCIF接口,包括源地址、遠(yuǎn)端注冊(cè)地址空間偏移和拷貝數(shù)據(jù)長(zhǎng)度.

此外,CoGA還提供函數(shù)coGA_GetLocalBuffer允許進(jìn)程獲取共享數(shù)組的本地緩存指針,從而避免冗余的數(shù)據(jù)拷貝.

4.3 小數(shù)據(jù)通信優(yōu)化

考慮到程序運(yùn)行過(guò)程中,CPU和MIC可能需要頻繁地進(jìn)行小數(shù)據(jù)通信,而且MIC端計(jì)算完成后,MIC與MIC或者M(jìn)IC與CPU之間的小數(shù)據(jù)通信無(wú)法避免.傳統(tǒng)的offload模式下,編程人員必須通過(guò)編譯指導(dǎo)命令來(lái)指明傳輸?shù)臄?shù)據(jù),而且數(shù)據(jù)無(wú)論大小,傳輸?shù)臄?shù)據(jù)都是按照4 KB對(duì)齊,即使數(shù)據(jù)只有1 B,MIC端也會(huì)為該數(shù)據(jù)分配4 KB的內(nèi)存空間.在需要進(jìn)行頻繁小數(shù)據(jù)通信的情況下,offload模式一方面會(huì)使得代碼顯得較為冗長(zhǎng);另一方面也會(huì)造成空間浪費(fèi),并且導(dǎo)致傳輸延遲增加.

在函數(shù)coGA_Put和coGA_Get實(shí)現(xiàn)過(guò)程中,由于數(shù)據(jù)必須先放入全局?jǐn)?shù)組對(duì)象才能使用,對(duì)于小數(shù)據(jù)傳遞(通常小于4 KB),函數(shù)coGA_Put和coGA_Get可能顯得過(guò)于復(fù)雜.為降低傳輸延遲,我們基于SCIF點(diǎn)對(duì)點(diǎn)通信實(shí)現(xiàn)了在CPU和MIC間直接傳遞短消息的函數(shù):coGA_sendMsg和coGA_recvMsg.用戶(hù)可以直接調(diào)用這2個(gè)函數(shù)在任意2個(gè)建立連接的端點(diǎn)之間進(jìn)行通信.此外,相比于多個(gè)連接共享一個(gè)消息隊(duì)列的情況,CoGA實(shí)現(xiàn)中每一對(duì)連接的端點(diǎn)都包含2個(gè)消息隊(duì)列,每個(gè)消息隊(duì)列負(fù)責(zé)一個(gè)通信方向,因此發(fā)送消息的進(jìn)程不會(huì)被其他進(jìn)程阻礙.coGA_sendMsg和coGA_recvMsg所構(gòu)成的消息傳遞層主要針對(duì)小消息傳遞,而不是大塊數(shù)據(jù).盡管它能傳遞最大為(231-1)B的消息,由于消息隊(duì)列較短,一條長(zhǎng)消息會(huì)被轉(zhuǎn)化為多個(gè)短消息進(jìn)行傳遞,而且在傳送過(guò)程中每個(gè)短消息都會(huì)產(chǎn)生延遲,因此傳遞長(zhǎng)消息會(huì)使總體延遲急劇增大.

4.4 同 步

CoGA使用了與GA類(lèi)似的一致性模型:

1) 只有在訪問(wèn)全局?jǐn)?shù)組相同或重疊區(qū)域時(shí),函數(shù)coGA_Put和coGA_Get必須嚴(yán)格保證執(zhí)行順序;反之,訪問(wèn)區(qū)域不重疊或訪問(wèn)不同全局?jǐn)?shù)組時(shí),put和get操作允許以任意順序完成.

2) CoGA模型的put操作可通過(guò)2種方式訪問(wèn)全局?jǐn)?shù)組,即本地訪問(wèn)和遠(yuǎn)程訪問(wèn).put操作在本地訪問(wèn)完成后立即返回,這也意味著此時(shí)數(shù)據(jù)已經(jīng)從本地拷貝完畢但可能尚未到達(dá)遠(yuǎn)端.

CoGA提供2種同步函數(shù):coGA_Fence是局部操作,用于等待函數(shù)調(diào)用端進(jìn)程的操作完成;coGA_Sync則是集體操作,對(duì)所有進(jìn)程進(jìn)行同步并保證CPU和MIC端的CoGA操作完成.coGA_Fence操作基于SCIF RMA同步操作實(shí)現(xiàn):首先通過(guò)接口scif_fence_mark()標(biāo)記那些已經(jīng)開(kāi)始但尚未完成的RMA訪問(wèn)操作,并將返回的句柄傳遞給scif_fence_wait();之后再調(diào)用接口scif_fence_wait()等待被標(biāo)記的RMA訪問(wèn)完成.

5 測(cè) 試

我們基于SCIF,一種類(lèi)似socket、用于主機(jī)端和MIC之間傳遞數(shù)據(jù)的對(duì)稱(chēng)傳輸接口,在CPU+MIC的異構(gòu)系統(tǒng)上實(shí)現(xiàn)CoGA.本節(jié)主要通過(guò)帶寬測(cè)試、延遲測(cè)試和稀疏矩陣乘(sparse matrix vector multiply, SpMV)問(wèn)題評(píng)估CoGA性能.

圖5通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明CoGA編程與offload編程的差異.在offload模式中,同一節(jié)點(diǎn)內(nèi)的MIC之間無(wú)法直接進(jìn)行傳輸數(shù)據(jù),因此數(shù)據(jù)必須

if(rank=1)*MIC0*

{

coGA_sendMsg(2,p,k);*sent message to MIC1*

}

if(rank=2)*MIC1*

{

coGA_recvMsg(1,p,k);*receive message from MIC0*

}

?

(a) CoGA

?

#pragma offload target (mic:0) in (p:length(i))

{

}

#pragma offload target (mic:0) out (p:length(i))

{

}

#pragma offload target (mic:1) in (p:length(i))

{

}

?

(b) offload

Fig. 5 Programming example
圖5 編程對(duì)比

coGA_sendMsg

coGA_recvMsg

為了更好地了解CoGA的實(shí)用性和具體性能,我們測(cè)試了函數(shù)coGA_Put的數(shù)據(jù)傳輸帶寬和coGA_sendMsg發(fā)送小消息的延遲,并測(cè)試了在同一節(jié)點(diǎn)內(nèi)2個(gè)MIC之間進(jìn)行傳輸傳遞時(shí)CoGA接口的實(shí)用性,最后通過(guò)稀疏矩陣乘問(wèn)題測(cè)試其整體性能.測(cè)試工作在由2個(gè)CPU和4個(gè)MIC組成的異構(gòu)系統(tǒng)上進(jìn)行,其中CPU型號(hào)為Intel Xeon E5-2670,2.60 GHz;MIC型號(hào)為Xeon Phi 3100,1.1 GHz;MPI版本為MPICH-3.2b1,網(wǎng)絡(luò)模式為SCIF;GA版本為GA-5-4b,網(wǎng)絡(luò)模式為MPI雙邊通信.

Fig. 6 Bandwidth test圖6 帶寬測(cè)試

首先,我們分別測(cè)試CoGA模型、GA模型和offload模式下從CPU傳輸數(shù)據(jù)至MIC端的數(shù)據(jù)傳輸帶寬,其中coGA_Put包含2種遠(yuǎn)程數(shù)據(jù)傳輸方式,即scif_writeto和scif_vwriteto.測(cè)試結(jié)果如圖6所示:GA_Put沒(méi)有結(jié)合MIC上SCIF接口特點(diǎn)而是基于MPI雙邊通信實(shí)現(xiàn),數(shù)據(jù)經(jīng)過(guò)緩沖才發(fā)送至MIC端,因此帶寬最低;函數(shù)coGA_Put(scif_writeto)實(shí)現(xiàn)過(guò)程中,數(shù)據(jù)從本地注冊(cè)空間直接發(fā)送至遠(yuǎn)端注冊(cè)空間,帶寬性能優(yōu)于coGA_Put(scif_vwriteto);coGA_Put(scif_writeto)在數(shù)據(jù)規(guī)模小于3.7 MB時(shí),帶寬低于offload模式帶寬,這是因?yàn)閜ut操作啟動(dòng)開(kāi)銷(xiāo)較大,需要比較數(shù)據(jù)傳輸范圍并決定相應(yīng)的數(shù)據(jù)傳輸方式,而當(dāng)數(shù)據(jù)規(guī)模不斷增加后,這部分開(kāi)銷(xiāo)所占的比例也不斷減小,因此數(shù)據(jù)大于4 MB后coGA_Put帶寬性能與offload帶寬相當(dāng),甚至略高于offload模式.

其次,我們測(cè)試了在CPU與MIC之間進(jìn)行數(shù)據(jù)通信時(shí),函數(shù)coGA_sendMsg發(fā)送短消息的延遲,并與原本GA模型和offload模式進(jìn)行對(duì)比.在發(fā)送短消息(小于4 KB)時(shí),數(shù)據(jù)所需的內(nèi)存空間通常由系統(tǒng)自動(dòng)分配,因此在測(cè)試時(shí)我們也采用系統(tǒng)自動(dòng)分配內(nèi)存空間的方式進(jìn)行.offload模式下,從源進(jìn)程發(fā)送到目標(biāo)進(jìn)程的數(shù)據(jù)至少是4 KB對(duì)齊的,這也導(dǎo)致了其發(fā)送小消息效率低下.而coGA_sendMsg和GA_Put根據(jù)變量大小分配合適空間,因此延遲較低.測(cè)試結(jié)果如圖7所示:當(dāng)數(shù)據(jù)小于4 KB時(shí),coGA_sendMsg和GA_Put的延遲要遠(yuǎn)小于offload模式;而coGA_sendMsg通過(guò)SCIF消息傳遞層傳遞小消息,沒(méi)有數(shù)據(jù)緩沖開(kāi)銷(xiāo),因此延遲也低于GA_Put;但當(dāng)數(shù)據(jù)不斷增加大于4 KB后,GA_Put帶寬低于offload模式,且SCIF消息傳遞層只適合發(fā)送小消息,因此coGA_sendMsg和GA_Put延遲急劇增加.

Fig. 7 Latency test圖7 延遲測(cè)試

此外,我們還測(cè)試了在MIC之間進(jìn)行數(shù)據(jù)通信時(shí)offload模式與CoGA接口的延遲表現(xiàn).由于傳輸數(shù)據(jù)較大,此時(shí)我們提前為傳輸數(shù)據(jù)分配內(nèi)存空間.測(cè)試結(jié)果如圖8所示:隨著數(shù)據(jù)規(guī)模增加,offload模式與coGA_Put延遲也不斷增加,而且coGA_Put延遲整體小于offload模式延遲.由于此時(shí)事先分配好內(nèi)存空間,因此offload模式下MIC間的傳輸延遲相對(duì)于未提前分配內(nèi)存情況下offload模式的傳輸延遲減小.但是offload延遲包含MIC0傳輸至CPU加上CPU傳輸至MIC1的時(shí)間,因此總延遲較大;相比之下,coGA_Put允許數(shù)據(jù)直接從MIC0傳輸至MIC1,因此延遲較低.

Fig. 8 Latency test between MICs圖8 MIC間延遲測(cè)試

Fig. 9 SpMV performance comparison圖9 稀疏矩陣乘性能測(cè)試

最后,我們通過(guò)稀疏矩陣乘問(wèn)題評(píng)估CoGA整體性能.矩陣1的規(guī)模為116 158×116 158,包含8 516 500個(gè)非零點(diǎn);矩陣2的規(guī)模為259 156×259 156,包含4 429 042個(gè)非零點(diǎn).這2個(gè)矩陣都存儲(chǔ)為CSR格式,CPU和MIC各自負(fù)責(zé)處理一半的數(shù)據(jù).CoGA和offload模式下測(cè)試結(jié)果如圖9所示:CoGA和offload模式的數(shù)據(jù)傳輸開(kāi)銷(xiāo)基本相同,說(shuō)明了CoGA通過(guò)SCIF進(jìn)行傳輸數(shù)據(jù)的性能與offload性能相當(dāng);與預(yù)測(cè)相符,計(jì)算開(kāi)銷(xiāo)也基本相同.

6 總 結(jié)

我們面向異構(gòu)系統(tǒng)對(duì)GA進(jìn)行拓展,結(jié)合MIC上的SCIF接口實(shí)現(xiàn)了CoGA,從而在CPU和MIC之間實(shí)現(xiàn)共享數(shù)據(jù)結(jié)構(gòu).CoGA提供的API接口隱藏?cái)?shù)據(jù)傳輸細(xì)節(jié)并允許編程人員忽略數(shù)據(jù)的具體位置而直觀操作共享數(shù)據(jù),實(shí)現(xiàn)了MIC之間直接的數(shù)據(jù)通信,進(jìn)而簡(jiǎn)化了編程難度.此外,CoGA基于庫(kù)實(shí)現(xiàn)的特點(diǎn)也保證了其與OpenMP和MPI等并行編程模型的兼容性.我們定義了2種數(shù)據(jù)傳輸方式:本地訪問(wèn)通過(guò)函數(shù)memcpy實(shí)現(xiàn),遠(yuǎn)端訪問(wèn)通過(guò)SCIF RMA接口實(shí)現(xiàn).我們對(duì)CoGA的傳輸帶寬的測(cè)試也表明了CoGA的實(shí)際性能遠(yuǎn)高于原本GA模型;此外,我們還通過(guò)函數(shù)coGA_sendMsg和coGA_recvMsg優(yōu)化小數(shù)據(jù)發(fā)送,降低通信延遲.CoGA在具有簡(jiǎn)單和高效特點(diǎn)的同時(shí)也存在不足,如現(xiàn)在API接口不夠豐富并只能應(yīng)用于CPU+MIC的異構(gòu)系統(tǒng).在下一步工作中,我們將繼續(xù)完善CoGA庫(kù)特性并嘗試將其拓展至GPU.

猜你喜歡
模型
一半模型
一種去中心化的域名服務(wù)本地化模型
適用于BDS-3 PPP的隨機(jī)模型
提煉模型 突破難點(diǎn)
函數(shù)模型及應(yīng)用
p150Glued在帕金森病模型中的表達(dá)及分布
函數(shù)模型及應(yīng)用
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
3D打印中的模型分割與打包
主站蜘蛛池模板: 成人在线亚洲| 国产91丝袜| 色综合狠狠操| 毛片免费高清免费| 久久激情影院| 无码高潮喷水专区久久| 中国国产A一级毛片| 亚欧美国产综合| 国内精品小视频福利网址| 国产另类乱子伦精品免费女| 99热这里只有精品在线观看| 女人一级毛片| 天天综合网色中文字幕| 欧美综合一区二区三区| 一区二区无码在线视频| 无码乱人伦一区二区亚洲一| 国产在线拍偷自揄观看视频网站| 国产毛片不卡| 在线看片中文字幕| 久久婷婷五月综合色一区二区| 国产三区二区| 国产美女无遮挡免费视频| 久青草网站| 中文无码精品a∨在线观看| 激情爆乳一区二区| 精品成人免费自拍视频| 久久一级电影| 亚洲成人精品在线| 欧美中文字幕在线播放| 国产成人av一区二区三区| 亚洲成年人片| a亚洲视频| 免费可以看的无遮挡av无码 | 欧美乱妇高清无乱码免费| 亚洲人成电影在线播放| 亚洲一区无码在线| 久久99热66这里只有精品一| 99在线国产| 国产三级国产精品国产普男人 | 91破解版在线亚洲| 久久综合色播五月男人的天堂| 午夜福利视频一区| 国产亚洲日韩av在线| 久久人人妻人人爽人人卡片av| 夜夜高潮夜夜爽国产伦精品| 欧美在线黄| 久久99精品久久久久纯品| 亚洲日本中文综合在线| 欧美国产菊爆免费观看| 色婷婷丁香| 国产免费a级片| 久久精品aⅴ无码中文字幕 | 久久婷婷五月综合色一区二区| 在线免费不卡视频| 国产日韩欧美在线播放| 国产欧美日韩另类| 国产激情影院| 亚洲AV无码乱码在线观看裸奔| 国产精品第| 国产喷水视频| 九色在线观看视频| 日韩成人在线视频| 九色免费视频| 色综合天天娱乐综合网| 国产欧美日韩91| 国产原创自拍不卡第一页| 国产丝袜91| hezyo加勒比一区二区三区| 亚洲男人天堂2020| 亚洲无码四虎黄色网站| 国产亚洲精久久久久久久91| 夜夜操天天摸| 亚洲国产理论片在线播放| 国产成人福利在线视老湿机| 2019年国产精品自拍不卡| 久久鸭综合久久国产| 无套av在线| 久精品色妇丰满人妻| 自偷自拍三级全三级视频| 黄片一区二区三区| 国产精品播放| 国产精品久久久久久久伊一|