李薛劍, 羅 京, 魯 昶, 許興中
(安徽大學 計算機科學與技術學院, 合肥 230601)

3D_EW在MIC并行編程中的移植與實現研究
李薛劍, 羅 京, 魯 昶, 許興中
(安徽大學 計算機科學與技術學院, 合肥 230601)
3D_EW是一款用于石油勘探領域的應用程序,其運行需要極高的計算能力支持,在CPU上進行大規模計算時效率極低,而MIC卡為英特爾公司推出的基于集成中和架構的至強融核產品,可以提供數百個同時運行的硬件線程,帶來極高的并行性。將3D_EW程序并行化并移植于MIC卡,實驗表明:3D_EW進行大規模運算時在MIC并行運行速度遠大于僅利用CPU時的串行運行速度。
三維彈性波建模(3D_EW); MIC; 移植; 并行; 優化策略
隨著現代技術的高速發展,串行程序往往不能滿足人們的對各方面的要求,如運行時間、運行空間,人們急需一種可以提高程序效率的方法,并行程序應運而生。而且隨著大數據的高速發展,現在在社會的各個方面,人們對計算的要求也越來越高,要求程序計算能提高效率或精度,MIC卡則應運而生,MIC卡可以很好地運行并行[1]的大規模計算,其還可以與CPU合作,CPU運行簡單的串行部分和不能并行的程序部分,而MIC則運行復雜的并行計算[2],目前針對MIC平臺的研究已經取得了一定的進展[3-6]。
本文中的3D_EW程序就是用以CPU為主MIC為協處理器的offload模式[7]。實驗表明,3D_EW在此方式下處理大規模運算數據時效率遠高于CPU。
1.1 介紹
3D_EW(3D Elastic Wave Modeling)[8]是用于石油勘探領域的應用程序。它是一種用波場延拓的方法來模擬彈性波在各向同性的彈性介質中傳播的方法。在該程序中,縱波(P波)和橫波(S波)被分別模擬,這樣可以更好地得知縱波和橫波在彈性介質中的傳遞。該方法可以通過高階有限差分方法來模擬彈性波的傳遞。其求解的方程為彈性波波動方程:
(1)
1.2 原程序結構
原程序結構如圖1所示。

