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