一種面向gpu并行的三對(duì)角矩陣方程求解方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及高性能計(jì)算技術(shù)領(lǐng)域,尤指一種面向圖形處理器(GPU,Graphics Processing化it)并行的Ξ對(duì)角矩陣方程求解方法。
【背景技術(shù)】
[0002] Ξ對(duì)角方程組是線性代數(shù)方程組中結(jié)構(gòu)形式較為簡(jiǎn)單的一種,屬于帶狀方程組。 其半帶寬為1。在兩點(diǎn)邊值問(wèn)題的有限差分方法、Ξ次樣條插值函數(shù)的計(jì)算、偏微分方程隱 式差分方法中常常產(chǎn)生運(yùn)類方程組。研究Ξ對(duì)角線方程組的求解對(duì)數(shù)值計(jì)算相關(guān)領(lǐng)域(如 航空數(shù)值計(jì)算)也有著重要的價(jià)值。
[0003] 傳統(tǒng)求解Ξ對(duì)角方程組的串行算法比較經(jīng)典的有Guass消去法,也被稱為"追趕 法",雖然該算法已證明在串行計(jì)算機(jī)上是最優(yōu)的算法,但是并不適合并行求解。Ξ對(duì)角方 程組的并行算法主要有遞歸倍增法(stone算法)、循環(huán)約化法、W及分裂法等。
[0004] 同時(shí),近年來(lái)GPU硬件性能和可編程性的提高,W及其在數(shù)值計(jì)算領(lǐng)域的廣泛應(yīng) 用,為并行求解Ξ對(duì)角方程組,提高計(jì)算性能帶來(lái)了契機(jī)。分裂法由H.H.Wang在八十年代 提出,算法貫徹了分而治之的原則,適用于并行求解。但是針對(duì)計(jì)算統(tǒng)一設(shè)備架構(gòu)(CUDA, Compute化ifiedDeviceArchitec化re)架構(gòu),算法的幾個(gè)中間步驟表現(xiàn)出適應(yīng)性的不 足。 陽(yáng)0化]原分裂法算法的主要步驟如下,W 9乘9矩陣為例。
[0006] 1.將矩陣分塊,如圖1所示。 陽(yáng)007] 2.依次消去每塊左下方元素(曰2,曰5,曰8,a3,曰6,曰9)和上方元素(cl,c4,c7),塊 內(nèi)串行,塊間并行,如圖2所示。
[0008]3.消去每塊上方元素(c3,c6),存在塊間數(shù)據(jù)依賴,塊間串行,如圖3所示。
[0009] 4.消去每塊左側(cè)元素(f4,巧,f6,巧,f8,f9)和右側(cè)元素(g6,g7,c8,g3,g4,c5, gl,c2),存在塊間數(shù)據(jù)依賴,塊間串行,如圖4所示。
[0010] 5.求解完畢,如圖5所示。
[0011] 在利用CUDA編程模型在GPU上進(jìn)行實(shí)現(xiàn)時(shí),如果按照上述原算法的描述進(jìn)行求 解,會(huì)發(fā)現(xiàn)在線程與線程之間,W及塊與塊之間存在著依賴關(guān)系,需要進(jìn)行通信和同步操 作。
[0012] 根據(jù)上述算法描述和分析:在算法的前半部分,矩陣塊內(nèi)串行,矩陣塊間并行;算 法后半部分,矩陣塊內(nèi)并行,矩陣塊間串行。前半部分的分塊方法將矩陣分塊的尺寸固定, 之后就無(wú)法更改,而且塊內(nèi)的并行度低,加速效果差;后半部分塊間串行無(wú)法利用GPU多線 程的優(yōu)勢(shì)。。
【發(fā)明內(nèi)容】
[0013] 為了解決上述技術(shù)問(wèn)題,本發(fā)明提供了一種面向GPU并行的Ξ對(duì)角矩陣方程求解 方法,能夠有效提高數(shù)據(jù)處理的塊間并行度,保證正確性的同時(shí),提高系統(tǒng)的運(yùn)算效率。
[0014] 為了達(dá)到本發(fā)明目的,本發(fā)明提供了一種面向GPU并行的Ξ對(duì)角矩陣方程求解方 法,包括:將面向GPU并行的Ξ對(duì)角矩陣進(jìn)行矩陣塊間依賴消除實(shí)現(xiàn)塊內(nèi)消元;將經(jīng)過(guò)依賴 消除的矩陣塊間進(jìn)行并行求解實(shí)現(xiàn)塊間并行消元;利用主機(jī)內(nèi)存和GPU顯存的透明映射, 進(jìn)行主機(jī)和GPU之間的數(shù)據(jù)傳輸通路。
[0015] 進(jìn)一步地,所述進(jìn)行矩陣塊間依賴消除,具體為:根據(jù)矩陣數(shù)據(jù)分塊之間的并行 性,消除矩陣分塊間的數(shù)據(jù)依賴,并將具有數(shù)據(jù)塊間依賴的部分進(jìn)行塊內(nèi)消元。
[0016] 進(jìn)一步地,所述進(jìn)行矩陣塊間依賴消除,具體為:將矩陣分塊;依次消去每塊左下 方元素和上方元素,塊內(nèi)串行,塊間并行;消去每塊上方元素,存在塊間數(shù)據(jù)依賴,塊間串 行;依次消去每塊左側(cè)最下元素,進(jìn)行依賴數(shù)據(jù)預(yù)處理,塊間串行;順序消去每塊左側(cè)元素 和右側(cè)元素,塊內(nèi)串行,塊間并行。
[0017] 進(jìn)一步地,所述進(jìn)行并行求解,具體為:根據(jù)分塊大小W及GPU線程數(shù)目,對(duì)將經(jīng) 過(guò)依賴消除的矩陣塊間進(jìn)行并行求解。
[0018] 進(jìn)一步地,所述進(jìn)行主機(jī)和GPU之間的數(shù)據(jù)傳輸通路,具體為:利用主機(jī)內(nèi)存和 GPU顯存的透明映射,使用主機(jī)CPU進(jìn)行串行運(yùn)算實(shí)現(xiàn)主機(jī)和GPU之間的數(shù)據(jù)傳輸通路。
[0019] 與現(xiàn)有技術(shù)相比,本發(fā)明通過(guò)矩陣塊間依賴消除算法,將原分裂法中具有數(shù)據(jù)塊 間依賴的部分進(jìn)行預(yù)先消元,為后續(xù)塊間并行消元打下基礎(chǔ),使得整個(gè)算法適用于GPU的 并行處理;針對(duì)為面向GPU加速求解Ξ對(duì)角矩陣方程的特點(diǎn),選擇合適的分塊大小W及GPU 線程數(shù)目,進(jìn)行并行處理,是大幅提高計(jì)算性能的基礎(chǔ);利用主機(jī)內(nèi)存和GPU顯存的透明映 射,一方面減少了數(shù)據(jù)傳輸量,另一方面簡(jiǎn)化了數(shù)據(jù)傳輸步驟,進(jìn)一步挖掘了算法的整體性 能。本發(fā)明充分考慮GPU具有強(qiáng)大并行處理能力的特點(diǎn),并著眼于傳統(tǒng)分裂法求解Ξ對(duì)角 矩陣算法的GPU適應(yīng)性改進(jìn),面向GPU計(jì)算特征,采用依賴數(shù)據(jù)預(yù)消除的方法針對(duì)矩陣分塊 計(jì)算的并行性進(jìn)行了優(yōu)化,最終在Ξ對(duì)角矩陣方程的求解速度方面,與傳統(tǒng)的分裂法相比 獲得了較大的改進(jìn),從而推動(dòng)了GPU在高性能數(shù)值計(jì)算領(lǐng)域廣泛應(yīng)用。
[0020] 本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說(shuō)明書(shū)中闡述,并且,部分地從說(shuō)明書(shū)中變 得顯而易見(jiàn),或者通過(guò)實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過(guò)在說(shuō)明書(shū)、權(quán)利 要求書(shū)W及附圖中所特別指出的結(jié)構(gòu)來(lái)實(shí)現(xiàn)和獲得。
【附圖說(shuō)明】
[0021] 附圖用來(lái)提供對(duì)本發(fā)明技術(shù)方案的進(jìn)一步理解,并且構(gòu)成說(shuō)明書(shū)的一部分,與本 申請(qǐng)的實(shí)施例一起用于解釋本發(fā)明的技術(shù)方案,并不構(gòu)成對(duì)本發(fā)明技術(shù)方案的限制。
[0022] 圖1是現(xiàn)有技術(shù)中的分裂法矩陣分塊示意圖。
[0023] 圖2是現(xiàn)有技術(shù)中的分裂法塊間并行消元示意圖。
[0024] 圖3是現(xiàn)有技術(shù)中的分裂法塊間同步消元示意圖。
[00巧]圖4是現(xiàn)有技術(shù)中的分裂法塊內(nèi)并行、塊間串行消元示意圖。
[00%] 圖5是現(xiàn)有技術(shù)中的分裂法求解完畢示意圖。
[0027] 圖6是本發(fā)明的面向GPU并行的Ξ對(duì)角矩陣方程求解方法的流程示意圖。
[0028] 圖7是本發(fā)明的算法初始狀態(tài)示意圖。
[0029] 圖8是本發(fā)明的算法串行依賴消去示意圖。
[0030] 圖9是本發(fā)明的算法塊間并行消元示意圖。
[0031] 圖10是本發(fā)明的算法求解完畢示意圖。
【具體實(shí)施方式】
[0032] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明 的實(shí)施例進(jìn)行詳細(xì)說(shuō)明。需要說(shuō)明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中 的特征可W相互任意組合。
[0033] 在附圖的流程圖示出的步驟可W在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中 執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可不同于此處的順 序執(zhí)行所示出或描述的步驟。
[0034] 在CUDA實(shí)現(xiàn)時(shí),如果按照現(xiàn)有技術(shù)的方法進(jìn)行求解,發(fā)現(xiàn)在線程與線程之間,W 及塊與塊之間存在著依賴關(guān)系,需要進(jìn)行通信和同步操作。最為重要的是最后對(duì)于f列和 g列的消去線程之間有著依賴關(guān)系,必須串行進(jìn)行,運(yùn)對(duì)CUDA程序的性能是致命的損失。
[0035] 本發(fā)明的算法設(shè)計(jì)主要考慮分裂法塊內(nèi)及塊間可并行的特點(diǎn),W及GPU編程模型 CUDA單指令流多線程的特點(diǎn),采用數(shù)據(jù)預(yù)處理消除塊間數(shù)據(jù)依賴的方法,可有效提高數(shù)據(jù) 處理的塊間并行度。