2.1 MIC介紹
至強融核TM(Xeon Phi)協處理器,是首款英特爾集成眾核(Many Integrated Core,MIC)[9]架構產品。用作高性能計算(HPC)[10]的超級計算機或服務器的加速卡。最多61個處理器核心,每個核心擁有4個超線程,最多244個線程,超線程無法關閉。與之競爭的是GPGPU(通用圖形處理器)在HPC領域應用的普及。英特爾至強融核協處理器提供了類似于英特爾至強處理器編程環境的通用編程環境。多個英特爾至強融核協處理器可安裝在單個主機系統中,這些協處理器可通過 PCIe 對等互連相互通信,不受主機的任何干擾。
2.2 MIC程序移植流程
具體改寫與移植流程[11]:
(1) 將串行程序改為OpenMP程序[12];
(2) 將OpenMP版本程序做一定優化;
(3) 將OpenMP版本程序移植到單MIC卡上;
(4) 根據MIC版程序運行情況,做針對性優化;
(5) 單節點內CPU+MIC協同計算。
2.3 MIC移植優化策略
2.3.1 移植前OpenMP并行優化
程序進行移植前,需要使用OpenMP對原串行程序進行改寫。OpenMP是一種API,用于編寫可移植的多線程應用程序,能夠為編寫多線程應用程序提供一種簡單的方法,而無需程序員進行復雜的線程創建、同步、負載均衡和銷毀工作。OpenMP是基于共享內存和線程的支持單指令流多數據流的并行編程模型。OpenMP基于fork/join模型,即在并行任務開始時穿件并發線程,執行并行任務,并在任務結束時收束線程,等待線程全部結束才認為任務結束。OpenMP是顯式并行的,需要程序員顯示控制需要并行的代碼。本次移植優化使用了內部各線程負載均衡優化、向量化優化、并行力度優化的策略。
3D_EW程序根據不同的輸入數據量,計算規模也不同,在小規模時各線程間存在任務分配不均而導致的性能使用效率低下,使用各線程負載均衡優化可以解決此問題。
Intel編譯器支持向量化,即使用批處理單元進行批量計算的方法,可以把循環計算部分用MMX、SSE等擴展指令進行向量化,從而提高計算速度。MIC向量化優化方式主要有兩種,自動向量化和SIMD指令優化,由于SIMD同時支持CPU與MIC,故十分適合用于本程序優化。
3D_EW程序根據不同的輸入數據量,計算規模也不同,在小規模時單個線程所分配到的任務量可能會很小,一層循環可能無法達到MIC的并行度要求,而經過并行力度優化后可以滿足。
2.3.2 移植后深度優化
程序移植于MIC后,由于種種原因,運行效率可能并不盡如人意,此時仍需要對MIC版本程序進行針對性優化,使用的優化策略為C Intrinsic優化、數據對齊優化與數據傳輸優化。
C Intrinsic、數據對齊操作可為3D_EW的數據進行優化處理,提高程序在MIC上的運行效率,而數據傳輸優化則提高了CPU與MIC之間的數據交換,從而提高了總體效率。
3.1 硬件環境
硬件主要有:① 服務器,型號為Inspur NF5280M4, CPU:Intel XeonE5-2680v3 × 2,2.5 GB,12核心;內存: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程序結構相對簡單,并沒有復雜的函數調用,主要的計算都是在循環內,而l之間數據依賴,l循環內部則是如下所示的kji3層循環,在最內層的i循環中,僅有簡單的加法和乘法運算,使用Intel分析工具VTune[9]可以很簡單的分析出程序內花費較多的部分,看出整個程序花費時間最多的為350行左右,查看原代碼后可以發現正好屬于kji循環,所以程序的熱點就是kji循環內的計算。
3.3 移植可行性分析
Ishot循環為計算不同震源的數據,在Ishot循環內,對于不同的Ishot,計算任務完全獨立。Ishot循環之后進入l循環,這里是時間推進方法,不同的l表示不同的時步,前一次迭代的結果將會用于后一步的計算,因而不同l之間存在極強的數據依賴。在l以內,則是不同格的計算,對于顯示格式的有限差分來說,不同網格的計算是完全獨立的,因而這里也具備很強的并行性。l循環部分十分適合利用MIC進行加速。
3.4 MIC平臺判斷(程序移植模式分析)
在MIC應用程序模式[11,13]中,存在以CPU為主、以MIC為主和CPU與MIC對等模式3種可能性,而前兩種模式也會有僅用CPU(CPU原生模式)或MIC(MIC原生模式)的分支。
在3D_EW程序中,大部分代碼為串行執行,串行執行部分在CPU與MIC上執行效率相差無幾,而小部分的可并行代碼部分計算量又十分巨大,此時在CPU與MIC計算效率則會有顯著不同,因此3D_EW程序適合于以CPU為主MIC為協處理器的offload模式。
3.5 使用OpenMP對串行程序進行改寫[14-15]
如圖2所示,使用制導語句#pragma omp parallel指出并行區域即kji循環,由于kji循環中存在一些變量px、sx、vvp2、vvs2、drd1、drd2等與并行區域外并沒有存儲關聯,所以可以用private進行標識,若如此做則每個線程都會有自己的一份拷貝。

原程序目的是為了在超級計算機上實現,故輸入數據量較大,在測試環境中(普通計算機未安裝MIC卡,雙核四線程,2.6 GHz)實現是相當不現實的,為了檢驗修改后程序運行效率是否提高,對輸入量(即循環次數)進行了一定比例的縮小。
在此數據下,未修改串行程序運行完畢需要188 s,使用OpenMP修改后運行完畢需190 s。從結果可以得出,經OpenMP改寫后,程序的運行效率不僅沒有提高,反而還降低了(此現象是正常的)。在使用修改后的輸入數據后,循環規模相比于原規模已大大減小,使用并行化帶來的效果無法抵消并行化的額外負擔,而當數據量較大時(使用原輸入),每個線程負擔的工作將會足夠多,并行化的效率便會提高。
3.6 優化OpenmMP版本程序
3.6.1 內部各線程負載均衡優化
并行區域內線程[16]分配方式可選有dynamic、static、guided和runtime,經過對每一種方式測試,最終得到較好方案為dynamic,如圖3所示,將循環任務進行動態分配,采取先到先得方式,為每個線程分配任務。

3.6.2 向量化優化
在3D_EW程序中,處理的大部分數據是3維數組,而C程序是基于存儲的,源程序kji循環內數組的索引也是基于最內層i循環,因而對i循環進行了向量化處理,如圖4所示。這樣可以使得同一條SIMD指令處理的數據跨度更小,增加數據讀寫的空間局部性,更加高效的利用讀寫帶寬。

