朱文強(qiáng),傅 游,梁建國,郭 強(qiáng),花 嶸
1(山東科技大學(xué) 計算機(jī)科學(xué)與工程學(xué)院,山東 青島 266590)2(山東省計算中心(國家超級計算濟(jì)南中心),濟(jì)南 250101)
E-mail:huarong@sdust.edu.cn
分子動力學(xué)(molecular dynamics,MD)[1]作為一個科學(xué)計算領(lǐng)域的重要應(yīng)用,它是高性能計算領(lǐng)域中具有很強(qiáng)代表性和挑戰(zhàn)性的問題之一.針對不同的體系結(jié)構(gòu),研究者在HPC平臺上提出各種技術(shù)進(jìn)行分子動力學(xué)的加速運算.
2007年,James N.Glosli等[2]利用分子動力學(xué)實現(xiàn)了Kelvin-Helmholtz(KH)不穩(wěn)定性的首次微米級模擬,進(jìn)展主要體現(xiàn)在容錯、內(nèi)存優(yōu)化和高效并行3個方向;2009年,David E等[3]針對分子動力學(xué)模擬生物分子系統(tǒng),制造了一臺特殊的超級計算機(jī)Anton,特殊的硬件極大地提高了MD的計算速度;張勤勇等[4]分析討論了分子動力學(xué)模擬的算法特征和計算特點,采用基于消息傳遞的MPI設(shè)計平臺,在可擴(kuò)展機(jī)群上實現(xiàn)了并行化,獲得了90%以上的并行效率;趙文輝等[5]提出一種針對分子動力學(xué)的Atomreorder算法,通過重新調(diào)整粒子順序來增強(qiáng)程序的局部性,進(jìn)而減少Cache的丟失.
隨著圖形處理單元(Graphics Processing Units,GPUs)功能的增強(qiáng),加之分子動力學(xué)大多為數(shù)據(jù)并行計算,非常適合在其上運行.Jens Glaser等[6]在GPU上對HOOMD-blue程序進(jìn)行并行優(yōu)化,最終較CPU取得了12.5倍的加速;楊決寬等[7]在GPU平臺提出了一種加速分子動力學(xué)仿真計算的方法,并計算了固體氬的導(dǎo)熱系數(shù),獲得10到11倍的加速;張帥等[8]在GPU平臺將分子動力學(xué)模擬中的原子劃分和空間劃分相結(jié)合,優(yōu)化了用于近程力計算的Cell Verlet算法.目前常見的分子動力學(xué)軟件NAMD,VMD,LAMMPS,AMBER,GROMACS等均已發(fā)布支持GPU計算的版本.硅材料作為半導(dǎo)體和太陽能電池行業(yè)的重要材料之一,非平衡分子動力學(xué)模擬是研究硅晶體熱物理性質(zhì)的有力工具,克服了體狀硅和硅納米線導(dǎo)熱系數(shù)的有限尺寸效應(yīng)[9].針對硅晶體分子動力學(xué)模擬,中科院過程所的侯超峰等[10,11]在GPUs上實現(xiàn)了優(yōu)化.
在“神威·太湖之光”[12]上開展分子動力學(xué)研究的單位也較多.馬躍等[13]提出一種基于收斂策略的國產(chǎn)CPU性能測試模型;中國科學(xué)院過程工程研究所在此系統(tǒng)上對Cahn-Hilliard方程進(jìn)行并行優(yōu)化,將規(guī)模擴(kuò)展到了1,060萬核,雙精度浮點運算獲得了49.39PFlops性能[14];中國科學(xué)技術(shù)大學(xué)將納米級粒度分子動力學(xué)軟件NAMD在該系統(tǒng)上進(jìn)行移植和優(yōu)化,針對從核的結(jié)構(gòu)和主從核執(zhí)行關(guān)系對應(yīng)用進(jìn)行優(yōu)化,優(yōu)化后單個核組的性能較Intel Xeon E5-2650 v2提高3倍,但在擴(kuò)展性方面,至多可達(dá)到325萬核,仍需解決多節(jié)點性能與可擴(kuò)展性問題以及整機(jī)優(yōu)化、調(diào)度與負(fù)載平衡策略等問題[15];湖南大學(xué)從分子動力學(xué)算法出發(fā),針對SW26010的體系結(jié)構(gòu)特征,提出了一種基于簇粒子的新算法,然后逐步實現(xiàn)了3種仿真優(yōu)化方法:SW26010的并行擴(kuò)展、內(nèi)存訪問優(yōu)化和矢量化.經(jīng)過優(yōu)化處理后,在單個計算節(jié)點上實現(xiàn)了14倍加速,實驗中應(yīng)用了近24萬個計算節(jié)點(60萬核),獲得了近似線性的加速[16];山東大學(xué)在該系統(tǒng)上進(jìn)行了分子動力學(xué)軟件LAMMPS模擬,從4個方面進(jìn)行性能提升,優(yōu)化后單個計算節(jié)點的性能相當(dāng)于一百多個Intel Xeon E5-2650 v2的性能,使用16,384計算節(jié)點獲得了2.43Pflops性能[17];中國科學(xué)技術(shù)大學(xué)在該系統(tǒng)上重構(gòu)分子動力學(xué)應(yīng)用程序GROMACS,主要也是解決內(nèi)存帶寬限制的難題,最終單核組較主核版性能提升16倍,并且設(shè)法實現(xiàn)了300萬原子核移到798720個計算節(jié)點[18].
以上分子動力學(xué)程序的移植與優(yōu)化都取得了較好的效果,但是本文是針對硅晶體分子動力學(xué)模擬程序的移植與優(yōu)化,原子結(jié)構(gòu)以及模擬算法都有較大不同,另外,硅晶體分子動力學(xué)模擬使用了更為復(fù)雜的多體Tersoff勢[19-21],使得程序在SW26010處理器上移植時內(nèi)存受限問題變得更加突出,移植難度加大.徐陽等[22]利用OpenACC將Silicon-Crystal應(yīng)用移植到神威太湖之光上,并進(jìn)行了數(shù)據(jù)流驅(qū)動任務(wù)圖并行化,但他們主要偏重于并行編程模型的研究,而本文主要研究的是Silicon-Crystal應(yīng)用基于MPI+Athread的并行移植與優(yōu)化,主要是通過將多種優(yōu)化方法相結(jié)合來克服SW26010內(nèi)存受限問題.
“神威·太湖之光”計算機(jī)系統(tǒng)是由國家并行計算機(jī)工程技術(shù)研究中心自主技術(shù)研制的超級計算機(jī),該計算機(jī)系統(tǒng)峰值運算速度為125.43TFlop/s,功耗為15.37KW,整機(jī)內(nèi)存總?cè)萘繛?024TB,訪存總帶寬為4473.16TB/s.計算結(jié)點采用的是片上計算陣列集群和分布式共享儲存結(jié)合的SW26010異構(gòu)眾核處理器,處理器的頻率為1.45GHz,包括4個管理單元MPE、4個計算單元CPE及4個內(nèi)存控制器(Management Controller,MC)單元組成,其中每個CPE單元由8×8陣列的64核心組成,所以SW26010處理器共260個核心(4*64+4=260);每個核組有8GB本地內(nèi)存,4個核組共32GB內(nèi)存,每個運算核心有64KB的局部存儲器LDM,運算核心可以離散訪問主存,也可以通過 DMA方式將主存數(shù)據(jù)批量獲取到LDM中,同時運算核心陣列同行或同列還可以采用寄存器通信方式進(jìn)行通信.
SW26010處理器加速線程庫(Athread庫)是針對主從加速編程模型所設(shè)計的程序加速庫.用戶通過調(diào)用Athread接口函數(shù)管理從核的計算和訪存,每個線程的創(chuàng)建、回收、調(diào)度控制和中斷異常管理等操作都需要用戶調(diào)用接口實現(xiàn),需要用戶更精細(xì)地編寫代碼,以避免造成線程阻塞.該方式提高了執(zhí)行效率,但也增加了調(diào)試難度和出錯率.
Silicon-Crystal應(yīng)用來源于晶體硅的結(jié)晶生長.隨著半導(dǎo)體行業(yè)以及太陽能電池行業(yè)的發(fā)展,對晶體硅的數(shù)量和質(zhì)量要求不斷提高,研究硅晶體生長以更加精確地指導(dǎo)硅晶體的生產(chǎn)具有重要的意義.硅晶體的每個原子周圍有4個近鄰的原子,4個近鄰原子之間構(gòu)成正四面體結(jié)構(gòu),中心原子處在正四面體結(jié)構(gòu)中心,其晶體結(jié)構(gòu)如圖1所示,硅晶體由這樣的四面體累積起來構(gòu)成金剛石結(jié)構(gòu).這4個鄰居原子的位置各自處于正四面體的4個頂角上,頂角上的原子與中心原子分別提供一個價電子為這兩個原子共同擁有,從而形成共價鍵,每個硅原子和周圍的4個原子組成4個共價鍵,所以硅晶體屬于原子晶體.
圖1 硅晶體結(jié)構(gòu)示意圖Fig.1 Schematic diagram of silicon crystal structure
Silicon-Crystal應(yīng)用運用MD方法分析了目前比較常用的勢函數(shù)在模擬硅晶體生長方面的差異,最終選定了Tersoff勢來描述硅晶體原子間的相互作用.Silicon-Crystal應(yīng)用的主要計算核心為計算Tersoff勢的TersoffPotent函數(shù),Tersoff勢是由Tersoff根據(jù)量子力學(xué)中鍵序的概念,基于簡單的量子力學(xué)理論而提出的原子間相互作用勢模型,為一種超級勢,能較好地描述硅的非正面體結(jié)構(gòu),Tersoff勢的主要表達(dá)式為:
(1)
(2)
VR(r)=Aexp(-λ1r)
(3)
VA(r)=-Bexp(-λ2r)
(4)
其中,fc表示截斷函數(shù),Rij表示截斷半徑,rij表示原子i和j的距離,VR表示鄰居原子間的排斥力,VA表示鄰居原子間的吸引力,bij表示原子i與原子j間的鍵級.其它參數(shù)如表1所示.
表1 Si的Tersoff勢函數(shù)參數(shù)表Table 1 Major parameters for Tersoff potential function
Roofline模型是一個可以將浮點性能、計算密度和存儲性能等關(guān)聯(lián)起來可視化的性能分析模型.針對特定硬件平臺的Roofline模型的建立可以指導(dǎo)該處理器上不同類型應(yīng)用程序的優(yōu)化.
Roofline曲線取決于浮點性能峰值和內(nèi)存理論帶寬,本文針對SW26010處理器的浮點性能峰值和訪存帶寬分別進(jìn)行測試和計算.
SW26010主從核均支持256b向量化指令,以及乘加融合指令,每個從核支持一條浮點數(shù)雙精度流水線,主核支持雙浮點數(shù)流水線.由此可得,SW26010的雙精度理論峰值性能為:
主核:4×1.45×8×2=23.2GFlops
從核:64×1.45×4×2=742.4GFlops
SW26010處理器:4×23.2+4×742.4=3.06GFlops
從以上計算結(jié)果可知,SW26010的算力主要集中在從核,所以SW26010上進(jìn)行應(yīng)用的移植主要是要發(fā)揮其從核的性能,因此接下來主要刻畫SW26010從核的訪存帶寬.從CPE角度看,CPE陣列的內(nèi)存層次結(jié)構(gòu)包括3個級別:與MPE共享的8GB主存、64KB SPM和寄存器.CPE陣列訪存方式主要有兩種:1)通過具有全局內(nèi)存地址的常用裝入/存儲指令(gld/gst)離散訪問主存;2)通過直接內(nèi)存訪問DMA方式訪問主存.
通過STREAM Triad基準(zhǔn)測試測得訪問SPM的峰值帶寬最高為154.0GB/s,DMA方式訪存峰值帶寬為90.4GB/s,MPE訪存峰值帶寬為39.7GB/s,gld/gst方式訪存效果最差,峰值帶寬僅為5.92GB/s.
根據(jù)上述數(shù)據(jù),可以得到SW26010處理器的Roofline性能曲線如圖2所示.
結(jié)合SW26010處理器的Roofline模型與Silicon-Crystal程序的特征,確定了移植過程中4條需要遵循的原則.
圖2 SW26010的Roofline模型Fig.2 Roofline model of SW26010
1)Silicon-Crystal應(yīng)用是一個計算密集型的應(yīng)用,從Roofline模型構(gòu)建過程可知,SW26010處理器的主要算力在從核陣列,因此,應(yīng)盡量將應(yīng)用的熱點函數(shù)放在從核陣列上進(jìn)行計算,同時保證從核陣列負(fù)載平衡.
2)從Roofline模型可以看出,SW26010有限的內(nèi)存帶寬(90.4GB/s)導(dǎo)致較高的每字節(jié)浮點運算比率(33.85Flops/Byte),超過 KNL(7.05Flops/Byte)的4倍多,而其處理器峰值性能(3.06TFLops)卻與Intel KNL 7290(3.46TFlops)相當(dāng),這意味著SW26010處理器強(qiáng)大的運算能力會受到內(nèi)存帶寬的限制.為避免使應(yīng)用變成訪存受限,必須充分利用內(nèi)存帶寬.為了最大程度地減小內(nèi)存訪問開銷,應(yīng)盡量限制隨機(jī)數(shù)據(jù)訪問.
3)Silicon-Crystal應(yīng)用在計算過程中存在數(shù)據(jù)之間的依賴,為了使程序能夠更好的并行執(zhí)行,應(yīng)在并行前將依賴消除,同時,為提高數(shù)據(jù)的利用率和傳輸效率,盡量將所需數(shù)據(jù)提前準(zhǔn)備好.
4)SW26010處理器從核沒有超越函數(shù)的處理單元,從核在進(jìn)行超越函數(shù)計算時存在離散訪問主存的情況,需要用合理的方式避免從核離散訪存導(dǎo)致的計算性能下降.
將Silicon-Crystal應(yīng)用移植到SW26010處理器,首先移植到SW26010處理器的單個主核上,然后設(shè)計合理的方案將熱點函數(shù)移植到從核進(jìn)行并行加速.Silicon-Crystal應(yīng)用移植工作主要分為3個步驟:主核移植、數(shù)據(jù)處理和從核移植.
3.3.1 主核移植
Silicon-Crystal應(yīng)用程序是基于C++開發(fā)的,SW26010處理器的主核可以直接對C++代碼進(jìn)行編譯,但從核卻不支持C++代碼的編譯,而且主核上的C++編譯器sw5CC不支持SIMD庫.因此,本文用C語言對Silicon -Crystal程序進(jìn)行重構(gòu).完成主核移植后,使用神威平臺自帶的gprof工具進(jìn)行測試,發(fā)現(xiàn)TersoffPotent函數(shù)和pow函數(shù)的總運行時間占程序總時間的91%,是程序的主要熱點,接下來將圍繞這兩個函數(shù)進(jìn)行從核并行化優(yōu)化.
3.3.2 數(shù)據(jù)處理
通過對初始數(shù)據(jù)中原子的位置及編號分析發(fā)現(xiàn)原子的編號呈現(xiàn)亂序,考慮到從核移植需要利用DMA方式將主存數(shù)據(jù)取到從核的LDM中,而利用DMA方式對主存進(jìn)行訪問時,訪問的是一塊連續(xù)的主存地址,所以,需要將亂序的數(shù)據(jù)進(jìn)行重新排序,以保證數(shù)據(jù)的連續(xù)性,提高后續(xù)從核移植時DMA效率.
Silicon-Crystal應(yīng)用程序的計算數(shù)據(jù)是由N個亂序硅晶體原子信息構(gòu)成,其信息包含原子位置、速度、加速度、臨時加速度以及4個鄰居的編號,通過原子的位置信息可以得到所有原子均勻的分布在一個長方體空間內(nèi),其局部結(jié)構(gòu)如圖3(a)所示,每個原子的鄰居分布在原子周圍,原子與4個鄰居之間都構(gòu)成一個正四面體,結(jié)合這種特殊的結(jié)構(gòu),將數(shù)據(jù)按照原子位置所在的空間坐標(biāo)系先x,再y,后z的順序進(jìn)行編號,如圖3(b)所示,整理得到有序的原子數(shù)據(jù),同時從圖中可以看出,z方向上位移相同的原子會均勻的分布在一個平面上,且每個平面的原子編號是連續(xù)的,因此計算數(shù)據(jù)就可以看成是由多個這樣的平面組成的空間結(jié)構(gòu).
圖3 原子與原子鄰居之間的空間結(jié)構(gòu)圖Fig.3 Spatial structure between particles and their neighbors
計算數(shù)據(jù)重排序后的原子位置、速度、加速度、臨時加速度信息沒有發(fā)生改變,但是4個鄰居的編號發(fā)生了改變,為了防止原子與鄰居之間相互關(guān)系遭到破壞,用排序后的編號對應(yīng)更新鄰居表中排序前的編號,使每個原子都能通過鄰居表找到鄰居排序后的編號,所有的排序工作結(jié)束后,通過對每個原子的鄰居編號分析并結(jié)合上一段中由多個平面組成的空間結(jié)構(gòu)發(fā)現(xiàn),每個原子的4個鄰居位于原子所在面的前一面和后一面各兩個,如圖3(b)所示,31號原子的鄰居分別為前一面的13、16號和后一面的49、52號,而且相鄰編號的原子對應(yīng)的鄰居編號也是相鄰的,這是由硅晶體內(nèi)部原子間的結(jié)構(gòu)決定的,通過排序可以清楚地體現(xiàn)出數(shù)據(jù)的局部性和連續(xù)性.
3.3.3 從核移植
本節(jié)將對兩個熱點函數(shù)移植到從核進(jìn)行并行加速,主要步驟分為任務(wù)劃分與映射和依賴分析與消除.
1)任務(wù)劃分與映射
Silicon-Crystal應(yīng)用在計算時,每個原子的計算量大致相同,進(jìn)行從核移植時,為了從核之間負(fù)載均衡,將原子平均分配到64個從核進(jìn)行計算,又因為硅晶體原子在空間上有較強(qiáng)的局部性,所以選擇采用分塊的方式,將原子按空間劃分為64塊,每個從核計算一塊,充分利用原子的空間局部性.
以131072個原子為例,每個從核負(fù)責(zé)計算131072/64=2048個原子,經(jīng)過3.3.2節(jié)對數(shù)據(jù)進(jìn)行處理后,原子根據(jù)Z方向上位移不同,劃分為128個平面,每一個平面包含1024個原子,任務(wù)劃分后,每個從核負(fù)責(zé)計算2048個原子,表明每兩個連續(xù)平面上的原子為一塊,分配到對應(yīng)的從核進(jìn)行計算.
2)依賴分析與消除
硅晶體原子之間的作用力是相互的,Tersoff勢求的是鄰居原子對原子本身的作用力所產(chǎn)生的加速度以及原子本身對鄰居原子的反向作用力產(chǎn)生的加速度,最終加速度是將原子所受的加速度以及反向加速度累加,由于不同原子的鄰居原子之間存在交集,移植到從核后鄰居原子的計算與原子本身的計算可能不在同一個從核上,如果兩個從核同時操作一塊主存空間,會導(dǎo)致數(shù)據(jù)出錯.例如A原子的鄰居是B原子,同時A原子也是B原子的鄰居,當(dāng)原子A與B在分配到兩個不同的從核上計算時,兩個從核都要對主存上的A、B原子信息進(jìn)行更改,此時就會產(chǎn)生A、B原子的寫后寫依賴.為了消除這種數(shù)據(jù)依賴關(guān)系,首先,通過變量重命名法將作用力與反作用力所產(chǎn)生的加速度實現(xiàn)分離,在從核中保存反作用力產(chǎn)生的加速度的副本而不直接更新加速度;其次,在主存開了64份冗余空間存放從核計算的反作用力產(chǎn)生的加速度,在從核計算結(jié)束后將數(shù)據(jù)傳回主存,由主核將其累加求得最終加速度,實現(xiàn)主核異步串行數(shù)據(jù)更新,從而避免寫后寫數(shù)據(jù)依賴.
Silicon-Crystal應(yīng)用在進(jìn)行Tersoff勢函數(shù)的計算時需要用到許多的計算參數(shù),其中就包含表一中的A(eV)、B(eV)、β、n、c等,如果在從核利用gld/gst直接訪問主存中的這些參數(shù),會導(dǎo)致訪問的延時較大,而且多個從核同時訪問時易出現(xiàn)擁堵現(xiàn)象,不利于程序的加速.而每個從核都有各自的LDM局存,從核訪問LDM的延時要遠(yuǎn)小于從核離散訪問主存的延時,所以本文在開啟從核前,將從核計算所需要的計算參數(shù)以及常量整理打包,集中存放到一個結(jié)構(gòu)體中,從核開啟后通過DMA方式將數(shù)據(jù)一次取到LDM中,從核計算時直接從LDM中獲取計算所需參數(shù),減少了大量的離散訪存,加快了程序的運行速度.
在SW26010處理器中,主核MPE與從核簇CPEs共享8GB的存儲器,從核可以通過兩種方式訪問主存:1)利用gld/gst直接零散的訪問主存數(shù)據(jù);2)利用DMA方式將主存數(shù)據(jù)批量傳輸?shù)絃DM;DMA方式通常延時較大,但是帶寬的利用率較高.針對Silicon-Crystal傳輸數(shù)據(jù)量大的特點,應(yīng)盡量使用DMA方式來提升訪存帶寬.每個原子的信息封裝在一個結(jié)構(gòu)體中,結(jié)構(gòu)體包含位置、速度、加速度、臨時加速度、鄰居編號等信息組成共16元組(x,y,z,vx,vy,vz,ax,ay,az,tmpax,tmpay,tmpaz,nbrmark1,nbrmark2,nbrmark3,nbrmark4),計算時需要將計算原子傳輸?shù)絃DM中,一個原子信息就要占用112個字節(jié),64KB的LDM空間最多存放580個原子數(shù)據(jù),所以需對計算數(shù)據(jù)進(jìn)行分塊,取512個原子為一塊,通過DMA方式將原子信息傳輸?shù)絃DM,既可以減少離散訪存延時,又能將一塊連續(xù)的數(shù)據(jù)取到LDM中.
考慮到LDM一次存儲的數(shù)據(jù)量有限,在Tersoff勢的核心計算過程中取到LDM中的原子信息只用到了原子的位置以及鄰居編號,為了減少多余的數(shù)據(jù)放進(jìn)LDM中,在主核進(jìn)行數(shù)據(jù)處理時將結(jié)構(gòu)體數(shù)組(Array of Structure,AoS)轉(zhuǎn)為數(shù)組結(jié)構(gòu)體(Structure of Array,SoA),把所有原子的位置、速度、加速度、臨時減速度以及鄰居編號單獨存放到對應(yīng)的數(shù)組中,如圖4所示,從核可以只獲取原子的一個參數(shù)數(shù)據(jù),減少了大量的不必要數(shù)據(jù)放進(jìn)LDM中,由原來的16元組減少到了現(xiàn)在的7元組,從核通過DMA的方式可一次傳輸1024個原子數(shù)據(jù),提高了LDM利用率和DMA效率.
圖4 結(jié)構(gòu)體數(shù)組(AoS)轉(zhuǎn)數(shù)組結(jié)構(gòu)體(SoA)Fig.4 Transform AoS to SoA
在實現(xiàn)上述優(yōu)化策略后,中心原子可以通過DMA方式將原子信息取到LDM中,但是原子的鄰居編號需要通過查詢鄰居表才能獲得,無法直接通過DMA方式取到LDM中.但是由3.3.2節(jié)可知每個原子的4個鄰居分布在原子所在面的前一面和后一面各兩個,而且相鄰編號的原子對應(yīng)的鄰居編號也是相鄰的,即相鄰原子的鄰居之間存在較強(qiáng)的空間局部性,為了減少離散訪問原子鄰居帶來的長延時,本文通過在從核上設(shè)計軟件cache來充分利用數(shù)據(jù)的空間局部性,同時用DMA方式代替離散訪存.
軟件cache的設(shè)計主要考慮數(shù)據(jù)的預(yù)取、替換策略、重用策略3方面,但在SW26010上設(shè)計軟件cache還需要考慮占用LDM的空間以及符合Silicon-Crystal應(yīng)用特點,既要保證計算所需數(shù)據(jù)在LDM中,還要保證DMA的傳輸效率以及LDM的利用率,下面主要從cache大小的確定、數(shù)據(jù)預(yù)取、數(shù)據(jù)替換策略以及數(shù)據(jù)重用策略4方面進(jìn)行詳細(xì)設(shè)計.
cache大小的確定:經(jīng)過DMA優(yōu)化后,從核LDM需要存儲1,024個中心原子位置、1,024個中心原子的鄰居編號等數(shù)據(jù)信息,剩余空間不足20KB,所以軟件cache大小應(yīng)該小于20KB.硅晶體結(jié)構(gòu)中每個原子有4個鄰居需要分別存放在不同的cacheline中,所以將cacheline數(shù)量設(shè)置為4,cacheline大小根據(jù)原子的空間局部性確定,考慮到數(shù)據(jù)處理后相鄰編號的原子對應(yīng)的鄰居編號也是相鄰的,而且呈現(xiàn)每32個鄰居編號組成一個連續(xù)的數(shù)據(jù)塊,而32個原子占用768字節(jié),所以取的原子數(shù)應(yīng)為32的倍數(shù),為了充分利用LDM空間,cacheline大小確定為3KB,最終cache大小為12KB軟件cache的數(shù)據(jù)預(yù)取:Tersoff勢的計算過程中將數(shù)據(jù)的前后、上下、左右平面視為對接,在3個維度上構(gòu)成回環(huán),使得一個維度上前端原子的鄰居反而在末端,所以當(dāng)數(shù)據(jù)未命中對數(shù)據(jù)進(jìn)行預(yù)取時,將首地址設(shè)置為未命中原子編號向前取臨近32倍數(shù)的原子編號地址,通過DMA方式一次取連續(xù)的3KB數(shù)據(jù)放到一個cacheline中.
軟件cache的替換策略:因為原子有較強(qiáng)的局部性,取到cacheline中的原子會按序訪問,最先取到cacheline中的原子最先訪問結(jié)束,所以選擇采用 FIFO替換策略來保證替換進(jìn)來的數(shù)據(jù)得到充分的利用,同時也降低了軟件cache設(shè)計的復(fù)雜度.替換時將cacheline中第一個原子編號存放到對應(yīng)cacheline的tag中,計算時可以將鄰居編號與 cacheline的tag進(jìn)行比較,快速確定是數(shù)據(jù)否命中.
軟件cache的重用策略:數(shù)據(jù)整理后已知4個鄰居分布在上下兩層,而且根據(jù)每個維度的大小原子鄰居呈現(xiàn)周期性變化,前一個周期所有原子的2號和4號鄰居原子會被作為后一個周期所有原子的1號和3號鄰居原子再次參與計算,即鄰居面上同一個原子會被作為中心面上兩個原子的鄰居參與計算,為了提高cache中數(shù)據(jù)的重用率,采用了全相聯(lián)映射機(jī)制,降低cache設(shè)計的復(fù)雜度.
完成以上優(yōu)化后,利用penv_slave2_gld_count接口測得從核存在大量離散訪存,主要原因是神威平臺的編譯環(huán)境中默認(rèn)鏈接的數(shù)學(xué)庫需要離散訪存操作,而程序中存在大量的pow、exp、sin以及cos等數(shù)學(xué)庫函數(shù)的使用,導(dǎo)致大量離散訪存,減低了性能.如果改用在CPE上實現(xiàn)的已經(jīng)優(yōu)化的GNU數(shù)學(xué)庫,雖不會產(chǎn)生gld/gst指令,但要通過查LDM中的相應(yīng)函數(shù)表實現(xiàn),sin和cos函數(shù)表共享4KB空間,而pow和exp的函數(shù)表大約占用9KB空間,4個庫函數(shù)共需要占用大約13KB的LDM空間,使得軟件cache和各種數(shù)據(jù)緩沖能夠使用的空間減小.為此,本研究使用多項式近似計算超越函數(shù)的值.
ex函數(shù)求解方法如下:利用式ex=2xlog2e進(jìn)行轉(zhuǎn)換;令xlog2e=p+q,則ex=2p·2q,其中p為浮點數(shù)的整數(shù)部分,q為小數(shù)部分且0≤q<1;通過指數(shù)函數(shù)求解2p;利用式2q=eqln2進(jìn)行轉(zhuǎn)換;最后利用泰勒公式展開的多項式P(x)進(jìn)行求解,在P(x)的階數(shù)為11時,|P(x)-ex|<10-14可以滿足計算精度的需求.
pow函數(shù)的求解方法為:x<0時,y為整數(shù),可以直接求解;x>0時,通過式xy=eyln(x)求解,其中,利用公式:
(5)
求得ln(x),再利用exp和ln函數(shù)求解pow函數(shù).
對于sin函數(shù),則利用sin函數(shù)的周期性得到sin(x)=sin(x%2π),令y=x%2π,為了快速收斂,利用sin函數(shù)的對稱性,即:
(6)
將y化簡為區(qū)間[0,π/2)內(nèi)的值,然后利用泰勒展開式:
(7)
進(jìn)行計算,最終求得sin(x)的值.cos函數(shù)計算與此類似.
從核直接調(diào)用以上實現(xiàn)的超越函數(shù)進(jìn)行求解,不僅消除了從核調(diào)用超越函數(shù)產(chǎn)生的離散訪存,而且節(jié)省LDM空間.
經(jīng)過使用軟件cache后,極大地提高了數(shù)據(jù)的重用率,減少了DMA的訪存次數(shù),但是由于LDM僅有64KB,依然無法將整面原子計算所需要的數(shù)據(jù)以及計算后產(chǎn)生的數(shù)據(jù)完全存放在cache中,而且仍然會有許多原子作為不同原子的鄰居多次傳輸?shù)絃DM中,導(dǎo)致傳輸效率低,所以本文設(shè)計了一種分步流水的方式將Tersoff勢的計算分為兩部分進(jìn)行,對計算所需以及計算產(chǎn)生的數(shù)據(jù)分到不同LDM中進(jìn)行存儲.
深入分析Tersoff勢的計算過程可以看出在每個原子的計算主要分為兩部分,第1部分為截斷函數(shù)的求解,通過原子與鄰居的位置求得相互之間的距離,然后代入2.2節(jié)中公式(2)進(jìn)行求解;第2部分為硅晶體勢能求解,將求得的原子與鄰居之間的距離代入公式(3)和公式(4)求出原子之間的吸引力和排斥力,結(jié)合第1部分截斷函數(shù)的求解,通過公式(1)得到硅晶體的勢能.計算過程中,主要的存儲數(shù)據(jù)為第1部分求解所需原子的位置以及第2部分利用原子之間相互作用力求得的原子的加速度,如果將一整面計算所需要的位置數(shù)據(jù)存放到LDM中,計算產(chǎn)生的原子加速度將無法存放,因此為了使計算數(shù)據(jù)能夠完整地存儲到LDM中,將前后兩部分計算分配到兩個從核進(jìn)行計算,中間交互使用寄存器通信,使用從核寄存器的點對點通信全片聚合帶寬高達(dá)2043.4GB/S,合理使用寄存通信可以進(jìn)一步減少從核冗余的訪存操作,極大提升計算性能.
圖5 從核間雙流水模式Fig.5 Step-to-step pipeline and double buffering between CPEs
將從核陣列分為偶數(shù)核和奇數(shù)核,偶數(shù)核從主存獲取計算所需的原子位置信息存儲到LDM中,然后進(jìn)行截斷函數(shù)的計算,計算結(jié)束后通過寄存器通信傳輸?shù)狡鏀?shù)核,奇數(shù)核拿到計算數(shù)據(jù)后進(jìn)行吸引力、排斥力和加速度的計算,將計算后數(shù)據(jù)存儲到奇數(shù)核LDM中,在奇數(shù)核計算的同時,偶數(shù)核可以進(jìn)行下一個原子截斷函數(shù)的計算,這樣便形成了從核間任務(wù)的分步流水計算,如圖5(a)所示,此時將計算原子以及鄰居原子一次存到偶數(shù)核LDM中,將計算后的加速度數(shù)據(jù)存放到奇數(shù)核LDM中,減少DMA次數(shù),而且提高DMA效率.
實現(xiàn)任務(wù)分步流水優(yōu)化后,從核LDM仍然有剩余空間,考慮到每個從核要對多個連續(xù)的原子面進(jìn)行計算,所以使用雙緩沖優(yōu)化將計算與通信進(jìn)行隱藏,如圖5(b)所示,偶數(shù)核在計算前發(fā)起下次所需數(shù)據(jù)的DMA請求,到下次計算之前檢測數(shù)據(jù)是否傳輸完成,奇數(shù)核在發(fā)起寫回主存的DMA請求的同時直接進(jìn)行下一次的計算,直到下一次計算結(jié)束后判斷傳輸有沒有結(jié)束,奇數(shù)核和偶數(shù)核都實現(xiàn)了雙緩沖流水,結(jié)合任務(wù)分步流水,形成了從核間分步流水從核內(nèi)部雙緩沖流水的雙流水模式
為了測試驗證上述研究內(nèi)容的效果,將Silicon-Crystal應(yīng)用分別在SW26010異構(gòu)眾核處理器和Intel Xeon E5-2620 v4處理器上的性能進(jìn)行測試對比,表2列舉了試驗平臺信息.
表2 實驗用軟、硬件環(huán)境配置信息Table 2 Experimental software and hardware environment configuration information
實驗將運行在1個主核上的Silicon-Crystal應(yīng)用作為測試基準(zhǔn),對第4節(jié)中的5步優(yōu)化逐步進(jìn)行測試.測試數(shù)據(jù)規(guī)模為:131072個原子構(gòu)成的回環(huán),迭代計算次數(shù)為1000次.
本文所有優(yōu)化方法的性能測試結(jié)果如圖6所示,從圖6中可以看出:
圖6 多種方法優(yōu)化后程序的運行時間Fig.6 Running time of the program after implementing each optimization
1)進(jìn)行簡單從核并行后,性能不但沒有提升反而有所下降,主要原因是從核的離散訪存占時較大,導(dǎo)致計算優(yōu)勢難以發(fā)揮.
2)對從核訪存方面進(jìn)行的優(yōu)化效果進(jìn)行評估.首先通過數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換使其更適合DMA傳輸,提高從核的訪存帶寬;針對應(yīng)用中存在的不規(guī)則數(shù)據(jù)訪問,結(jié)合硅晶體的結(jié)構(gòu)特征進(jìn)行數(shù)據(jù)預(yù)處理,使數(shù)據(jù)更具空間局部性,從而利用軟件cache進(jìn)一步提升從核的訪存帶寬;針對應(yīng)用中存在的大量超越函數(shù)的離散訪存,通過在從核上定制的數(shù)學(xué)庫函數(shù)解決了其離散訪存問題;為了進(jìn)一步減少從核訪存,還通過鄰居預(yù)取以及任務(wù)分步流水方法進(jìn)一步減少從核訪存.最終單個核組的運行時間由778.55s減少到60.37s,其性能比測試基提升了12.89倍.同時還可以看出,SW26010處理器的單核組優(yōu)化性能相較于Intel Xeon E5-2620 v4處理器串行程序提升了8.7倍.
單核組性能優(yōu)化及評估結(jié)束后,本文又在神威平臺上利用MPI+Athread實現(xiàn)了Silicon-Crystal應(yīng)用的多節(jié)點并行版本,并對其進(jìn)行了強(qiáng)、弱可擴(kuò)展性測試及分析.
強(qiáng)可擴(kuò)展性:對Silicon-Crystal應(yīng)用的數(shù)據(jù)進(jìn)行擴(kuò)展,將數(shù)據(jù)量擴(kuò)展到67108864數(shù)據(jù),進(jìn)程的規(guī)模最大擴(kuò)展到了512個核組,測試結(jié)果如圖7所示.
圖7 Silicon-Crystal應(yīng)用在從核上的強(qiáng)可擴(kuò)展性分析Fig.7 Strong scalability of Silicon-Crystal application
從圖7可以發(fā)現(xiàn)隨著核數(shù)的增長,運行時間在逐漸減少,到最后趨向平穩(wěn),因為隨著核組數(shù)的增長,數(shù)據(jù)的切分越來越多,進(jìn)程之間的通信也隨之增多,進(jìn)程間的通信占比越來越大,程序運行時間逐漸受到通信的限制趨向于平穩(wěn).
表4 弱可擴(kuò)展性測試規(guī)模Table 4 Scale of weak scalability test
弱可擴(kuò)展性:隨著核組數(shù)的增長,數(shù)據(jù)也跟著同比增長,由最開始的4個核組運行524288數(shù)據(jù)擴(kuò)展到512個核組運行67108864數(shù)據(jù),數(shù)據(jù)規(guī)模以及不同規(guī)模下程序的執(zhí)行時間如表4所示,可以看出隨著核組數(shù)和數(shù)據(jù)量的同比增長,執(zhí)行時間并沒有隨著通信量的增加而加長,呈現(xiàn)相對平穩(wěn)狀態(tài),表明Silicon-Crystal應(yīng)用程序具有較好的弱可擴(kuò)展性.
本文基于國產(chǎn)異構(gòu)眾核處理器SW26010的體系結(jié)構(gòu)特點,使用神威平臺的MPI+Athread并行編程模型對Silicon-Crystal應(yīng)用進(jìn)行了并行化.在對應(yīng)用進(jìn)行主核移植后,針對Silicon-Crystal應(yīng)用程序熱點函數(shù)特點,從5個方面進(jìn)行單核組優(yōu)化,使其性能相比主核串行基準(zhǔn)測試程序提升12.89倍.與Intel CPU平臺串行程序相比,提升8.7倍.
下一步將針對多節(jié)點運行進(jìn)行更深入的優(yōu)化,并對大規(guī)??蓴U(kuò)展性進(jìn)行深入研究.