王一超,胡 航,William Tang,王 蓓,林新華
(1.上海交通大學高性能計算中心,上海 200240; 2.普林斯頓大學等離子體物理實驗室,新澤西州普林斯頓 08540)
超級計算機被廣泛應用于天氣預報、基因分析、天體模擬、核物理等高科技領域,對這些研究有著不可或缺的關鍵性作用。鑒于當前的國際形勢,我國大力推動國產超級計算機的研制,“十三五”計劃中的3臺E級超級計算機原型系統——曙光、神威、天河原型機現已全部交付。其中曙光E級原型機是由中科曙光研制,采用CPU+加速器的異構架構。CPU采用的是AMD授權的海光x86處理器,加速器采用的是海光深度計算器DCU(Deep Computing Unit)加速卡[1]。
本文的工作主要分2部分:(1)采用基準測試集(Benchmark Suite)對曙光E級原型機(以下簡稱原型機)進行了性能評測,測試了其浮點計算能力、訪存帶寬、訪存延遲等關鍵性能指標,并將其CPU部分與主流的Intel Xeon Gold 6148進行對比;(2)將由普林斯頓大學開發的著名高性能計算應用GTC-P(Gyrokinetic Toroidal Code at Princeton )[2]移植到原型機上,進行了同構和異構的并行測試,并與Intel Xeon Gold 6148和NVIDIA V100進行對比。
本文有以下3個主要貢獻:
(1)對原型機上的Hygon 7185處理器進行了基準測試,結合已公開的資料,完善并明確了該處理器的基礎性能指標。通過與Intel主流平臺的對比,為在原型機CPU上進行應用移植提供了性能分析依據。
(2)基于GTC-P應用在原型機CPU上移植后的性能表現,并對比Intel主流平臺,分析了該高性能計算應用在Hygon平臺上的性能瓶頸,從而評估了原型機CPU的實際性能。
(3)通過使用ROCm HIP模型將CUDA版本的GTC-P移植到原型機的加速器DCU上,并與最新GPU平臺NVIDIA V100進行了性能對比,評估DCU的應用可移植性和實際性能。

Figure 1 Diagram of Sugon exascale prototype’s node architecture圖1 曙光E級原型機結點架構示意圖
本文將從GTC-P應用、曙光E級原型機架構、CPU和加速卡的硬件軟件信息幾個方面進行研究背景介紹。
GTC-P是由普林斯頓大學等離子體物理實驗室開發的質點網格法PIC(Particle-In-Cell)程序。該程序具有極佳的可擴展性,在許多超級計算機上進行了性能測試,并已入選美國NERSC國家超級計算中心的基準測試集,具有代表意義[3]。
其原理為通過求解5D的Vlasov-Poisson方程來模擬粒子和等離子在托克馬克裝置中的運動狀態。在每個時間步中主要執行6個kernel 函數:(1)Charge:通過4點陀螺平均法求解粒子到網絡的電荷沉積;(2)Poisson:求解陀螺動力學泊松方程;(3)Field:計算網格電場;(4)Smooth:平滑網格電勢和電荷;(5)Push:計算電場對粒子的作用力,更新粒子的相空間位置;(6)Shift:將被移動的粒子復制到緩沖區,并移動到相應進程[4],PIC算法中粒子與網格數的比例大約在100~100 000之間[5]。
2.2.1 總體架構
曙光E級原型機共有512個結點,1 024顆Hygon處理器和512塊DCU加速卡。各結點之間使用200 Gbps的高速網絡,采用6D-Torus的方式實現高維互連。
每個結點有2顆Hygon 7185處理器和1塊DCU加速卡,256 GB的DDR4內存,240 GB的M.2 SSD 硬盤。具體架構如圖1所示。
2.2.2 海光CPU
原型機CPU使用的是AMD授權的Hygon 7185(后用Hygon Dhyana表示)。該系列芯片是海光公司根據AMD授權的EPYC 7001系列“Naples”芯片開發的針對中國市場的新系列芯片,由海光和AMD的合資公司HMC生產。由于“Naples”芯片是于2017年發布的,本文選取了與其同一時段發布的目前主流的商用處理器x86架構的Intel Xeon Gold 6148(后用Intel Skylake表示)進行對比測試,其硬件及軟件信息如表1所示。
2.2.3 海光DCU
原型機的加速卡為海光公司結合AMD授權的GPU技術制造的DCU。為了解其與目前最新GPU的性能差異,本文用NVIDIA 公司的Tesla V100來與其對比,其軟硬件信息如表2所示。

