曹君
【摘要】 隨著半導體技術的發展,在高性能計算領域中異構眾核系統的設計已經成為技術發展的趨勢和學術研究的熱點。隨之而來的基于異構系統上的編程,主要面臨以下幾個方面的挑戰:第一方面就是針對異構平臺同時在CPU+GPU上編程復雜;第二就是針對異構平臺的移植性。原有的編程模型(CILK、OpenMP、CUDA)都是針對特定平臺的,可移植性比較差。那么針對異構平臺的編程模型隨之產生。本文針對PGI等公司提出的異構平臺的編程模型openACC進行分析與研究。
【關鍵詞】 異構眾核系統 異構編程模型 GPU openACC[1]
隨著硬件技術的發展,在高性能計算領域中從單核到多核的發展,但由于功耗、互連、設計復雜度三方面因素的限制,性能并不能通過增加計算核心數帶來提升,眾核設計就成為技術發展的趨勢和學術研究的熱點。目前面向高性能的眾核處理器分為同構加速器的方式和異構加速器的方式。同構加速器如:Intel MIC/Xeon Phi眾核協處理器;nVIDIA公司自家GPU架構General Purpose computing on graphics Processing Units GPGPU平臺。異構加速器,2016年6月份第47屆全球頂級超級計算機TOP500榜單中位于榜首的Sunway TaihuLight - Sunway MPP, Sunway SW26010 260C 便是異構眾核處理器結構。第二名的天河2 號結合Intel Ivy Bridge 多核處理器和Intel Xeon Phi 眾核協處理器的混合架構。
為了解決異構編程帶來的復雜性和移植性的問題,異構平臺上的編程模型已經被廣泛的使用和優化。如:PGI公司等提出的openACC;Khronos Group宣布成立GPU通用計算開放行業標準工作組,以蘋果的提案為基礎創立OpenCL行業規范;微軟Visual Studio和C++編程語言的新擴展C++ AMP等都是異構平臺的并行編程模型[2]。本文首先針對異構平臺面臨得挑戰做簡要描述,分別分析和研究OpenACC異構并行編程模型,總結未來異構編程模型的發展。
一、異構平臺面臨的挑戰
CPU-GPU異構眾核系統與同構系統相比在編程方面面臨著一些問題。第一,GPU之間的通信、CPU與GPU之間的通信、GPU存儲空間的管理都是用戶負責的;第二,可移植性差,由于第一種描述的,CPU-GPU之間的通信都是用戶負責的,而異構平臺具有不同的硬件架構、編程模型、cache大小等,代碼移植比較復雜,及時移植后,很難達到高性能,需要深入了解新的異構平臺特點,針對性的重新進行性能優化。第三,GPU的代碼的調試比較困難,多個線程間是異步執行的,產生的錯誤或者異常是很難復現的,導致錯誤或者異常很難被定位,只有通過邏輯判斷,或者打印輸出等輔助調試。
二、OpenACC編程模型
PGI公司等提出的OpenACC克服了上一章節中提到的異構平臺面臨的挑戰,編程簡單,在串行代碼上增加幾句編程制導就實現了并行化,再經過異構平臺特點和串行程序的特點進行性能調優,就可以實現程序的并行化。更新硬件時,需要手工改動的代碼僅僅是編譯和運行的MAKEFILE文件,代碼的手工改動量是很小的。
2.1 OpenACC的執行模型
OpenACC的執行模型是host指導加速設備的運行,形成協作的一種執行模型。在大型程序執行過程中,串行部分是host執行,當出現熱點函數的計算時,在host控制下熱點函數交給加速設備執行。熱點函數在加速設備上的執行過程:在加速設備上分配私有數據空間并加載熱點函數代碼;將所需的數據從MMEM加載到加速器的私有數據空間中,加速設備進行執行,并將結果從加速設備的數據空間傳輸到MMEM中;釋放掉加速設備上申請的數據空間。
2.2 OpenACC的存儲模型
在同構系統上,CPU的片內存儲模式是軟件cache結構;片外存儲模式則是同享的模式。因此數據只能分配在片外存儲中,且數據是同享的,并不需要顯示的進行CPU和加速設備之間的通信。而在異構系統中,數據可分配在CPU或者加速設備的局部存儲的多個位置,數據的分配和管理起來比較復雜,加速設備間的通信是通過直接內存訪問(Direct Memory Access)的方式由程序員進行顯示的調用才能實現。
2.3 OpenACC指令語法
OpenACC指令語法包括:加速計算構件、循環映射構件、組合編譯、加速數據區構件、同步和執行導語、加速編譯指示的子句等。下面以c代碼為例簡單介紹OpenACC指令語法。
Fortran語言編譯指示格式如下:(!$acc間不能有其它字符,其它類似)
!$acc directive-name [clause[ [,] clause]...] new-line
c$acc directive-name [clause[ [,] clause]...] new-line
*$acc directive-name [clause[ [,] clause]...] new-line
三、未來異構編程模型的發展
異構編程模型是否能提供更加高效的性能優化,程序在異構平臺上并行性的研究的最終目的是想達到高效的性能加速。而現有的異構編程模型提供的構件仍然需要程序員了解異構的架構,硬件特征,才能達到想要達到的性能優化,那么,根據不同的硬件細節設置不同的編程導語,便成為未來研究的一個方向。
參 考 文 獻
[1]OpenAcc: Directives for Accelerators. 2013. http://www.openacc-standard.org/
[2]王文義,王晗. 基于多核與眾核結構的并行編程模型研究[J].中原工學院報,2014,03:52-56.