專利名稱:一種優(yōu)化Cache行為提升油藏數(shù)值模擬效率的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種提升油藏數(shù)值模擬效率的方法,尤其涉及一種優(yōu)化Cache行為提升油藏數(shù)值模擬效率的方法。
背景技術(shù):
隨著計算機(jī)的發(fā)展,油藏數(shù)值模擬逐步成為石油領(lǐng)域的一門成熟技術(shù)。該技術(shù)就是應(yīng)用數(shù)學(xué)模型再現(xiàn)實際油田生產(chǎn)動態(tài)。在油藏數(shù)值模擬過程中,數(shù)學(xué)模型是由偏微分方程與必要的初始和邊界條件一起構(gòu)成的,而該模型可用來近似預(yù)測油藏的動態(tài)。在油藏中發(fā)生著一些最為重要的物理過程, 如流動的流體分離成油、水、氣三相和不同相態(tài)之間的質(zhì)量轉(zhuǎn)移。數(shù)學(xué)模型中的那些方程式必須與這些最重要的物理過程相一致。在油藏數(shù)值模擬中,經(jīng)有限元分析,物理區(qū)域被離散為非規(guī)則網(wǎng)格,求解每個網(wǎng)格的壓力等變量的問題最終被歸結(jié)為采用共軛梯度法高效地求解大型稀疏線性方程組的問題。其線性方程組的求解可以用A/二/表示,其中u表示未知數(shù)向量,A表示大型稀疏系數(shù)矩陣,/表示常量向量。在油藏數(shù)值模擬領(lǐng)域,系數(shù)矩陣^中的非零元素所占總矩陣的容量通常小于1%。在利用共軛梯度法求解大型系數(shù)線性方程組的過程中,大量運(yùn)用了稀疏矩陣向量乘運(yùn)算。傳統(tǒng)的稀疏矩陣向量乘運(yùn)算為串行方法,該方法主要用于求解其中^是維度為η Χ m的稀疏矩陣,^是維度為m 的運(yùn)算向量,_7是維度為《的結(jié)果向量,即演算結(jié)果。傳統(tǒng)的串行方法使用基于三元組的存儲格式或其改進(jìn)CSR存儲格式作為基本數(shù)據(jù)結(jié)構(gòu),嚴(yán)格按照矩陣向量乘的算法流程進(jìn)行演算,并能夠得到正確的演算結(jié)果。然而由于其存儲格式本身的不足,油藏數(shù)值模擬演算沒有很好地利用數(shù)據(jù)局部性的特點(diǎn),因而Cache命中率較低,從而導(dǎo)致整體性能表現(xiàn)平平。近年來,隨著計算機(jī)硬件的不斷發(fā)展,越來越多的計算機(jī)采用了多核的平臺構(gòu)架, 傳統(tǒng)的油藏數(shù)值模擬的演算流程不能有效地利用多核平臺的優(yōu)勢,其對機(jī)器本身性能的利用也不充分。另外,傳統(tǒng)的存儲格式或其改進(jìn)657 存儲格式在運(yùn)算中較低的Cache命中率,制約了油藏數(shù)值模擬演算的整體性能,故而亟需改進(jìn)。
發(fā)明內(nèi)容
針對油藏數(shù)值模擬中利用共軛梯度法求解大型稀疏線性方程組存在的Cache命中率不高,硬件利用率不高的問題。本發(fā)明提出一種優(yōu)化Cache行為提升油藏數(shù)值模擬效率的方法,該方法在共軛梯度法中將稀疏矩陣轉(zhuǎn)化為四叉樹存儲格式。該格式能充分利用計算機(jī)硬件及性能,組織并進(jìn)行多線程計算的矩陣向量乘運(yùn)算方法,從而提升油藏數(shù)值模擬的整體效率。該方法應(yīng)擁有自動調(diào)優(yōu)的功能,使之能根據(jù)所部署計算機(jī)的特性進(jìn)行調(diào)整, 從而使并行運(yùn)算體現(xiàn)出更高的計算性能。通過利用多核平臺的優(yōu)勢,提升稀疏矩陣向量的運(yùn)算效率,充分利用計算機(jī)硬件,進(jìn)行并行計算,基于四叉樹存儲結(jié)構(gòu),對稀疏矩陣進(jìn)行分塊,在運(yùn)算過程中大幅提升Cache命中率,解決傳統(tǒng)串行運(yùn)算中因數(shù)據(jù)結(jié)構(gòu)導(dǎo)致的Cache命中率低,資源利用不足,性能表現(xiàn)平平的問題。本發(fā)明關(guān)注于油藏數(shù)值模擬演算中極為活躍的計算熱點(diǎn)——稀疏矩陣向量乘,引入了一種基于四叉樹的稀疏矩陣向量乘方法,該方法的優(yōu)化工作包括讀入稀疏矩陣,并將之轉(zhuǎn)化為四叉樹存儲格式;采用預(yù)調(diào)優(yōu)算法確定子矩陣塊的最優(yōu)大??;運(yùn)算中集成向量化、軟件流水線與多線程優(yōu)化技術(shù)以提升共軛梯度解法器的性能,從而提高油藏數(shù)值模擬演算的整體運(yùn)算效率。本發(fā)明方法包括以下步驟 步驟1.準(zhǔn)備數(shù)據(jù)
步驟1-1,首先判斷是否有計算任務(wù),若有,則轉(zhuǎn)入步驟1-2,否則演算結(jié)束; 步驟1-2,判斷是否指定進(jìn)行預(yù)調(diào)優(yōu),若是,則進(jìn)行步驟1-3的預(yù)調(diào)優(yōu),否則轉(zhuǎn)入步驟 1-4進(jìn)行數(shù)據(jù)格式化;
步驟1-3,讀取稀疏矩陣于文件中的記錄數(shù)據(jù),進(jìn)行預(yù)調(diào)優(yōu)過程,并將最佳劃分塊大小寫入系統(tǒng);
步驟1-4,若稀疏矩陣數(shù)據(jù)不為四叉樹存儲格式,則依照系統(tǒng)內(nèi)的最佳劃分塊大小,對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化,并將轉(zhuǎn)化結(jié)果寫回數(shù)據(jù)文件;
若設(shè)J為四叉樹存儲格式的劃分塊固定大小,運(yùn)算矩陣的維度為/PXG其中與C分別為對應(yīng)的行數(shù)與列數(shù),則步驟1-4所涉及的四叉樹格式轉(zhuǎn)化過程如下所述 1-4-1.劃分矩陣為四個區(qū)域大小大致相同的子矩陣區(qū)域塊; 1-4-2.判斷各子矩陣區(qū)域大小是否納入給定區(qū)域范圍若是,則該矩陣劃分結(jié)束; 1-4-3.否則,對子矩陣區(qū)域塊遞歸進(jìn)行劃分直到其所有子區(qū)域塊的劃分結(jié)束; 步驟1-3中的預(yù)調(diào)優(yōu)過程如下所述
1-3-1.枚舉"為數(shù)據(jù)集(2>€[1,1^410§2馬丄|>g2CU)]}內(nèi)的所有取值,并以之
為據(jù)對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化;
1-3-2.對基于當(dāng)前劃分子塊大小的四叉樹結(jié)構(gòu)矩陣進(jìn)行稀疏矩陣向量乘運(yùn)算; 1-3-3.記錄運(yùn)算消耗時間最小的子塊劃分大小作為最佳劃分塊大小; 步驟2.部署
數(shù)據(jù)準(zhǔn)備完成后,通過部署算法進(jìn)行運(yùn)算部署,具體是
步驟2-1,檢測各行非零元素所占字節(jié),若所占字節(jié)不是向量化所需字節(jié)對齊數(shù)的整數(shù)倍,則進(jìn)行數(shù)據(jù)填充;
步驟2-2,開啟軟件流水線支持,并進(jìn)行循環(huán)自動展開;
步驟2-3,根據(jù)計算機(jī)CPU核數(shù),進(jìn)行運(yùn)算數(shù)據(jù)的平均分配,并將CPU核與運(yùn)算線程進(jìn)行綁定;
步驟3.演算
步驟3-1,讀取所需的迭代次數(shù),開始迭代;
步驟3-2,基于步驟O)中部署算法的結(jié)果,進(jìn)行稀疏矩陣向量運(yùn)算; 步驟3-3,判斷是否結(jié)束迭代,若是返回結(jié)果結(jié)束演算,否則轉(zhuǎn)入步驟3-2。本發(fā)明的有益效果
1、本發(fā)明利用了數(shù)據(jù)局部性原理,采用靈活方便的四叉樹存儲結(jié)構(gòu)針對稀疏矩陣進(jìn)行分塊處理,降低計算時間復(fù)雜度中的常數(shù),通過提高Cache命中率的方式優(yōu)化Cache行為, 提高共軛梯度法解法器的性能,從而提升油藏數(shù)值模擬效率。2、本發(fā)明充分利用了多核平臺的性能優(yōu)勢,將計算中的熱點(diǎn)并行化處理,利用向量化、軟件流水線與多線程優(yōu)化技術(shù),以較小的開銷換取較高的運(yùn)算效率,從而提升油藏數(shù)值模擬效率。3、本發(fā)明對計算機(jī)硬件進(jìn)行性能上的自動調(diào)優(yōu),保證了迭代運(yùn)算的高效性。
圖1為本發(fā)明進(jìn)行稀疏矩陣向量乘演算的流程圖。
具體實施例方式下面結(jié)合附圖和實施方法對本發(fā)明作進(jìn)一步的詳細(xì)說明。參照圖1執(zhí)行步驟來說明本發(fā)明實施過程 步驟1,準(zhǔn)備數(shù)據(jù)
步驟1-1,首先判斷是否有計算任務(wù),若有,則轉(zhuǎn)入步驟1-2,否則演算結(jié)束; 轉(zhuǎn)入步驟1-2,讀取系統(tǒng)變量,判斷是否指定進(jìn)行預(yù)調(diào)優(yōu),若是則進(jìn)行步驟1-3的預(yù)調(diào)優(yōu),否則轉(zhuǎn)入步驟1-4進(jìn)行數(shù)據(jù)格式化;
轉(zhuǎn)入步驟1-3讀取稀疏矩陣于文件中的記錄數(shù)據(jù),進(jìn)行預(yù)調(diào)優(yōu)過程,并將最佳劃分塊大小以環(huán)境變量的方式寫入系統(tǒng)。此步驟之目的在于通過自動調(diào)優(yōu)獲取一個適宜于當(dāng)前計算機(jī)硬件平臺的子塊劃分大小,進(jìn)而優(yōu)化Cache行為;
轉(zhuǎn)入步驟1-4,若稀疏矩陣數(shù)據(jù)不為四叉樹存儲格式,依照系統(tǒng)內(nèi)的最佳劃分塊大小, 對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化,并將轉(zhuǎn)化結(jié)果寫回數(shù)據(jù)文件
若設(shè)J為四叉樹存儲格式的劃分塊固定大小,即存于系統(tǒng)內(nèi)的最佳劃分塊大小,運(yùn)算矩陣的維度為Χ G其中與C分別為對應(yīng)的行數(shù)與列數(shù)。則步驟1-4所涉及的四叉樹格式轉(zhuǎn)化過程如下所述
1-4-1.將待處理矩陣劃分為四個區(qū)域大小大致相同的子矩陣區(qū)域塊;
1-4-2.判斷各子矩陣區(qū)域大小是否納入給定區(qū)域范圍么若是,則該矩陣劃分結(jié)束;
1-4-3.否則,對子矩陣區(qū)域塊遞歸進(jìn)行劃分直到其所有子區(qū)域塊的劃分結(jié)束。上述格式轉(zhuǎn)化的優(yōu)勢在于,通過改變稀疏矩陣的存儲格式,提高稀疏矩陣向量乘運(yùn)算中的Cache命中率,從而優(yōu)化Cache行為,提升共軛梯度解法器的性能,從而提升油藏數(shù)值模擬效率。步驟1-3中的預(yù)調(diào)優(yōu)過程如下所述
1-3-1.枚舉“為數(shù)據(jù)集伊丨??!印譯怨心‘為藥丄|>g2q」)]}內(nèi)的所有取值,并以之
為據(jù)對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化;
1-3-2.對基于當(dāng)前劃分子塊大小的四叉樹結(jié)構(gòu)矩陣進(jìn)行稀疏矩陣向量乘運(yùn)算; 1-3-3.記錄各劃分子塊大小的四叉樹結(jié)構(gòu)進(jìn)行稀疏矩陣向量乘運(yùn)算的時間開銷,取其時間開銷最小的子塊劃分大小作為當(dāng)前系統(tǒng)的最佳劃分塊并返回相關(guān)數(shù)值;
步驟2.數(shù)據(jù)準(zhǔn)備完成后,通過部署算法進(jìn)行運(yùn)算部署整合優(yōu)化,以便進(jìn)行演算; 步驟2中的部署算法如下所述2-1.檢測各行非零元素所占字節(jié),若所占字節(jié)數(shù)不是向量化所需字節(jié)對齊數(shù)的整數(shù)倍則進(jìn)行數(shù)據(jù)填充。此步驟中的數(shù)據(jù)填充,一般為填充全零數(shù)據(jù)至當(dāng)前行;
2-2.開啟軟件流水化支持,并進(jìn)行循環(huán)自動展開。此步驟亦可由編譯器自動開啟; 2-3.根據(jù)計算機(jī)CPU核數(shù),進(jìn)行運(yùn)算數(shù)據(jù)的平均分配,并將CPU核與運(yùn)算線程進(jìn)行綁定。此步驟需利用操作系統(tǒng)的相關(guān)API進(jìn)行硬件綁定,使得運(yùn)算線程不至于頻繁切換CPU 核,導(dǎo)致產(chǎn)生核間數(shù)據(jù)通訊的額外開銷; 步驟3演算
轉(zhuǎn)入步驟3-1,讀取所需的迭代次數(shù),開始迭代; 轉(zhuǎn)入步驟3-2,基于O)中部署算法的結(jié)果,進(jìn)行稀疏矩陣向量運(yùn)算; 轉(zhuǎn)入步驟3-3,判斷是否結(jié)束迭代,若是返回結(jié)果至上層的共軛梯度解法器并結(jié)束演算,否則轉(zhuǎn)入步驟3-2。
權(quán)利要求
1. 一種優(yōu)化Cache行為提升油藏數(shù)值模擬效率的方法,其特征在于該方法包括以下步驟步驟1.準(zhǔn)備數(shù)據(jù),具體是步驟1-1.首先判斷是否有計算任務(wù),若有,則轉(zhuǎn)入步驟1-2,否則演算結(jié)束; 步驟1-2.判斷是否指定進(jìn)行預(yù)調(diào)優(yōu),若是,則進(jìn)行步驟1-3的預(yù)調(diào)優(yōu),否則轉(zhuǎn)入步驟 1-4進(jìn)行數(shù)據(jù)格式化;步驟1-3.讀取稀疏矩陣于文件中的記錄數(shù)據(jù),進(jìn)行預(yù)調(diào)優(yōu)過程,并將最佳劃分塊大小寫入系統(tǒng);步驟1-4.若稀疏矩陣數(shù)據(jù)不為四叉樹存儲格式,則依照系統(tǒng)內(nèi)的最佳劃分塊大小,對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化,并將轉(zhuǎn)化結(jié)果寫回數(shù)據(jù)文件;若設(shè)J為四叉樹存儲格式的劃分塊固定大小,運(yùn)算矩陣的維度為/PXG其中與C分別為對應(yīng)的行數(shù)與列數(shù),則步驟1-4所涉及的四叉樹格式轉(zhuǎn)化過程如下所述 1-4-1.劃分矩陣為四個區(qū)域大小大致相同的子矩陣區(qū)域塊; 1-4-2.判斷各子矩陣區(qū)域大小是否納入給定區(qū)域范圍若是,則該矩陣劃分結(jié)束; 1-4-3.否則,對子矩陣區(qū)域塊遞歸進(jìn)行劃分直到其所有子區(qū)域塊的劃分結(jié)束; 步驟1-3中的預(yù)調(diào)優(yōu)過程如下所述 1-3-1.枚舉J為數(shù)據(jù)集{2s |n € [ImaxCLlog2 ^J, LM2 G」)])內(nèi)的所有取值,并以之為據(jù)對稀疏矩陣進(jìn)行四叉樹格式轉(zhuǎn)化;1-3-2.對基于當(dāng)前劃分子塊大小的四叉樹結(jié)構(gòu)矩陣進(jìn)行稀疏矩陣向量乘運(yùn)算; 1-3-3.記錄運(yùn)算消耗時間最小的子塊劃分大小作為最佳劃分塊大??; 步驟2.數(shù)據(jù)準(zhǔn)備完成后,通過部署算法進(jìn)行運(yùn)算部署,具體是 步驟2-1.檢測各行非零元素所占字節(jié),若所占字節(jié)不是向量化所需字節(jié)對齊數(shù)的整數(shù)倍,則進(jìn)行數(shù)據(jù)填充;步驟2-2.開啟軟件流水線支持,并進(jìn)行循環(huán)自動展開;步驟2-3.根據(jù)計算機(jī)CPU核數(shù),進(jìn)行運(yùn)算數(shù)據(jù)的平均分配,并將CPU核與運(yùn)算線程進(jìn)行綁定;步驟3.演算,具體是步驟3-1.讀取所需的迭代次數(shù),開始迭代;步驟3-2.基于步驟中部署算法的結(jié)果,進(jìn)行稀疏矩陣向量運(yùn)算; 步驟3-3.判斷是否結(jié)束迭代,若是返回結(jié)果結(jié)束演算,否則轉(zhuǎn)入步驟3-2。
全文摘要
本發(fā)明涉及一種優(yōu)化Cache行為提升油藏數(shù)值模擬效率的方法。傳統(tǒng)的方法Cache命中率較低,導(dǎo)致整體性能表現(xiàn)平平。本發(fā)明引入了一種基于四叉樹的稀疏矩陣向量乘方法,該方法的優(yōu)化工作包括讀入稀疏矩陣,并將之轉(zhuǎn)化為四叉樹存儲格式;采用預(yù)調(diào)優(yōu)算法確定子矩陣塊的最優(yōu)大??;運(yùn)算中集成向量化、軟件流水線與多線程優(yōu)化技術(shù)以提升共軛梯度解法器的性能,從而提高油藏數(shù)值模擬演算的整體運(yùn)算效率。
文檔編號G06F17/50GK102521463SQ20111044136
公開日2012年6月27日 申請日期2011年12月26日 優(yōu)先權(quán)日2011年12月26日
發(fā)明者萬健, 任永堅, 周麗, 莊立, 張紀(jì)林, 殷昱煜 申請人:杭州電子科技大學(xué)