Table 2 Comparison of accelerator test platforms表2 加速器測試平臺對比
曙光原型機的DCU加速卡上使用的編程模型為AMD公司開發的ROCm(Radeon Open Computing platform)HIP(Heterogeous-compute Interface for Portability)模型。這種模型是用于所有AMD GPU的可替代CUDA的模型,可以實現在源碼級別上對CUDA程序的支持,其技術棧較多地參考了CUDA技術棧[6]。
HIP支持C++語言特性,包括模板、C++11 lambdas、類、命名空間等。HIP讓開發者可以將CUDA程序轉換成可移植的C++程序,轉換后的程序在NVIDIA和AMD GPU上都可以編譯運行,只需要在編譯時指定平臺參數即可。HIP相關的運行組件都是已編譯好可以直接鏈接使用的動態庫。
本節首先用基準測試集對原型機及對比平臺進行了微架構測試:使用HPL[7]測試雙精度浮點計算能力,使用STREAM[8]和LMbench[9]測試訪存帶寬及延遲。這些性能數據可對GTC-P測試0進行指導和分析。
在評估超級計算機的性能時,通常會優選雙精度浮點計算能力作為判斷,因此本文選擇HPL基準測試來顯示其性能,測試結果如表3所示。

Table 3 Results of HPL 表3 HPL基準測試結果 GFLOPS
由于Hygon Dhyana處理器支持AVX2指令集,我們初始認為該處理器的向量化位寬為256 bit,但其實測雙精度浮點計算性能僅為理論值的39.6%。我們隨后進行了AVX2指令的吞吐量測試以驗證結果的正確性。
結果顯示在使用相同的AVX2指令時,Hygon Dhyana的吞吐量僅為Intel Skylake的0.5倍,故我們推測其雙精度向量化位寬為128 bit,其Linpack效率為79.2%。
我們選擇的是MPI+OpenMP版的STREAM測試程序。(1)測試單路訪存帶寬時,設置MPI進程數為1,OpenMP線程數為單socket核心數,使用GOMP_CPU_AFFINITY參數將OpenMP線程綁定到對應的核心上;(2)測試雙路訪存帶寬時,設置MPI進程數為2,分別綁定到對應的socket上,在同一socket內使用OpenMP線程并行,同樣使用GOMP_CPU_AFFINITY參數綁定。得到的不同平臺的內存訪問帶寬如圖2a所示。
由于我們在公開資料中未查找到Hygon Dhyana的內存通道數,根據我們實測的訪存帶寬,Hygon Dhyana的Triad帶寬是Intel Skylake的1.49倍,而Intel Skylake的內存通道為6通道,故我們推測Hygon Dhyana的內存通道為8通道。

Figure 2 Memory bandwidth and access latency of Hygon Dhyana and Intel Skylake圖2 Hygon Dhyana、Intel Skylake訪存帶寬與延遲
對于CPU訪存性能來說,除了訪存帶寬之外,訪存延遲也是一項重要指標。我們使用LM-bench基準測試對比了不同平臺各層次的訪存延遲,結果如圖2b所示。

Table 1 Comparison of CPU test platforms (open data)表1 CPU測試平臺對比(公開數據)
從圖2中可以看到,Hygon Dhyana的訪存延遲在48 KB、512 KB、8 MB時突然增大,隨后穩定。我們基于Linux系統工具,結合訪存延遲實驗觀察到的現象得到了Hygon Dhyana的各級緩存大小,具體的各級內存子系統大小及訪問延遲結果如表4所示。
綜上所述,由于Hygon Dhyana比Skylake具有更高的帶寬和更低的延遲,Hygon Dhyana對于訪存密集型應用在理論性能上更具優勢。接下來,我們將利用實際應用性能測評對其進行實驗驗證。
Hygon Dhyana處理器兼容x86_64指令集和AVX2指令集,其軟件生態良好,支持開源編譯器GCC、Intel編譯器ICC和AMD基于Clang開發的HCC編譯器。對于MPI庫,曙光支持Intel IMPI、Mvapich2、OpenMPI,方便了GTC-P的移植。
在GTC-P的同構并行移植過程中,我們發現使用Intel ICC編譯器和對應的IMPI得到的性能最好,因此在進行CPU性能對比測試時,Hygon平臺和Intel平臺都選用的是Intel ICC編譯器和Intel MPI并行庫。
GTC-P程序有A、B、C、D 4個不同算例,本次實驗中主要用到的是算例C和算例D,其具體描述如表5所示。

