李薛劍, 羅 京, 魯 昶, 許興中
(安徽大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 合肥 230601)
3D_EW在MIC并行編程中的移植與實現(xiàn)研究
李薛劍, 羅 京, 魯 昶, 許興中
(安徽大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 合肥 230601)
3D_EW是一款用于石油勘探領(lǐng)域的應(yīng)用程序,其運行需要極高的計算能力支持,在CPU上進(jìn)行大規(guī)模計算時效率極低,而MIC卡為英特爾公司推出的基于集成中和架構(gòu)的至強(qiáng)融核產(chǎn)品,可以提供數(shù)百個同時運行的硬件線程,帶來極高的并行性。將3D_EW程序并行化并移植于MIC卡,實驗表明:3D_EW進(jìn)行大規(guī)模運算時在MIC并行運行速度遠(yuǎn)大于僅利用CPU時的串行運行速度。
三維彈性波建模(3D_EW); MIC; 移植; 并行; 優(yōu)化策略
隨著現(xiàn)代技術(shù)的高速發(fā)展,串行程序往往不能滿足人們的對各方面的要求,如運行時間、運行空間,人們急需一種可以提高程序效率的方法,并行程序應(yīng)運而生。而且隨著大數(shù)據(jù)的高速發(fā)展,現(xiàn)在在社會的各個方面,人們對計算的要求也越來越高,要求程序計算能提高效率或精度,MIC卡則應(yīng)運而生,MIC卡可以很好地運行并行[1]的大規(guī)模計算,其還可以與CPU合作,CPU運行簡單的串行部分和不能并行的程序部分,而MIC則運行復(fù)雜的并行計算[2],目前針對MIC平臺的研究已經(jīng)取得了一定的進(jìn)展[3-6]。
本文中的3D_EW程序就是用以CPU為主MIC為協(xié)處理器的offload模式[7]。實驗表明,3D_EW在此方式下處理大規(guī)模運算數(shù)據(jù)時效率遠(yuǎn)高于CPU。
1.1 介紹
3D_EW(3D Elastic Wave Modeling)[8]是用于石油勘探領(lǐng)域的應(yīng)用程序。它是一種用波場延拓的方法來模擬彈性波在各向同性的彈性介質(zhì)中傳播的方法。在該程序中,縱波(P波)和橫波(S波)被分別模擬,這樣可以更好地得知縱波和橫波在彈性介質(zhì)中的傳遞。該方法可以通過高階有限差分方法來模擬彈性波的傳遞。其求解的方程為彈性波波動方程:
(1)
1.2 原程序結(jié)構(gòu)
原程序結(jié)構(gòu)如圖1所示。
2.1 MIC介紹
至強(qiáng)融核TM(Xeon Phi)協(xié)處理器,是首款英特爾集成眾核(Many Integrated Core,MIC)[9]架構(gòu)產(chǎn)品。用作高性能計算(HPC)[10]的超級計算機(jī)或服務(wù)器的加速卡。最多61個處理器核心,每個核心擁有4個超線程,最多244個線程,超線程無法關(guān)閉。與之競爭的是GPGPU(通用圖形處理器)在HPC領(lǐng)域應(yīng)用的普及。英特爾至強(qiáng)融核協(xié)處理器提供了類似于英特爾至強(qiáng)處理器編程環(huán)境的通用編程環(huán)境。多個英特爾至強(qiáng)融核協(xié)處理器可安裝在單個主機(jī)系統(tǒng)中,這些協(xié)處理器可通過 PCIe 對等互連相互通信,不受主機(jī)的任何干擾。
2.2 MIC程序移植流程
具體改寫與移植流程[11]:
(1) 將串行程序改為OpenMP程序[12];
(2) 將OpenMP版本程序做一定優(yōu)化;
(3) 將OpenMP版本程序移植到單MIC卡上;
(4) 根據(jù)MIC版程序運行情況,做針對性優(yōu)化;
(5) 單節(jié)點內(nèi)CPU+MIC協(xié)同計算。
2.3 MIC移植優(yōu)化策略
2.3.1 移植前OpenMP并行優(yōu)化
程序進(jìn)行移植前,需要使用OpenMP對原串行程序進(jìn)行改寫。OpenMP是一種API,用于編寫可移植的多線程應(yīng)用程序,能夠為編寫多線程應(yīng)用程序提供一種簡單的方法,而無需程序員進(jìn)行復(fù)雜的線程創(chuàng)建、同步、負(fù)載均衡和銷毀工作。OpenMP是基于共享內(nèi)存和線程的支持單指令流多數(shù)據(jù)流的并行編程模型。OpenMP基于fork/join模型,即在并行任務(wù)開始時穿件并發(fā)線程,執(zhí)行并行任務(wù),并在任務(wù)結(jié)束時收束線程,等待線程全部結(jié)束才認(rèn)為任務(wù)結(jié)束。OpenMP是顯式并行的,需要程序員顯示控制需要并行的代碼。本次移植優(yōu)化使用了內(nèi)部各線程負(fù)載均衡優(yōu)化、向量化優(yōu)化、并行力度優(yōu)化的策略。
3D_EW程序根據(jù)不同的輸入數(shù)據(jù)量,計算規(guī)模也不同,在小規(guī)模時各線程間存在任務(wù)分配不均而導(dǎo)致的性能使用效率低下,使用各線程負(fù)載均衡優(yōu)化可以解決此問題。
Intel編譯器支持向量化,即使用批處理單元進(jìn)行批量計算的方法,可以把循環(huán)計算部分用MMX、SSE等擴(kuò)展指令進(jìn)行向量化,從而提高計算速度。MIC向量化優(yōu)化方式主要有兩種,自動向量化和SIMD指令優(yōu)化,由于SIMD同時支持CPU與MIC,故十分適合用于本程序優(yōu)化。
3D_EW程序根據(jù)不同的輸入數(shù)據(jù)量,計算規(guī)模也不同,在小規(guī)模時單個線程所分配到的任務(wù)量可能會很小,一層循環(huán)可能無法達(dá)到MIC的并行度要求,而經(jīng)過并行力度優(yōu)化后可以滿足。
2.3.2 移植后深度優(yōu)化
程序移植于MIC后,由于種種原因,運行效率可能并不盡如人意,此時仍需要對MIC版本程序進(jìn)行針對性優(yōu)化,使用的優(yōu)化策略為C Intrinsic優(yōu)化、數(shù)據(jù)對齊優(yōu)化與數(shù)據(jù)傳輸優(yōu)化。
C Intrinsic、數(shù)據(jù)對齊操作可為3D_EW的數(shù)據(jù)進(jìn)行優(yōu)化處理,提高程序在MIC上的運行效率,而數(shù)據(jù)傳輸優(yōu)化則提高了CPU與MIC之間的數(shù)據(jù)交換,從而提高了總體效率。
3.1 硬件環(huán)境
硬件主要有:① 服務(wù)器,型號為Inspur NF5280M4, CPU:Intel XeonE5-2680v3 × 2,2.5 GB,12核心;內(nèi)存:16 GB × 8,DDR4,2 133 MB; 硬盤: 1T SATA × 1。 ② 加速卡(MIC),型號為XEON PHI-31S1P, Intel XEON PHI-31S1P (57核心,1.1 GB,1003GFlops,8GB GDDR5)。
3.2 熱點分析與判斷
3D_EW程序結(jié)構(gòu)相對簡單,并沒有復(fù)雜的函數(shù)調(diào)用,主要的計算都是在循環(huán)內(nèi),而l之間數(shù)據(jù)依賴,l循環(huán)內(nèi)部則是如下所示的kji3層循環(huán),在最內(nèi)層的i循環(huán)中,僅有簡單的加法和乘法運算,使用Intel分析工具VTune[9]可以很簡單的分析出程序內(nèi)花費較多的部分,看出整個程序花費時間最多的為350行左右,查看原代碼后可以發(fā)現(xiàn)正好屬于kji循環(huán),所以程序的熱點就是kji循環(huán)內(nèi)的計算。
3.3 移植可行性分析
Ishot循環(huán)為計算不同震源的數(shù)據(jù),在Ishot循環(huán)內(nèi),對于不同的Ishot,計算任務(wù)完全獨立。Ishot循環(huán)之后進(jìn)入l循環(huán),這里是時間推進(jìn)方法,不同的l表示不同的時步,前一次迭代的結(jié)果將會用于后一步的計算,因而不同l之間存在極強(qiáng)的數(shù)據(jù)依賴。在l以內(nèi),則是不同格的計算,對于顯示格式的有限差分來說,不同網(wǎng)格的計算是完全獨立的,因而這里也具備很強(qiáng)的并行性。l循環(huán)部分十分適合利用MIC進(jìn)行加速。
3.4 MIC平臺判斷(程序移植模式分析)
在MIC應(yīng)用程序模式[11,13]中,存在以CPU為主、以MIC為主和CPU與MIC對等模式3種可能性,而前兩種模式也會有僅用CPU(CPU原生模式)或MIC(MIC原生模式)的分支。
在3D_EW程序中,大部分代碼為串行執(zhí)行,串行執(zhí)行部分在CPU與MIC上執(zhí)行效率相差無幾,而小部分的可并行代碼部分計算量又十分巨大,此時在CPU與MIC計算效率則會有顯著不同,因此3D_EW程序適合于以CPU為主MIC為協(xié)處理器的offload模式。
3.5 使用OpenMP對串行程序進(jìn)行改寫[14-15]
如圖2所示,使用制導(dǎo)語句#pragma omp parallel指出并行區(qū)域即kji循環(huán),由于kji循環(huán)中存在一些變量px、sx、vvp2、vvs2、drd1、drd2等與并行區(qū)域外并沒有存儲關(guān)聯(lián),所以可以用private進(jìn)行標(biāo)識,若如此做則每個線程都會有自己的一份拷貝。
原程序目的是為了在超級計算機(jī)上實現(xiàn),故輸入數(shù)據(jù)量較大,在測試環(huán)境中(普通計算機(jī)未安裝MIC卡,雙核四線程,2.6 GHz)實現(xiàn)是相當(dāng)不現(xiàn)實的,為了檢驗修改后程序運行效率是否提高,對輸入量(即循環(huán)次數(shù))進(jìn)行了一定比例的縮小。
在此數(shù)據(jù)下,未修改串行程序運行完畢需要188 s,使用OpenMP修改后運行完畢需190 s。從結(jié)果可以得出,經(jīng)OpenMP改寫后,程序的運行效率不僅沒有提高,反而還降低了(此現(xiàn)象是正常的)。在使用修改后的輸入數(shù)據(jù)后,循環(huán)規(guī)模相比于原規(guī)模已大大減小,使用并行化帶來的效果無法抵消并行化的額外負(fù)擔(dān),而當(dāng)數(shù)據(jù)量較大時(使用原輸入),每個線程負(fù)擔(dān)的工作將會足夠多,并行化的效率便會提高。
3.6 優(yōu)化OpenmMP版本程序
3.6.1 內(nèi)部各線程負(fù)載均衡優(yōu)化
并行區(qū)域內(nèi)線程[16]分配方式可選有dynamic、static、guided和runtime,經(jīng)過對每一種方式測試,最終得到較好方案為dynamic,如圖3所示,將循環(huán)任務(wù)進(jìn)行動態(tài)分配,采取先到先得方式,為每個線程分配任務(wù)。
3.6.2 向量化優(yōu)化
在3D_EW程序中,處理的大部分?jǐn)?shù)據(jù)是3維數(shù)組,而C程序是基于存儲的,源程序kji循環(huán)內(nèi)數(shù)組的索引也是基于最內(nèi)層i循環(huán),因而對i循環(huán)進(jìn)行了向量化處理,如圖4所示。這樣可以使得同一條SIMD指令處理的數(shù)據(jù)跨度更小,增加數(shù)據(jù)讀寫的空間局部性,更加高效的利用讀寫帶寬。
3.6.3 并行力度優(yōu)化
在當(dāng)前程序中,當(dāng)程序規(guī)模較小時(輸入的循環(huán)變量較小)一層循環(huán)可能無法達(dá)到MIC的并行度要求,針對這種情況,可以采取多層循環(huán)合并或者嵌套并行的方法。當(dāng)前程序由于循環(huán)內(nèi)變量初值不為0,合并循環(huán)進(jìn)行的計算可能較為繁瑣,因此,使用的方法為嵌套并行。
3.7 將程序移植于MIC卡[11]
當(dāng)前使用的應(yīng)用模式以CPU為主,MIC為輔的offload模式,offload模式以CPU端為控制端完成控制任務(wù)和數(shù)據(jù)傳輸任務(wù)(可能會有小部分計算任務(wù)),MIC端作為計算端,完成CPU交于的并行計算任務(wù)?;玖鞒淌窃诋?dāng)前的串行程序中,每當(dāng)執(zhí)行到需要并行的部分(OpenMP語句已標(biāo)出),則將這段代碼與相關(guān)的數(shù)據(jù)發(fā)送到設(shè)備端并行執(zhí)行,待其返回后,主線程再繼續(xù)執(zhí)行。
在修改后的代碼基礎(chǔ)上,使用offload關(guān)鍵字將需要在MIC卡上運行的程序部分進(jìn)行標(biāo)出。在kji循環(huán)開始之前,添加offload引語。使用編譯指令icpc生成MIC程序。
3.8 MIC程序進(jìn)一步優(yōu)化
3.8.1 C Intrinsic優(yōu)化
使用底層編程指令集C Intrinsic來控制向量化的數(shù)據(jù)讀取操作,從而有效減少聚合/分散操作,使得MIC平臺上程序性能提升。
3.8.2 數(shù)據(jù)對齊優(yōu)化
如圖5所示,在MIC上開辟內(nèi)存時使用_mm_malloc語句可以保證數(shù)據(jù)對齊,將一個高速緩存行的數(shù)據(jù)一次性讀入向量寄存器。
3.8.3 數(shù)據(jù)傳輸優(yōu)化
當(dāng)程序運行至MIC程序塊部分/MIC程序部分運行完畢時,CPU與MIC卡之間需要進(jìn)行數(shù)據(jù)傳輸,例如開始時CPU需要向MIC傳送MIC代碼段需要的變量值,而在MIC部分程序計算完成后向CPU返回計算結(jié)果,如圖6所示。
采用以上方法后,使得CPU與MIC卡之間高效傳輸,并減少不必要的數(shù)據(jù)交換,提高了程序運行效率。
3.9 運算性能結(jié)果與分析
在高性能計算領(lǐng)域中常使用加速比[1,10]來衡量并行系統(tǒng)或程序并行化的性能和效果,加速比定義為:
(2)
從圖7中的運算結(jié)果可以看出,程序運算量較小時,使用CPU與MIC協(xié)同計算的效果并不是很好,較僅使用CPU甚至更差,主要是因為MIC與CPU之間數(shù)據(jù)傳輸所花費的時間比例較大,而主要的計算部分花費的時間卻并不多。當(dāng)程序運算量達(dá)到中等時,MIC的計算優(yōu)勢開始漸漸顯現(xiàn),與在MIC上計算所需的時間相比,數(shù)據(jù)傳輸?shù)臅r間占比已漸漸減小,當(dāng)達(dá)到大規(guī)模數(shù)據(jù)計算時,數(shù)據(jù)傳輸在整個時間花費上已可以忽略不計。
圖7 不同規(guī)模下的加速比
程序的并行化和大規(guī)模計算都是近幾年發(fā)展的熱點。本文將兩者利用MIC卡結(jié)合起來,在大規(guī)模計算的前提下,很好地提高了程序的效率,而通過實驗也證明了MIC卡并行計算的優(yōu)越性。
[1] 陳國良編著.并行算法的設(shè)計與分析[M].2版.北京:高等教育出版社,2002.
[2] (美)格蘭馬,等.并行計算導(dǎo)論[M].2版.張武等譯.北京:機(jī)械工業(yè)出版社,2005.
[3] 易 娟.基于MIC的主從式并行遺傳算法的研究和實現(xiàn)[D].濟(jì)南:山東大學(xué).2015.
[4] 陳 呈.面向MIC平臺的OpenACC實現(xiàn)與優(yōu)化關(guān)鍵技術(shù)研究[D].長沙:國防科學(xué)技術(shù)大學(xué).2013.
[5] 周長飛.基于MIC的圖像顯著性檢測技術(shù)研究[D].長沙:國防科學(xué)技術(shù)大學(xué).2013.
[6] 劉國波.MIC平臺上的并行散列函數(shù)庫的研究與應(yīng)用[D].廣州:華南理工大學(xué).2015.
[7] 沈 鉑,張廣勇,吳韶華,等.基于MIC平臺的offload并行方法研究[J].計算機(jī)科學(xué).2014,41(6):477-480.
[8] 亞洲超算競賽協(xié)會.超算競賽導(dǎo)論.
[9] 英特爾Xeon Phi協(xié)處理器的軟件開發(fā)指南ver.1.04.
[10] 張軍華,臧勝濤,單聯(lián)瑜,等.高性能計算的發(fā)展現(xiàn)狀及趨勢[J].石油地球物理勘探.2010,45(6):918-925.
[11] 王恩東,張 清,沈 鉑,等.MIC高性能計算編程指南[M].北京:中國水利水電出版社.2012.
[12] 殷順昌.OpenMP并行程序性能分析[D].長沙:國防科學(xué)技術(shù)大學(xué).2006.
[13] (美)馬特森,等.并行編程模式[M].張云良等譯.北京:機(jī)械工業(yè)出版社, 2015.
[14] 羅秋明.OpenMP編譯原理及實現(xiàn)技術(shù)[M].北京:清華大學(xué)出版社,2012.
[15] 查普曼.使用OpenMP:便攜式共享存儲并行編程(科學(xué)與工程計算).
[16] (孟加拉)阿克特,(美)羅伯茨.多核程序設(shè)計技術(shù):通過軟件多線程提升性能[M].李寶峰,富弘毅,李稻譯.北京:電子工業(yè)出版社,2007.
Research on the Porting and Implementation of 3D_EW in MIC Parallel Programming
LIXuejian,LUOJing,LUChang,XUXingzhong
(School of Computer Science and Technology, Anhui University, Hefei 230601, China)
3D_EW is a real application in the field of petroleum exploration which requires high computing power support when it operates. The efficiency is very low when the calculation runs on one CPU. MIC card is a Xeon core melt product launched by Intel Corporation. It provides hundreds of hardware threads running simultaneously, bringing a high parallelism. In this paper, a method is proposed to parallel 3D_EW program and transplant it to the MIC card. The experiments show that the parallel running speed of MIC is much larger than that of serial operation speed when 3D_EW is used in large scale operation.
3D elastic wave modeling; MIC; transplant; parallel; optimization policy
2016-08-15
國家自然科學(xué)基金項目(61300169)
李薛劍(1981-),男,安徽合肥人,碩士,講師,研究方向為程序分析與驗證、高性能計算。
Tel.:13856005370; E-mail:wind1999@mail.ustc.edu.cn
TP 391
A
1006-7167(2017)04-0123-04