文敏華,陳 江,胡廣超,韋建文,王一超,林新華
(1.上海交通大學網絡信息中心,上海 200240;2.英特爾(中國)有限公司,北京 100013)
隨著計算機計算能力的飛速提高,處理器和存儲性能的差距越來越大,數(shù)據(jù)訪問能力越來越成為超級計算機應用的瓶頸。在傳統(tǒng)的計算機架構中,DRAM負責銜接處理器和硬盤的數(shù)據(jù)流通。目前,超級計算機上單節(jié)點的DRAM容量已經能達數(shù)百GB。然而,以DRAM為主的內存配置方式存在2個問題:(1)DRAM的延時通常在幾十納秒,其下一級的固態(tài)硬盤,延時能達到上百微秒至幾十毫秒,二者之間存在巨大的性能差異,一旦數(shù)據(jù)無法從內存讀取,將面臨極大的開銷;(2)隨著對計算模擬精度要求的不斷提高,超級計算機上的應用在單節(jié)點產生的數(shù)據(jù)量急劇增大,DRAM由于其相對較高的價格,難以在容量上大規(guī)模擴展。
近年來,研究人員在不斷探索新興的內存技術,力求保證字節(jié)尋址能力和出色的可擴展性,其中持久內存技術PMEM(Persistent MEMory) 可提供快速的持久存儲,補充 DRAM 以擴展主存儲器容量。最近推出的 PMEM 技術中最有影響力的是 Intel傲騰持久內存DCPMM(Intel’s optane Data Centre Persistent Memory Module)。
相比于DRAM,持久內存可持久化、價格低、密度更高,Intel傲騰持久內存單條容量可達到128 GB/256 GB/512 GB,且支持按字節(jié)直接尋址(Binary Addressable)。在使用上,持久內存可以支持2種模式:內存模式和App Direct模式,適用不同應用場景。其缺點是帶寬相對較低、延遲也更高,這對其在實際應用上的使用有一定影響。
計算流體力學CFD (Computational Fluid Dynamics)[1]是超級計算機的一個重要應用領域,是一個介于數(shù)學、流體力學和計算機之間的交叉學科,其主要研究內容是通過計算機和數(shù)值方法來求解流體力學的控制方程,對流體力學問題進行模擬和分析,在航空航天、船舶等領域應用廣泛。近年來,隨著計算精度需求的提高,以及對LES(Large Eddy Simulation)[2]和DNS(Direct Numerical Simulation)[3]等高精度模型的使用,前沿CFD問題的數(shù)據(jù)量越來越大,因此探索大容量內存解決方案具有實際使用價值。
本文基于Intel傲騰持久內存的內存模式評估常見CFD算法的性能,了解在完全不增加編程難度的情況下,傲騰持久內存對CFD性能的影響。本文的主要貢獻點有如下2點:
(1)對兩代Intel傲騰內存分別進行了基準測試,與DRAM進行了對比,測試了訪存帶寬;
(2)結合2個迷你應用和1個真實應用,評估了傲騰持久內存對3種常見的CFD算法的性能影響。對于CFD實際應用,測試和總結了持久內存對大數(shù)據(jù)量算例的性能影響。
目前已有一些基于Intel持久內存的研究工作。Weiland等人[4]評估了Intel持久內存對一些內存受限和I/O受限的HPC(High Performance Computing)應用在性能方面的影響,發(fā)現(xiàn)NUMA(Non Uniform Memory Access)對性能有顯著影響,必須通過進程綁定和盡可能保持數(shù)據(jù)本地存儲來保持數(shù)據(jù)局部性。Yang等人[5]使用基準程序測試了Intel持久內存的延遲和帶寬,并提出了一系列可實踐操作的指南。Akram等人[6]分析了Java負載在持久內存上的性能可擴展性。Mason等人[7]發(fā)現(xiàn)持久內存在局部性上比DRAM 更敏感,使用持久內存的大頁面的 Linux 策略提供了更好的 TLB 和頁表局部性,可以有更好的性能。Patil等人[8]評估了DRAM和持久內存混合內存系統(tǒng)的功能及其對高性能計算應用程序的影響,還在持久內存的不同配置下測試了多個 HPC 迷你應用程序的性能。以上工作基本上都是基于Intel第1代持久內存來開展的,本文分別基于兩代Intel持久內存和DRAM內存進行一系列實驗,面向CFD領域3種常見算法進行性能評估。
字節(jié)可尋址持久內存是一種非易失性存儲器(即斷電后數(shù)據(jù)仍然存在),并且可以同時由 CPU 通過加載和存儲操作直接尋址。Intel的傲騰數(shù)據(jù)中心持久內存DCPMM產品是一種基于 3D XPoint技術[9]的字節(jié)可尋址持久內存。3D XPoint于 2015 年被提出,是一種新型內存技術,其性能與傳統(tǒng)的主存相當,但是容量要遠遠高于DRAM;它的容量可與SSD相比,但是速度與耐用性要高出數(shù)個量級。
持久內存與DRAM使用相同的硬件接口,與標準 DRAM 模塊一起位于 CPU 旁邊的 DIMM 插槽中,與內存總線上的 DRAM 共存,既可以用作 DRAM 的替代品,也可以用作高性能和低延遲的存儲設備。當前DCPMM提供了3種不同大小的容量(128 GB、256 GB和512 GB),與 DDR4 DRAM 相比,容量(每個模塊)增加了約 5~10 倍。盡管 DCPMM 比 DRAM 慢,但與僅使用 DRAM 的解決方案相比,它提供的每個節(jié)點的內存容量要高得多。 DCPMM 不能完全取代 DRAM:每個內存通道(每個CPU有6個內存通道,每個內存通道有2個DIMM插槽)必須至少填充一個 DRAM DIMM。
DCPMM 可以在2種主要平臺模式下運行:內存模式和App Direct 模式。
(1)內存模式:連接在同一個集成內存控制器上的DRAM會作為持久內存的緩存工作。該模式下DRAM無法直接訪問,而是作為持久內存在直接映射緩存策略下的可寫回緩存,持久內存作為大容量易失內存使用。DRAM作為緩存命中時,性能可以與DRAM相當;但是不命中時,開銷為DRAM的訪問開銷加上持久內存的訪問開銷。其最大的優(yōu)勢是用戶程序不需要經過任何修改可直接運行,應用沒有移植成本。
(2)App Direct模式:持久內存作為可持久化的存儲設備使用,該模式下持久內存和相鄰的DRAM都會被識別為操作系統(tǒng)可見的內存設備,持久內存是與DRAM分離的持久化設備,DRAM則用作主存儲器。持久內存上部署文件系統(tǒng)后,其訪問時間比常規(guī)存儲設備(如SSD)的訪問時間短得多。其缺點是,用戶需要使用相應的編程模型規(guī)范對持久內存進行應用程序的編程,會有代碼修改的人力成本。
本文基于Intel第1代(Intel 100系列傲騰持久內存,代號Apache Pass,簡稱AEP)和第2代DCPMM(Intel 200系列傲騰持久內存,代號Barlow Pass,簡稱BPS)進行實驗。AEP與第2代Intel至強可擴展處理器家族Cascade Lake同時發(fā)布于2019年4月,可與Cascade Lake及之后發(fā)布的處理器搭配使用,單路CPU最多可支持6通道、3 TB持久內存,加上DRAM,則單路CPU最高配置主存為4.5 TB。BPS發(fā)布于2021年,需與第3代Intel至強可擴展處理器搭配使用,與前一代相比,雖然單條容量不變,但是單路CPU可配置的容量和性能均大幅提升,最多可支持8通道、4 TB持久內存,主存最高容量為6 TB。
CFD應用核心內容是對偏微分方程組進行求解,求解的方法有顯式求解、隱式求解和通過粒子模擬的直接求解等,本文面向這3種基本求解方法分別進行性能測試。
為了比較持久內存對不同CFD算法性能的影響,本文選用了STREAM基準測試[10],CloverLeaf[11]和TeaLeaf[12]2個迷你應用以及基于DSMC (Direct Simulation Monte Carlo)[13]的真實應用進行測試。其中,STREAM對內存帶寬進行基準測試,CloverLeaf是顯式求解方法,TeaLeaf是隱式求解方法,DSMC是直接模擬的粒子方法。
STREAM是一個簡單的用于測試可持續(xù)訪存帶寬的綜合基準測試程序,由4種不同算術操作表征,分別是Copy、Scale、Add和Triad。STREAM最多使用3個數(shù)組和1個標量進行上述基本算術,通過控制數(shù)組維度決定數(shù)據(jù)大小,可以實現(xiàn)不同數(shù)據(jù)量的內存帶寬測試。本文使用Triad操作測出的帶寬,即a[j] =b[j]+scalar×c[j],作為測試基準。
CloverLeaf 是一個基于笛卡爾網格顯式求解可壓歐拉方程的迷你應用程序,基于交錯網格進行物理量存儲,即每個單元格存儲3個值:能量、密度和壓力,速度向量存儲在每個單元格角。求解時遍歷每個單元格,使用Stencil操作更新物理量,在大部分架構下其性能受限于訪存帶寬。本文使用bm4(網格規(guī)模1920×1920,數(shù)據(jù)量約0.7 GB)、bm16(網格規(guī)模3840×3840,數(shù)據(jù)量約2.8 GB)和bm64(網格規(guī)模7680×7680,數(shù)據(jù)量約11 GB)3個算例。
TeaLeaf是在分解的二維和三維規(guī)則空間網格上,借助五點與七點有限差分 Stencil計算方法,使用隱式求解器來解決線性熱傳導方程的應用程序,TeaLeaf使用 Chebyshev求解器作為預處理器,將CG(PPCG)作為求解器的具體方法。本文使用bm2(網格規(guī)模250×250,數(shù)據(jù)量約56 MB)、bm4(網格規(guī)模1000×1000,數(shù)據(jù)量約230 MB)和bm5(網格規(guī)模4000×4000,數(shù)據(jù)量約2.8 GB)3個算例。
DSMC算法是一種基于統(tǒng)計學的流場數(shù)值仿真程序,基于Boltzmann方程模擬仿真粒子。它用大量的模擬分子代替真實氣體分子,并用計算機模擬分子的運動和碰撞過程,最后通過統(tǒng)計模擬分子的運動狀態(tài)得到流體的宏觀量。這種直接模擬方法極大簡化了計算模型,從而使計算過程得到簡化。同時,由于對分子的移動和碰撞進行了解耦,因此在碰撞計算中可以引入各種碰撞模型,極大地擴大了DSMC方法的適用范圍。DSMC對訪存帶寬和延遲均有一定要求。由于DSMC是對粒子進行模擬,對計算量和數(shù)據(jù)量均有極大的需求,本文基于DSMC對大數(shù)據(jù)量(100 GB以上)的算例進行測試。
本文分別基于AEP和BPS進行測試,AEP服務器配置雙路Intel(R) Xeon(R) Gold 6248R CPU,12條32 GB 2 666 MT/s DRAM內存和12條AEP 128 GB持久內存,BPS服務器配置雙路Intel(R) Xeon(R) Gold 6338 CPU,16條32 GB 2 933 MT/s DRAM內存和16條BPS 128 GB持久內存,具體硬件參數(shù)如表1所示,所有測試算例均運行于單節(jié)點。2臺服務器使用相同的軟件環(huán)境配置:操作系統(tǒng)版本為CentOS Linux 7.7,編譯器使用Intel Parallel Studio 2020。
Table 1 Testing platform environment configuration
對于AEP服務器和BPS服務器,本文分別基于配置了持久內存的內存模式和不配置持久內存的純DRAM模式進行一系列實驗,以對比持久內存對應用性能的影響。在測試使用純DRAM的性能時,采用拔掉相應服務器持久內存的方案,文中仍稱為AEP/BPS服務器,圖中以AEP_DRAM/BPS_DRAM指代。
本文用STREAM基準測試測試了DRAM和兩代傲騰持久內存的訪問帶寬,STREAM基準測試中,會對所有內存操作重復20次后取平均值。
6.1.1 NUMA訪存影響
從已有研究結果[4]可知,NUMA對持久內存性能影響較大。本文通過numactl命令進行內存和CPU的綁定,分別測試單CPU訪問同socket內存和跨socket內存時的帶寬,結果如圖1所示??梢钥吹?,無論是AEP還是BPS,單CPU跨socket訪問對帶寬的影響都非常大,訪存帶寬降低50%左右。
Figure 1 Performance impact of NUMA圖1 NUMA訪存影響
6.1.2 持久內存和DRAM的帶寬比較
圖2展示了節(jié)點整體訪存帶寬,這里設定的數(shù)據(jù)量大小約為2 GB,對于持久內存節(jié)點,該數(shù)據(jù)量遠遠小于作為緩存的DRAM容量,然而,持久內存節(jié)點的訪存帶寬均顯著低于DRAM的,約為后者的70%,因此可以推斷,對于有訪存限制的應用,在內存模式下,數(shù)據(jù)量即使小于配置的DRAM內存,性能也會受到一定影響。由于通道數(shù)和內存頻率的提升,BPS的帶寬比前一代AEP的訪存帶寬有顯著提高,純DRAM方案和持久內存方案帶寬均提升約50%。
Figure 2 DRAM bandwidth vs PMEM bandwidth圖2 DRAM帶寬與PMEM帶寬
6.1.3 不同數(shù)據(jù)規(guī)模的訪存帶寬
圖3和圖4分別展示了DRAM和持久內存在不同數(shù)據(jù)規(guī)模下STREAM帶寬的測試結果。對于DRAM,在其容量范圍內,改變數(shù)據(jù)規(guī)?;旧蠈挍]影響,而對于持久內存,測試出來的帶寬會隨著測試的數(shù)據(jù)規(guī)模的增大而減小,這意味著隨著數(shù)組增大,配置持久內存的服務器實際訪存性能會降低。因此可以推斷,對于帶寬敏感的應用,不管是AEP還是BPS,數(shù)據(jù)量增大以后,持久內存的測試性能都會受到影響。
Figure 3 Bandwidth of DRAM under different data size圖3 不同數(shù)據(jù)規(guī)模DRAM的帶寬
Figure 4 Bandwidth of PMEM under different data size圖4 不同數(shù)據(jù)規(guī)模持久內存的帶寬
CloverLeaf采用顯式求解算法,其核心部分是Stencil算法,該算法對帶寬的依賴比較大。本文基于OpenMP并行版本測試了不同算例的結果,其擴展性如圖5和圖6所示,縱坐標為同線程數(shù)下CloverLeaf在持久內存和DRAM上的相對性能。線程數(shù)較小時,DRAM和持久內存的性能差異不大,隨著線程數(shù)的增加,二者性能差異有稍微增加的趨勢,對于AEP,性能差異最大時,持久內存性能約為DRAM的85%,對于BPS,其與DRAM的性能差異則更小,大部分在90%以上,最大差異為87%。
Figure 5 Performance comparison of AEP PMEM and DRAM based on CloverLeaf圖5 基于CloverLeaf的AEP持久內存與DRAM性能比較
Figure 6 Performance comparison of BPS PMEM and DRAM based on CloverLeaf圖6 基于CloverLeaf的BPS持久內存與DRAM性能比較
對于同樣的算例,在都采用服務器所有核心運行的情況下,本文對比了不同配置下的相對性能,如圖7所示,這里以AEP服務器的純DRAM性能為基準進行比較。相比AEP,BPS的性能有了顯著的提升,對于純DRAM方案,性能提升了30%~40%,對于持久內存方案,性能提升了40%以上。
Figure 7 Performance comparison of BPS and AEP圖7 BPS與AEP性能比較
TeaLeaf采用隱式求解算法,對延遲和帶寬有一定要求。本文選用3個小數(shù)據(jù)量(最大2.8 GB)的算例進行測試,不同算例的擴展性結果如圖8和圖9所示,持久內存和DRAM的性能差異較小,對AEP來說,差異最大的算例,性能為DRAM的92%,對BPS來說,幾乎所有算例的性能均與DRAM的差不多。
Figure 8 Performance comparison of AEP PMEM and DRAM based on TeaLeaf圖8 基于TeaLeaf的AEP持久內存與DRAM性能比較
Figure 9 Performance comparison of BPS PMEM and DRAM based on TeaLeaf圖9 基于TeaLeaf的BPS持久內存與DRAM性能比較
對于TeaLeaf,在都采用服務器所有核心運行的情況下,不同配置下的性能對比如圖10所示,對于規(guī)模較小的bm2算例,相比AEP,BPS的性能有所下降,本文認為這是因為規(guī)模較小時,可擴展性較差,BPS服務器具有64核心,而AEP服務器是48核心,對于規(guī)模相對較大的bm4算例和bm5算例,BPS服務器性能提升約20%~30%。
Figure 10 Performance comparison of BPS and AEP based on TeaLeaf圖10 基于TeaLeaf的BPS與AEP性能比較
DSMC是基于粒子網格方法的CFD算法,可以獲得高精度的模擬結果,對計算量和存儲的需求均十分龐大,本文基于真實的DSMC應用進行測試,單節(jié)點數(shù)據(jù)量在100 GB以上,線程數(shù)較少時難以進行測試,因而使用節(jié)點內的所有CPU核心計算,并通過調節(jié)每個網格的粒子數(shù),來調整每個節(jié)點的數(shù)據(jù)量,最大規(guī)模數(shù)據(jù)量達到了1 TB。
不同配置下的性能對比如圖11所示,該算例占用內存的數(shù)據(jù)量約為130 GB,對于該算例AEP和BPS性能差距不大,在5%以內。本文認為,這是因為相對于CloverLeaf和TeaLeaf這種對訪存性能敏感的程序,DSMC在算法上具有更高的計算/訪存比,對訪存的性能相對沒有那么敏感。
Figure 11 Performance comparison of BPS and AEP based on DSMC圖11 基于DSMC的BPS與AEP性能比較
為測試大規(guī)模數(shù)據(jù)對性能的影響,本文在BPS節(jié)點上進行了不同數(shù)據(jù)量的測試,并以純DRAM運行的時間為基準進行對比,結果如圖12所示。對于DSMC,數(shù)據(jù)規(guī)模較小時,持久內存和DRAM性能相差不大,但隨著數(shù)據(jù)規(guī)模的增大,運行時間顯著增加,且增加比例大于數(shù)據(jù)量增加的比例,與DRAM的性能差異也顯著增加,訪存性能對程序整體性能的影響加大,與前面的STREAM測試結果類似。數(shù)據(jù)量為260 GB時,持久內存性能為DRAM的67%。另外,持久內存可以支撐1 TB以上數(shù)據(jù)量的算例運行,而該算例的DRAM方案則因內存不足而無法測試。
Figure 12 Comparison of running time of BPS PMEM and DRAM under different data sizes圖12 不同數(shù)據(jù)量下 BPS PMEM與DRAM的運行時間對比
本文面向常見CFD算法對Intel傲騰持久內存進行了性能測試,評估持久內存2種使用模式中最易于使用的內存模式對CFD應用的性能影響,并對比了兩代傲騰持久內存的性能差異。通過STREAM基準程序,測試了持久內存在不同數(shù)據(jù)規(guī)模下的帶寬,并發(fā)現(xiàn)配置持久內存后訪存帶寬隨數(shù)據(jù)規(guī)模的增大而降低,而純DRAM的測試帶寬則幾乎不受影響。
在此基礎上,本文還測試了3種常見的CFD算法。對于CloverLeaf和TeaLeaf 2個迷你應用,本文基于小規(guī)模數(shù)據(jù)量的算例進行了不同計算配置的性能對比,結果顯示,在該數(shù)據(jù)量下,對于這2種迷你應用所代表的CFD計算模式,持久內存的引入會帶來性能少量下降,性能損失在20%以內,而數(shù)據(jù)量越小,帶來的性能損失也越小。對于計算/訪存比相對較大的DSMC算法,在數(shù)據(jù)量達到100 GB時持久內存的引入也不會帶來顯著性能損失,但是當數(shù)據(jù)量進一步增大,對訪存性能要求增加時,持久內存的性能會顯著低于純DRAM的性能,在260 GB的數(shù)據(jù)量時二者性能差距在30%以上。另一方面,當數(shù)據(jù)量再增加時,DRAM由于容量不足而無法支撐計算,持久內存則可以支撐TB級數(shù)據(jù)量的數(shù)值模擬。
因此,對于CFD應用,基于內存模式的持久內存方案,最大的優(yōu)勢是在不增加移植成本的情況下,提供大容量的訪存方案。但是,該模式難以適用于所有算法和數(shù)據(jù)規(guī)模。在算法選擇上,持久內存適合于計算/訪存比較高的計算模式,而對于訪存帶寬受限的求解模式,隨著數(shù)據(jù)量的增加,持久內存方案性能會有較大損失,其大內存容量的意義則大打折扣。
對比第1代Intel傲騰持久內存,基于第2代持久內存的配置方案由于訪存性能有了顯著增加,不管對于STREAM基準測試還是實際的CFD應用,性能大部分都有約20%~50%的顯著提高。
本文對內存模式下的CFD常見算法進行了性能測評,在后續(xù)的工作中,將主要進行以下3方面的工作:(1)對App Direct模式下的性能進行評測;(2)在本文的實驗結果中,內存模式下即使數(shù)據(jù)量遠遠小于作為緩存的DRAM容量,訪存帶寬也會顯著低于純DRAM配置,將通過一些性能分析工具,深入分析其中機理;(3)結合DSMC算法和持久內存模式性能特征,對DSMC真實算例進行性能優(yōu)化。