Table 5 Parameters of different examples of GTC-P表5 GTC-P不同算例的參數設置
我們首先在不同平臺上運行了單MPI進程單OpenMP線程的GTC-P程序,采用的算例是算例C。記錄其運行時間,以確定在不同平臺上熱點kernel函數及性能表現,結果如圖3a所示。
測試結果顯示,單進程的GTC-P在Hygon Dhyana平臺上的運行時間是Skylake的1.6倍,其中主要耗時是在Charge函數和Push函數,這2個函數的運行時間占整個應用總運行時間的85%以上。
由于Hygon Dhyana處理器的向量化位寬只有128 bit,是Intel Skylake的1/4,同一時間能進行的浮點計算只有Intel Skylake的1/4,故計算部分耗時會顯著增多。另一方面,Hygon Dhyana的L3 Cache只有Intel Skylake的29%,故GTC-P中的不規則訪存密集部分在Hygon Dhyana上會有更多的主存訪存操作導致用時增多。
我們發現Charge和Push函數的計算強度均小于2,結合Hygon Dhyana的峰值浮點性能和訪存帶寬可知,這2個函數的性能主要受限于訪存性能,因此后續的原型機上GTC-P的優化可以從改善訪存方面實現。

Figure 3 Runtime comparison of GTC-P on two platforms圖3 GTC-P在2種平臺上的運行時間對比
針對GTC-P程序在不同平臺上的并行性能做了進一步測試,測試了用MPI和OpenMP混合的GTC-P在曙光單結點和Intel Skylake上的運行情況,用numactl參數將MPI進程綁定到NUMA結點上,并按照單MPI進程的運行時間進行了歸一化,結果如圖4a所示。可以看到,在曙光平臺上,當使用8個MPI進程,每個MPI進程創建8個OpenMP線程時運行時間最短,這是因為Hygon處理器有2個socket,每個socket有4個NUMA結點,在這種模式下,每個MPI進程正好綁定到1個NUMA結點上,各OpenMP線程之間的通信都是在同一個NUMA中,基本不會有訪存性能的下降,所以總體性能最優。

Table 4 Test results of memory subsystem size and access latency 表4 內存子系統大小及訪問延遲測試結果
隨后我們進行了在不同平臺上使用雙路并行運行GTC-P的測試。Hygon Dhyana上使用8個MPI進程8個OpenMP線程,Intel Skylake上使用2個MPI進程20個OpenMP線程,將MPI進程綁定到NUMA結點上,在同一NUMA結點內使用OpenMP線程進行并行。測試結果如圖3b所示,在使用2個socket加速時,Hygon Dhyana處理器上GTC-P的用時是Intel Skylake的85%,性能是Intel Skylake的1.18倍。
在使用雙路并行時,由于Hygon Dhyana處理器雙路訪存帶寬是Intel Skylake的1.49倍,故Charge和Push 2個有較多不規則訪存操作的函數用時均少于Intel Skylake的,總體性能Hygon Dhyana略微優于Intel Skylake。

Figure 4 Acceleration performance and strong scalability of GTC-P on Sugon platform圖4 GTC-P在曙光平臺多核加速性能及多結點強可擴展性
為了更好地顯示原型機的性能,還進行了多結點的MPI并行測試。在單個結點內使用前文中的MPI+OpenMP配置進行并行,在多結點之間使用MPI進行并行。在本次測試中,由于算例C在較多結點并行運行時的時間較短,選用了更大的算例D。由于原型機上單個賬號最多能使用30個結點,本文的擴展性測試只做到了30個結點,測試結果如圖4b所示。
從圖4b中可以發現,在并行運行的結點數不超過10時,GTC-P的加速比基本與理論加速比吻合,大致呈線性增加趨勢,說明GTC-P在原型機上多結點運行時有很好的強可擴展性;在超過10個結點后,總的運行時間緩慢減少,說明此時結點之間的通信時間隨著結點的增多而逐漸占據主導,能通過并行運行減少的計算時間較少,再增加并行的結點數對整體性能影響不大,最后加速比大約是理論加速比的62%。這說明原型機的200 Gbps 6D-Torus網絡對GTC-P這種有較多不規則訪存的應用在較小規模的并行時有著較好的擴展性,但規模較大時會由于結點間通信時間過長導致性能提升不明顯。
Hygon DCU加速卡采用的編程模型是AMD公司開發的HIP模型,與NVIDIA公司的CUDA編程模型相對應[10]。其支持的并行庫中與CUDA相關的庫在Hygon DCU中支持的均為其轉換為HIP之后的庫。Hipify作為一款轉譯工具可以將CUDA API轉換成HIP API,并自動添加頭文件等。由于該工具只進行了字符串的替換,轉換后仍需要手動修改少量代碼。
除了基本的移植之外,在原CUDA版本的GTC-P程序中應用了紋理內存來提高程序中的大量局部空間操作的性能,但HIP編程模型目前還不支持紋理內存,在移植時關閉了程序的紋理內存功能,使用普通的共享內存進行存儲。
本文使用算例C測試GPU版GTC-P在原型機上的性能,并將其DCU部分的運行時間和PCIe通信時間與NVIDIA V100平臺的運行時間作對比,分析其加速器的性能指標。對于CPU部分,仍選擇前文中的最優配置,并將MPI進程綁定到對應的NUMA結點上。GTC-P的各內核函數在加速器上的運行時間及通信時間如圖5所示。