3.6.3 并行力度優化
在當前程序中,當程序規模較小時(輸入的循環變量較小)一層循環可能無法達到MIC的并行度要求,針對這種情況,可以采取多層循環合并或者嵌套并行的方法。當前程序由于循環內變量初值不為0,合并循環進行的計算可能較為繁瑣,因此,使用的方法為嵌套并行。
3.7 將程序移植于MIC卡[11]
當前使用的應用模式以CPU為主,MIC為輔的offload模式,offload模式以CPU端為控制端完成控制任務和數據傳輸任務(可能會有小部分計算任務),MIC端作為計算端,完成CPU交于的并行計算任務?;玖鞒淌窃诋斍暗拇谐绦蛑?,每當執行到需要并行的部分(OpenMP語句已標出),則將這段代碼與相關的數據發送到設備端并行執行,待其返回后,主線程再繼續執行。
在修改后的代碼基礎上,使用offload關鍵字將需要在MIC卡上運行的程序部分進行標出。在kji循環開始之前,添加offload引語。使用編譯指令icpc生成MIC程序。
3.8 MIC程序進一步優化
3.8.1 C Intrinsic優化
使用底層編程指令集C Intrinsic來控制向量化的數據讀取操作,從而有效減少聚合/分散操作,使得MIC平臺上程序性能提升。
3.8.2 數據對齊優化
如圖5所示,在MIC上開辟內存時使用_mm_malloc語句可以保證數據對齊,將一個高速緩存行的數據一次性讀入向量寄存器。

3.8.3 數據傳輸優化
當程序運行至MIC程序塊部分/MIC程序部分運行完畢時,CPU與MIC卡之間需要進行數據傳輸,例如開始時CPU需要向MIC傳送MIC代碼段需要的變量值,而在MIC部分程序計算完成后向CPU返回計算結果,如圖6所示。

采用以上方法后,使得CPU與MIC卡之間高效傳輸,并減少不必要的數據交換,提高了程序運行效率。
3.9 運算性能結果與分析
在高性能計算領域中常使用加速比[1,10]來衡量并行系統或程序并行化的性能和效果,加速比定義為:

(2)

從圖7中的運算結果可以看出,程序運算量較小時,使用CPU與MIC協同計算的效果并不是很好,較僅使用CPU甚至更差,主要是因為MIC與CPU之間數據傳輸所花費的時間比例較大,而主要的計算部分花費的時間卻并不多。當程序運算量達到中等時,MIC的計算優勢開始漸漸顯現,與在MIC上計算所需的時間相比,數據傳輸的時間占比已漸漸減小,當達到大規模數據計算時,數據傳輸在整個時間花費上已可以忽略不計。

圖7 不同規模下的加速比
程序的并行化和大規模計算都是近幾年發展的熱點。本文將兩者利用MIC卡結合起來,在大規模計算的前提下,很好地提高了程序的效率,而通過實驗也證明了MIC卡并行計算的優越性。
[1] 陳國良編著.并行算法的設計與分析[M].2版.北京:高等教育出版社,2002.
[2] (美)格蘭馬,等.并行計算導論[M].2版.張武等譯.北京:機械工業出版社,2005.
[3] 易 娟.基于MIC的主從式并行遺傳算法的研究和實現[D].濟南:山東大學.2015.
[4] 陳 呈.面向MIC平臺的OpenACC實現與優化關鍵技術研究[D].長沙:國防科學技術大學.2013.
[5] 周長飛.基于MIC的圖像顯著性檢測技術研究[D].長沙:國防科學技術大學.2013.
[6] 劉國波.MIC平臺上的并行散列函數庫的研究與應用[D].廣州:華南理工大學.2015.
[7] 沈 鉑,張廣勇,吳韶華,等.基于MIC平臺的offload并行方法研究[J].計算機科學.2014,41(6):477-480.
[8] 亞洲超算競賽協會.超算競賽導論.
[9] 英特爾Xeon Phi協處理器的軟件開發指南ver.1.04.
[10] 張軍華,臧勝濤,單聯瑜,等.高性能計算的發展現狀及趨勢[J].石油地球物理勘探.2010,45(6):918-925.
[11] 王恩東,張 清,沈 鉑,等.MIC高性能計算編程指南[M].北京:中國水利水電出版社.2012.
[12] 殷順昌.OpenMP并行程序性能分析[D].長沙:國防科學技術大學.2006.
[13] (美)馬特森,等.并行編程模式[M].張云良等譯.北京:機械工業出版社, 2015.
[14] 羅秋明.OpenMP編譯原理及實現技術[M].北京:清華大學出版社,2012.
[15] 查普曼.使用OpenMP:便攜式共享存儲并行編程(科學與工程計算).
[16] (孟加拉)阿克特,(美)羅伯茨.多核程序設計技術:通過軟件多線程提升性能[M].李寶峰,富弘毅,李稻譯.北京:電子工業出版社,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
國家自然科學基金項目(61300169)
李薛劍(1981-),男,安徽合肥人,碩士,講師,研究方向為程序分析與驗證、高性能計算。
Tel.:13856005370; E-mail:wind1999@mail.ustc.edu.cn
TP 391
A
1006-7167(2017)04-0123-04