Figure 5 Runtime and communication time of GTC-P on Hygon DCU and NVIDIA V100圖5 GTC-P在Hygon DCU、 NVIDIA V100上的運行時間和通信時間
當NVIDIA V100使用紋理內存時,GTC-P的整體性能在DCU上為在NVIDIA V100上的61%。其中,Charge函數的性能在DCU上為在NVIDIA V100上的38.3%,Push函數的性能在2個平臺上持平。根據前文中的硬件信息可知,DCU的雙精度浮點計算性能約為NVIDIA V100的73.1%,而Charge函數中為了避免數據沖突,使用了較多的重復計算操作,導致DCU的雙精度浮點計算的劣勢放大。Push函數中有大量的不規則訪存,對加速器的讀取帶寬要求較高,說明DCU的內部訪存性能與NVIDIA V100大致相當。
不使用紋理內存時,GTC-P在NVIDIA V100上的耗時明顯增加,達到了原來的1.29倍,僅為DCU上耗時的78.6%。其中Charge函數耗時是原來的1.28倍,Push函數耗時是原來的1.36倍,說明GTC-P程序中有大量的局部空間操作,使用紋理內存可以提高性能。后續實現HIP模型對紋理內存的支持可以進一步提高GTC-P在DCU上的性能表現。
對于加速器的PCIe通信時間,Hygon DCU與NVIDIA V100大致相同,符合前文中測得的CPU與加速器之間的訪存帶寬。
在CPU的基準性能測試方面。Saini等[11]在基于Intel Haswell和Intel Ivy Bridge處理器的超級計算機上進行了性能測試,使用了STREAM、LMbench、HPCC、HPL、HPCG等一系列基準測試集和4個科學和工業應用程序對比兩者的性能。McCormick教授等[12]團隊針對x86多核NUMA架構的處理器提出了一系列測量訪存性能的方法,并在Intel和AMD處理器上建立了相關的訪存性能模型。本文在曙光E級原型機的CPU性能測試上借鑒了其方法。
在GTC-P應用的移植和優化方面。普林斯頓大學Wang等[13]在Mira、Sequoia、Hopper等超級計算機上進行了GTC-P的移植和優化,并評估了其可擴展性。上海交通大學王一超等[4]利用OpenACC在神威“太湖之光”超級計算機上成功移植了GTC-P應用并進行了優化。
本文首先面向曙光E級原型機進行了性能測試,以指導GTC-P的移植,并與目前主流的CPU—Intel Xeon Gold 6148(Skylake)進行了對比。本文測試了其浮點計算能力、內存訪問帶寬和延遲,發現Hygon 7185處理器的單socket實測浮點計算能力為209.5 GFLOPS,僅為Skylake的22.5%。在訪存帶寬及延遲方面,Hygon處理器的單socket訪存帶寬為126 GB/s,是Skylake的1.45倍;Hygon的L1、L2緩存訪存延遲略高于Skylake的,但L3緩存和主存的訪存延遲低于Skylake的。
我們在曙光E級原型機上分別移植了同構并行和異構并行的GTC-P。在CPU上,單核的GTC-P程序的性能是Intel Skylake的62.5%,主要原因是Hygon Dhyana的向量化位寬是Skylake的一半,以及Dhyana的L3高速緩存大小僅為Skylake的29%,導致GTC-P中許多不規則訪存操作耗時較多。在多結點擴展性上,使用算例D運行的GTC-P在超過10個結點后基本已經充分加速,再增加結點數加速效果并不明顯,最后的加速比約為理論加速比的62%。在DCU上,通過HIP編程模型快速移植了GTC-P應用,其整體性能達到了NVIDIA V100上整體性能的61%。