在執(zhí)行eos計算的指令受限算法中最優(yōu)化矩陣和向量運算的制作方法
【專利摘要】本發(fā)明提供一種用于在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算的系統(tǒng)和方法。該方法包括將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊,其中該區(qū)塊大小是非均勻的或均勻的。與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個向量可以被分成數(shù)個條帶。區(qū)塊和條帶可以被存儲在主存儲器、高速緩存或寄存器中,并且與逐次代換和牛頓迭代相關(guān)的矩陣和向量運算可以使用區(qū)塊和條帶并行執(zhí)行。
【專利說明】在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算
[0001]相關(guān)申請的交叉參考
[0002]本申請要求美國臨時專利申請61/535,131的利益,該申請?zhí)峤挥?011年9月15 日,標(biāo)題為 OPTIMIZED MATRIX AND VECTOR OPERATIONS IN INSTRUCTION LIMITEDALGORITHMS THAT PERFORM EOS CALCULATIONS,在此通過引用將其全文合并于此。
【技術(shù)領(lǐng)域】
[0003]本技術(shù)涉及具有最優(yōu)化矩陣和向量運算的指令受限算法。具體地,本技術(shù)的示范實施例涉及用于執(zhí)行狀態(tài)方程(EOS )計算的系統(tǒng)和方法。
【背景技術(shù)】
[0004]本節(jié)意圖介紹可以與所披露技術(shù)的實施例相關(guān)的現(xiàn)有技術(shù)的各種方面。本討論相信可以有助于提供框架從而促進更優(yōu)理解所披露技術(shù)的具體方面。因此應(yīng)理解本節(jié)從這點閱讀,而不必認(rèn)可現(xiàn)有技術(shù)。
[0005]指令受限算法可以在各種工業(yè)中發(fā)生。例如指令受限算法可以在領(lǐng)域例如3D圖形分析、加密、數(shù)據(jù)挖掘、壓縮、信號處理、圖像處理、鏈?zhǔn)椒▌t評估、數(shù)值法例如有限元和有限體積分析、地震模式識別和狀態(tài)方程(EOS)計算中發(fā)生。
[0006]EOS計算可以用來模擬可以對儲層性能具有顯著效果的相行為。石油混合物可以流過多孔介質(zhì)的速率受相態(tài)數(shù)、每個相態(tài)的粘度和每個相態(tài)的密度影響。一般地,相行為和相性質(zhì)是溫度、壓力和成分的函數(shù)。在一些情況下,與相行為相關(guān)的成分效果是微弱的并可以忽略。這可以伴隨稱為黑油的石油流體發(fā)生。模擬含黑油的儲層可以稱為黑油仿真。
[0007]在其他情況下,成分效果可以被解釋。為解釋成分效果,石油工業(yè)通常使用狀態(tài)方程(E0S)。將具有成分效果的儲層建??梢苑Q為成分仿真。數(shù)個先進開采機制可以依靠相行為的成分效果。
[0008]EOS計算可以使成分仿真比黑油仿真可觀地更低。EOS計算通常涉及確定相態(tài)數(shù)和每個相態(tài)的成分。盡管單個EOS計算執(zhí)行的消耗低廉,但其可以在儲層仿真的過程中重復(fù)數(shù)十億次。因此EOS計算可以消耗總仿真時間的多于50%。此外EOS計算是計算密集的并且其成本可以隨著混合物中組分?jǐn)?shù)目增加而迅速提高。
[0009]為改進計算速度,并行儲層仿真器可以使用。當(dāng)使用并行化時,巨大問題被分成較小子問題,并然后在數(shù)個處理核心之間分配。子問題可以不是獨立的,并且核心可以通信從而將其工作同步。核心可以通過共享存儲器或通過高速網(wǎng)絡(luò)同步。在并行計算環(huán)境中,存儲器帶寬和網(wǎng)絡(luò)通信通常是速度限制因素。
[0010]D.Voskov 和 H.Tchelepi, “Tie-Simplex Based Mathematical Framework forThermodynamical Equilibrium Computation of Mixtures with an Arbitrary Number ofPhases”,F(xiàn)luid Phase Equilibria,第 283 卷,2009,pp.1-11 陳述基于連結(jié)線的并行化方法在成分流仿真中改進相行為表示的準(zhǔn)確度和狀態(tài)方程(EOS)計算的效率。對于不能融合的成分仿真,陳述該技術(shù)試驗成分空間自適應(yīng)列表以避免多余EOS計算中的大部分。然而,矩陣和向量運算沒有最優(yōu)化。
[0011]C.Rasmussen 等 人,“Increasing the Computational Speed of FlashCalculations with Applications for Compositional, Transient Simulations,,, SPEReservoir Evaluation and Engineering,第 9 卷第 I 冊,2009, pp.32-38 陳述在常規(guī)閃存計算中,仿真時間的大部分花費在穩(wěn)定性分析上。陳述該技術(shù)判定在其調(diào)整時繞過穩(wěn)定性分析,并且不在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算。
[0012]E.Hendriks 和 A.Van Bergen, “Application of a Reduction Method toPhase-Equilibria Calculations,,,Fluid Phase Equilibria,第 74 卷,1992,pp.17-34 陳述對于特定熱動力模型,求解涉及混合物相平衡的一組非線性方程的方程數(shù)可以減少。問題大小和計算工作可以通過變量變換來減小。另外,適當(dāng)描述混合物相行為的減少變量的最小數(shù)目可以確定。然而在執(zhí)行EOS計算的指令受限算法中的矩陣和向量運算沒有被最優(yōu)化。
【發(fā)明內(nèi)容】
[0013]本技術(shù)的示范實施例提供在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算的方法。與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣可以被分成數(shù)個非均勻或均勻大小區(qū)塊。與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個向量可以被分成數(shù)個條帶。區(qū)塊和條帶可以在主存儲器、高速緩存或寄存器中組織,并且與逐次代換和牛頓迭代相關(guān)的矩陣和向量運算可以使用區(qū)塊和條帶并行執(zhí)行。
[0014]本技術(shù)的示范實施例提供系統(tǒng),其包括處理器和存儲用于由處理器執(zhí)行的機器可讀指令的有形機器可讀存儲介質(zhì),該機器可讀指令包括在由處理器執(zhí)行時被適配為使處理器將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊的指令,其中該區(qū)塊大小是均勻的或非均勻的。代碼在由處理器執(zhí)行時可以被適配為使處理器將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個向量分成數(shù)個條帶,并且在主存儲器、高速緩存或寄存器中存儲區(qū)塊和條帶。另外,代碼在由處理器執(zhí)行時可以被適配為使處理器使用區(qū)塊和條帶并行執(zhí)行與逐次代換和牛頓迭代相關(guān)的矩陣和向量運算。
[0015]本技術(shù)的示范實施例提供非暫時性計算機可讀介質(zhì),其包括經(jīng)配置引導(dǎo)處理器將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊的代碼,其中該區(qū)塊大小是非均勻的或均勻的。與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個向量分成數(shù)個條帶。區(qū)塊和條帶可以在主存儲器、高速緩存或寄存器中存儲,并且與逐次代換和牛頓迭代相關(guān)的矩陣和向量運算可以使用區(qū)塊和條帶并行執(zhí)行。
【專利附圖】
【附圖說明】
[0016]本技術(shù)的優(yōu)點可以緊接著瀏覽實施例的非限制示例的以下詳細(xì)描述和附圖變得更明顯,在該附圖中:
[0017]圖1是過程流程圖,其概述根據(jù)本技術(shù)的實施例在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算的方法;
[0018]圖2是示出根據(jù)本技術(shù)的實施例的存儲器層次的圖示;
[0019]圖3是圖解根據(jù)本技術(shù)的實施例的如何使用三個不同存儲格式將二維矩陣映射到線性存儲器的圖示;
[0020]圖4是示出根據(jù)本技術(shù)的實施例的均勻區(qū)塊和非均勻區(qū)塊的圖示;
[0021]圖5是圖解根據(jù)本技術(shù)的實施例的指令的數(shù)目如何可以通過SMD/SMT向量化被減少的圖不;
[0022]圖6是概述根據(jù)本技術(shù)的實施例的執(zhí)行EOS計算的方法的過程流程圖;
[0023]圖7是概述根據(jù)本技術(shù)的實施例的用于EOS計算的穩(wěn)定性和分相算法的迭代性質(zhì)的過程流程圖;
[0024]圖8是概述根據(jù)本技術(shù)的實施例的執(zhí)行逐次代換和牛頓算法的方法的過程流程圖;
[0025]圖9是概述根據(jù)本技術(shù)的實施例的成分如何可以在牛頓迭代內(nèi)被更新的方法的過程流程圖;
[0026]圖10是根據(jù)本技術(shù)的實施例的計算機系統(tǒng)的框圖,該計算機系統(tǒng)可以用來在指令受限算法中最優(yōu)化矩陣和向量計算。
【具體實施方式】
[0027]在以下詳細(xì)描述節(jié)中,具體實施例作為示例描述。然而,就以下描述對具體實施例或特別使用特定來說,其意圖僅用于示范目的并簡單提供示范實施例的描述。因此本技術(shù)不限于在下面描述的實施例,但相反這樣的技術(shù)包括落入附加權(quán)利要求的精神和保護范圍內(nèi)的全部替換、修改和等效。
[0028]起初,并為容易參考,闡述用于本申請的某些術(shù)語及其用于該上下文的意義。就本文使用的術(shù)語不在下面定義來說,應(yīng)給予其如在至少一個印刷出版物或已提交專利中反映的本領(lǐng)域技術(shù)人員給予的最廣泛定義。
[0029]術(shù)語“單元”指代面的集合,或暗示地定義面的節(jié)點的集合,其中該面一起形成封閉體積。另外術(shù)語“面”指代形成表面的點的任意集合。
[0030]術(shù)語“通信受限”指代算法執(zhí)行速度由速度限制的時候,處理核心能夠通過共享處理器或高速網(wǎng)絡(luò)在該速度通信并將處理核心的工作同步。
[0031]術(shù)語“存儲器受限”指代算法執(zhí)行速度由速率限制的時候,數(shù)據(jù)在存儲器和CPU之間在該速率移動。
[0032]術(shù)語“指令受限”指代算法執(zhí)行速度由速率限制的時候,指令由CPU在該速率處理。
[0033]術(shù)語“成分儲層仿真”指代用來仿真需要獲知儲層的至少一部分中成分改變的開采過程的仿真。例如,成分仿真可以有助于研究(I)易揮發(fā)油或氣體冷凝物儲層的耗盡,其中相成分和性質(zhì)隨著壓力低于氣泡壓力或露點壓力顯著變化,(2)非平衡氣體(干燥或富集的)噴射到黑油儲層,從而由蒸發(fā)成更可移動的氣相或由通過徹底的(單接觸)或動態(tài)的(多接觸)混溶性將油移動,以及(3)將C02噴射到油儲層,從而由混溶驅(qū)動(miscibledisplacement)并由油粘度減小和油溶脹(oil swelling)將油移動。
[0034]由于大量迭代相平衡計算和大量流動方程求解,因此使用EOS描述多組分流體混合物的相行為的成分儲層仿真可以是耗時的。在EOS計算中求解的方程的數(shù)目與流體中組分?jǐn)?shù)目成比例。由于儲層流體可以含有數(shù)百種純組分,因此執(zhí)行其中所有儲層組分在計算中使用的成分仿真可以是不實際的。因此希望將在描述流體混合物中使用的組分的數(shù)目保
持最小。
[0035]術(shù)語“計算機部件”指代計算機相關(guān)實體、硬件、固件、軟件、其組合,或執(zhí)行中的軟件。例如,計算機部件可以是但不限于在處理器上運行的過程、處理器、對象、可執(zhí)行過程、執(zhí)行的線程、程序和計算機。一個或多個計算機部件可以位于執(zhí)行的過程或線程內(nèi),并且計算機部件可以定位在一臺計算機上或在兩臺或更多臺計算機之間分布。
[0036]術(shù)語“狀態(tài)方程”或“E0S”指代方程,該方程代表包括烴的任何流體的相行為。在儲層仿真中,狀態(tài)方程可以僅用于烴相,并且經(jīng)驗關(guān)系式可以用來描述液相。EOS可以在基于計算機的建模和仿真技術(shù)中用來創(chuàng)造模型,以便估計所關(guān)注儲層中烴流體的性質(zhì)和/或行為。一旦EOS模型定義,則其可以用來計算儲層的石油流體的廣泛的一系列性質(zhì),例如氣-油比(GOR)或冷凝物-氣體比(CGR)、每個相態(tài)的密度、體積因數(shù)和壓縮率、熱容量和飽和壓力(泡點或露點)。因此EOS模型可以經(jīng)求解獲得在給定溫度的飽和壓力。此外G0R、CGR、相密度和體積因數(shù)是EOS模型的副產(chǎn)物。輸送性質(zhì)例如傳導(dǎo)率、擴散率或粘度可以從性質(zhì)例如流體成分推導(dǎo),該性質(zhì)從EOS模型獲得。
[0037]術(shù)語“非暫時性計算機可讀介質(zhì)”、“有形機器可讀介質(zhì)”等指代參與向處理器提供指令以便執(zhí)行的任何有形存儲。這樣的介質(zhì)可以采取許多形式,包括但不限于非易失性介質(zhì)和易失性介質(zhì)。非易失性介質(zhì)包括例如NVRAM或磁或光盤。易失性介質(zhì)包括動態(tài)存儲器例如主存儲器。計算機可讀介質(zhì)可以包括例如軟盤、軟磁盤、硬盤、磁帶,或任何其他磁介質(zhì)、CD-ROM、任何其他光介質(zhì)、RAM、PROM和EPROM、FLASH-EPR0M、固態(tài)介質(zhì)如全息存儲器、存儲器卡或任何其他存儲器芯片或盒式磁帶,或計算機可以從其讀取的任何其他介質(zhì)。在計算機可讀介質(zhì)配置為數(shù)據(jù)庫時,理解數(shù)據(jù)庫可以是任何類型的數(shù)據(jù)庫,例如關(guān)系的、分層的、面向?qū)ο蟮?,等等。因此本技術(shù)的示范實施例可以認(rèn)為包括有形存儲介質(zhì)或有形分布介質(zhì)和現(xiàn)有技術(shù)認(rèn)可的等效與后繼介質(zhì),實施本技術(shù)的軟件實施在這些介質(zhì)中存儲。
[0038]術(shù)語“等待時間”指代在系統(tǒng)中經(jīng)歷的時延的測量值。
[0039]術(shù)語“相行為”指代流體混合物如何將作為壓力、溫度和成分的函數(shù)分成兩個或更多個相態(tài)?;旌衔锏南鄳B(tài)可以是固體、蒸汽、液體或超臨界。
[0040]術(shù)語“相態(tài)”指代可以從非均勻混合物機械地分離的物質(zhì)的化學(xué)或物理統(tǒng)一量。其可以由單種物質(zhì)或多種物質(zhì)的混合物構(gòu)成。一般地,物質(zhì)的四相是固體、液體、氣體和等離子體。然而術(shù)語“相態(tài)”也用來描述物質(zhì)的其他性質(zhì)或狀態(tài),例如非混溶液體的分離層、膠體物質(zhì)或混合物,以及無定形固體。在烴生產(chǎn)中,含水的(水)、液體(油)和蒸汽(氣體)相經(jīng)
常存在。
[0041]術(shù)語“性質(zhì)”指代數(shù)據(jù),該數(shù)據(jù)表示與基于每一元素的不同拓?fù)湓叵嚓P(guān)的特性。一般地,性質(zhì)可以是包括整數(shù)和浮點數(shù)型等的任何計算值類型。此外,性質(zhì)可以包括值向量類型。性質(zhì)可以僅對幾何對象的元素的子組有效。性質(zhì)可以用來將對象的幾何形狀著色。術(shù)語“性質(zhì)”也可以指代涉及對象的特性或已存儲信息。適當(dāng)定義的應(yīng)用對計算機科學(xué)領(lǐng)域技術(shù)人員是直觀的。
[0042]術(shù)語“特化”指代為一組特定輸入?yún)?shù)計算機程序或算法的版本。
[0043]術(shù)語“線程”一般指代使用特別輸入數(shù)據(jù)執(zhí)行特別程序的實例。并行線程可以使用不同處理引擎同時執(zhí)行,允許處理工作在給定量的時間內(nèi)完成。[0044]總述
[0045]盡管為解釋簡便,圖解方法學(xué)示出并描述為一系列方框,但認(rèn)識到由于一些方框可以在不同順序中發(fā)生和/或與源自示出并描述的其他方框同時發(fā)生,因此方法學(xué)不受方框的順序限制。此外,少于全部的圖解方框可以需要實施例子方法學(xué)。方框可以組合或分離為多個組成。此外,另外和/或可替換的方法學(xué)可以采用另外的未圖解方框。盡管附圖圖解各種串行發(fā)生的行為,但認(rèn)識到各種行為可以連續(xù)發(fā)生、基本并行發(fā)生和/或在時間中基本不同點發(fā)生。
[0046]實施例提供用于在任意硬件體系結(jié)構(gòu)上的指令受限算法中最優(yōu)化矩陣和向量運算的方法。計算機算法可以含有各種矩陣和向量運算。任何計算機算法的速度由三個可能瓶頸限制:指令吞吐量、存儲器吞吐量和在集群情況下的通信吞吐量。最科學(xué)的算法由在其上處理它們的硬件來存儲器或通信限制。然而EOS計算通常是指令受限的,意味著EOS算法的最終速度可以由硬件能夠在其執(zhí)行單個運算的速率確定。結(jié)果,最優(yōu)化可以涉及在其中計算發(fā)生的高速緩存和硬件寄存器之間有效移動數(shù)據(jù)。該數(shù)據(jù)可以包括矩陣和向量數(shù)據(jù)。
[0047]圖1是過程流程圖,其概述根據(jù)本技術(shù)實施例在執(zhí)行EOS計算的指令受限算法中優(yōu)化矩陣和向量運算的方法100。在方框102處,每個矩陣被劃分成多個區(qū)塊(tile)。區(qū)塊通??梢员幻枋鰹閺脑嫉妮^大矩陣形成的較小子矩陣。圖3進一步描述將矩陣分成區(qū)塊。此外,每個矩陣可以與具有非均勻或均勻區(qū)塊大小的EOS穩(wěn)定性方程或EOS分相方程相關(guān)。在方框104處,每個向量都被分成多個條帶(strip)。與區(qū)塊類似,條帶通??梢员幻枋鰹閺脑嫉妮^大向量形成的較小子向量。每個向量可以與EOS穩(wěn)定性方程或EOS分相方程相關(guān)。
[0048]在方框106處,區(qū)塊和條帶可以被組織在計算機存儲例如主存儲器、高速緩存或寄存器中。在區(qū)塊和條帶中含有的數(shù)據(jù)可以被操作之前,運算數(shù)(operand)中的至少一個被傳遞到硬件寄存器。非必需的數(shù)據(jù)傳遞可能減慢CPU執(zhí)行速度。為使數(shù)據(jù)傳遞更加有效,由于高速緩存存儲器與主存儲器相比可以更快并且具有更低的等待時間,因此現(xiàn)代硬件體系結(jié)構(gòu)可以在主存儲器和寄存器之間使用高速緩存存儲器作為緩沖器。在方框108處,可以使用區(qū)塊和條帶并行執(zhí)行矩陣和向量計算,其中所有矩陣和向量計算以區(qū)塊運算和條帶運算的術(shù)語來表述。進一步地,在EOS計算中,可以使用區(qū)塊和條帶來并行執(zhí)行與逐次代換和牛頓迭代相關(guān)的矩陣和向量運算。圖6-9進一步描述逐次代換和牛頓迭代。并行化可以用來加速單個區(qū)塊單條帶運算或同時執(zhí)行多個區(qū)塊多條帶運算。
[0049]圖2是示出根據(jù)本技術(shù)的實施例的存儲器層次的圖示200。如圖示200所說明的,現(xiàn)代CPU通常具有多級高速緩存層次202。圖示200具有在204的等級1、在206的等級2和在208的等級3這三個高速緩存的等級。在204的高速緩存等級I最接近寄存器210,并且高速緩存等級3最接近主存儲器212。因此,越接近存儲數(shù)據(jù)的寄存器210,速度214將提高并且等待時間216降低。在主存儲器212和多級高速緩存層次202之間、在多級高速緩存層次202自身內(nèi)或者在多級高速緩存層次202和寄存器210之間的每次數(shù)據(jù)傳遞花費有限量的時間。非必需的數(shù)據(jù)傳遞可能導(dǎo)致硬件浪費若干計算機時鐘循環(huán)來等待數(shù)據(jù)從而進行處理。在現(xiàn)代CPU上,與小問題例如EOS計算相關(guān)的數(shù)據(jù)可以完全容納在高速緩存存儲器級內(nèi)。因此在現(xiàn)代CPU上的數(shù)據(jù)傳遞問題通常在高速緩存存儲器級和寄存器之間發(fā)生。相反,現(xiàn)代GPU通常具有顯著較小量的可用高速緩存存儲器。因此在現(xiàn)代GPU上的數(shù)據(jù)傳遞問題通常在高速緩存存儲器級和主存儲器之間發(fā)生。
[0050]最優(yōu)化技術(shù)
[0051]致力于指令吞吐量的最優(yōu)化技術(shù)包括區(qū)塊化、每區(qū)塊最優(yōu)化、特化、條帶化和向量化。因為盡管矩陣是二維數(shù)據(jù)結(jié)構(gòu),但矩陣通常被存儲在一維存儲器中,所以有效實施這些最優(yōu)化技術(shù)可能是挑戰(zhàn)性的。矩陣在存儲器中所依照存儲的方式影響執(zhí)行矩陣運算所需要的數(shù)據(jù)傳遞的數(shù)目。如上面討論,非必需的數(shù)據(jù)傳遞可能導(dǎo)致硬件浪費若干計算機時鐘循環(huán)來等待有待處理的數(shù)據(jù)。
[0052]一般具有兩類的可用計算機體系結(jié)構(gòu),標(biāo)量和向量。標(biāo)量體系結(jié)構(gòu)可以每次對單個數(shù)據(jù)元素運算,而向量體系結(jié)構(gòu)可以同時對若干數(shù)據(jù)元素運算。在各種計算機和移動裝置中發(fā)現(xiàn)的中央處理單元(CPU)是標(biāo)量硬件體系結(jié)構(gòu)的示例。在計算機顯卡上發(fā)現(xiàn)的圖形處理單元(GPU)是向量硬件體系結(jié)構(gòu)的示例。兩類體系結(jié)構(gòu)都由工作可以在其間劃分的若干核心構(gòu)成。工作的劃分可以通過將工作分成稱為線程的較小子任務(wù)來實現(xiàn)。
[0053]圖3是示出根據(jù)本技術(shù)的實施例的二維矩陣304-308如何使用三個不同存儲格式映射到線性存儲器302的圖示300。存儲矩陣的一個普遍方法是將數(shù)據(jù)行相互挨靠放置。這稱為行優(yōu)先存儲格式并在行優(yōu)先矩陣304中示出。可替換地,人們可以將數(shù)據(jù)列相互挨靠放置,從而獲得在列優(yōu)先矩陣304示出的列優(yōu)先存儲格式。這兩種存儲格式在應(yīng)用到各種計算時可能在硬件寄存器和高速緩存存儲器之間產(chǎn)生大量非必需的數(shù)據(jù)傳遞。數(shù)據(jù)傳遞問題可以通過將矩陣分成稱為區(qū)塊的較小子矩陣來解決,這些區(qū)塊在區(qū)塊化矩陣308示出。單個區(qū)塊310的大小被選擇用于確保每個算術(shù)運算中的至少一個運算數(shù)以及與區(qū)塊運算相關(guān)的中間結(jié)果保留在寄存器中。這樣,在寄存器和高速緩存之間的數(shù)據(jù)傳遞可以最小化,結(jié)果,CPU循環(huán)的較大部分可能花費在計算上。矩陣可以被再分成均勻或非均勻區(qū)塊。使用非均勻區(qū)塊可以允許任何大小的矩陣使用區(qū)塊化存儲格式。
[0054]圖4是示出根據(jù)本技術(shù)的實施例的均勻區(qū)塊和非均勻區(qū)塊的圖示400。矩陣402含有每個是相同大小的在參考號404處的區(qū)塊。因此矩陣402的區(qū)塊是均勻區(qū)塊。矩陣406含有在參考號408處的區(qū)塊、在參考號410處的區(qū)塊和在參考號412處的區(qū)塊。在參考號408處的區(qū)塊、在參考號410處的區(qū)塊和在參考號412處的區(qū)塊大小不同。因此矩陣402的區(qū)塊是非均勻區(qū)塊。具有均勻區(qū)塊的矩陣和具有非均勻區(qū)塊的矩陣可以被使用在本技術(shù)中。此外,區(qū)塊可以按照順序或交錯的形式被組織或存儲在主存儲器、高速緩存或寄存器中。如本文所討論的條帶也可以按照順序或交錯形式被組織或存儲在主存儲器、高速緩存或寄存器中。進一步地,可以使用標(biāo)量硬件體系結(jié)構(gòu)或向量硬件體系結(jié)構(gòu)來實現(xiàn)區(qū)塊。
[0055]無論均勻或非均勻,區(qū)塊的大小都可以被選擇以便最小化單個硬件體系結(jié)構(gòu)內(nèi)的存儲器層次的不同等級之間的數(shù)據(jù)傳遞。當(dāng)區(qū)塊是均勻的時,矩陣大小可以被約束到區(qū)塊大小的整數(shù)倍。通過用偽元素將矩陣填充至允許使用均勻區(qū)塊的大小,可以為任何矩陣實現(xiàn)整數(shù)倍的矩陣大小。然而,除非矩陣大小顯著大于區(qū)塊大小,否則填充矩陣可能顯著增加矩陣運算的計算時間。在此情況下,因為可以不使用填充將矩陣分成區(qū)塊,所以使用非均勻區(qū)塊可以消除這種計算時間上的增加。
[0056]使用區(qū)塊允許基于每區(qū)塊的最優(yōu)化。換言之,每個區(qū)塊最優(yōu)化促進使用分治途徑,其中最優(yōu)化矩陣運算可以被減少到運算少數(shù)區(qū)塊運算。例如,EOS特定區(qū)塊運算可以被用來計算逸度導(dǎo)數(shù)并用于在牛頓算法中構(gòu)建雅可比矩陣。牛頓算法也使用線性求解器。在EOS計算中,雅可比矩陣是稠密的使得大多數(shù)元素非零。求解具有稠密雅可比矩陣的線性方程組的兩個普遍算法是均可以按照區(qū)塊運算表述的高斯消去和上-下(UL)分解。每區(qū)塊最優(yōu)化可以減小循環(huán)開銷和跳躍開銷。循環(huán)開銷指代與每個循環(huán)相關(guān)的計算開銷。該循環(huán)開銷可以是在循環(huán)的每個迭代期間必須被估計從而確定循環(huán)的隨后迭代是否發(fā)生的狀況的結(jié)果。同樣,跳躍開銷指代在計算機程序遇到告訴其從代碼中的一行跳躍到另一行的指令時的相關(guān)的計算開銷。跳躍開銷通常作為函數(shù)調(diào)用、循環(huán)迭代的結(jié)果發(fā)生,或在執(zhí)行路徑取決于一些測試的輸出結(jié)果(分支)時發(fā)生。這樣的跳躍指令可以可觀地減慢執(zhí)行速度,除非跳躍開銷小于執(zhí)行跳躍之間的代碼花費的時間。
[0057]為了減小循環(huán)開銷和跳躍開銷,現(xiàn)代編譯器如可能則可以“展開”循環(huán)。當(dāng)展開循環(huán)時,編譯器可以估計控制循環(huán)迭代的數(shù)目的狀況,并將循環(huán)轉(zhuǎn)變成相應(yīng)的非循環(huán)指令。例如,在EOS運算中,循環(huán)迭代的數(shù)目可以由混合物中的組分的數(shù)目來控制。通常,混合物中的組分的數(shù)目對于編譯器來說是不可用的,從而防止循環(huán)展開發(fā)生。相反地,與EOS計算相關(guān)的區(qū)塊可以具有預(yù)定大小,并且已經(jīng)與區(qū)塊運算相關(guān)并且基于區(qū)塊大小的每個循環(huán)可以被完全地展開。相似地,在EOS計算中,已經(jīng)與條帶相關(guān)并且基于條帶大小的每個循環(huán)可以被完全地展開。
[0058]另一最優(yōu)化技術(shù)可以使用寄存器變量。在使用數(shù)據(jù)結(jié)構(gòu)例如向量和矩陣時的普遍編程實踐是使用指向結(jié)構(gòu)中的第一數(shù)據(jù)元素的地址的指針。使用該地址作為參考,算法獲知如何訪問其他數(shù)據(jù)元素。按照這種方式使用指針,尤其是在編譯器采用多個指針可以指向相同的數(shù)據(jù)地址時,可能導(dǎo)致硬件寄存器和高速緩存存儲器之間的非必需的數(shù)據(jù)傳遞。為了避免數(shù)據(jù)不一致,在寄存器中修改的任何數(shù)據(jù)元素可以被拷貝到高速緩存存儲器從而確保每個指針具有到最近更新的訪問。相似地,數(shù)據(jù)元素每當(dāng)有待運算時其可以從高速緩存存儲器中被拷貝,從而確保寄存器變量更新。過量的數(shù)據(jù)傳遞可以通過為中間計算使用寄存器變量或者保存輸入數(shù)據(jù)的拷貝來避免。因此寄存器變量中的數(shù)據(jù)不可由指針訪問,并且數(shù)據(jù)不必再在寄存器和高速緩存存儲器之間被拷貝。
[0059]用特化來最優(yōu)化涉及做出最優(yōu)化算法的若干版本從而調(diào)節(jié)取決于未知區(qū)塊數(shù)目的展開循環(huán),其與取決于區(qū)塊大小的循環(huán)相反。如本文所討論的,由于區(qū)塊大小是編譯器已知的,因此基于區(qū)塊大小的循環(huán)可以被展開。然而,區(qū)塊的數(shù)目可以是未知的。因此,取決于區(qū)塊的數(shù)目的循環(huán)不可以被展開。特化為所關(guān)注的每個數(shù)目的區(qū)塊提供算法。每個算法版本具有已知數(shù)目的區(qū)塊,該已知數(shù)目的區(qū)塊允許循環(huán)基于區(qū)塊的數(shù)目被展開。特化還應(yīng)用到與向量運算相關(guān)的循環(huán)并可以是自動使用模板。例如,通過特化展開循環(huán)可以在為具有不同數(shù)目組分的混合物生成數(shù)個不同EOS算法時發(fā)生。
[0060]由于向量是一維數(shù)據(jù)結(jié)構(gòu),因此區(qū)塊化不應(yīng)用到向量。為了減少與向量相關(guān)的循環(huán)和跳躍開銷,向量可以被分成條帶。使用條帶促進循環(huán)展開并且促進按照與區(qū)塊相同的方式使用寄存器變量。例如,循環(huán)可以基于條帶大小被展開。如本文所討論的,條帶利用涉及向量運算、從向量化分離并且不同于向量化的各種算法。
[0061]單指令多數(shù)據(jù)(SMD)和單指令多線程(SMT)向量化也可以最優(yōu)化指令受限算法。SMD指令對多個數(shù)據(jù)元素同時運算。大多數(shù)現(xiàn)代CPU實施經(jīng)常稱為向量擴展的SMD指令。然而關(guān)于GPU,具有SMD和SMT兩種體系結(jié)構(gòu)。SMD指令可以由單處理核心執(zhí)行,而SMT指令由多處理核心執(zhí)行。SMD和SMT指令都可以用來加速指令受限算法。[0062]圖5是示出根據(jù)本技術(shù)的實施例的如何可以通過SMD/SMT向量化來減少指令的數(shù)目的圖示500。每個陣列502-508代表可以對其運算的數(shù)據(jù)段。數(shù)目鑒別對單個數(shù)據(jù)元素運算的指令。雙精度標(biāo)量指令在參考號502處示出,并且雙精度向量指令在參考號504處示出。單精度標(biāo)量指令在參考號506處示出,并且單精度向量指令在參考號508處示出。例如,假設(shè)每個向量的大小是128位。相同運算可以被執(zhí)行在陣列中的每個元素上。使用雙精度向量,每個運算對兩個數(shù)據(jù)元素運算,將指令數(shù)減少到原來的二分之一。單精度向量含有數(shù)據(jù)元素數(shù)目的兩倍,并且指令數(shù)減少到原來的四分之一。因此數(shù)據(jù)元素的單精度、雙精度或混合精度向量化可以與SMD或SMT向量指令一起使用。進一步地,單精度、雙精度或混合精度向量化可以被用來并行執(zhí)行EOS計算,其中每個EOS計算可以對應(yīng)于不同混合物。
[0063]在指令受限的算法中,從雙精度切換到單精度不會加速計算。盡管數(shù)據(jù)元素的大小被減小,但指令的數(shù)目保持相同。利用單精度涉及使用向量指令。因為單精度向量在與雙精度向量比較時保存兩倍之多的元素,所以加速隨著單精度向量指令發(fā)生。因此每個指令對兩倍數(shù)目的數(shù)據(jù)元素運算。
[0064]SMD/SMT向量化可以被用來加速單個區(qū)塊和條帶運算。在該情況中,區(qū)塊和條帶可以是SMD/SMT向量長度的整數(shù)倍。因此,該方法用于短SMD/SMT向量??商鎿Q地,SIMD/SIMT向量化可以被用于并行執(zhí)行若干區(qū)塊和條帶運算。在該情況中,區(qū)塊和條帶可以被交錯以使每個SIMD/SIMT向量指令訪問源自每個區(qū)塊或條帶的單個元素。因為由每個SMD/SMT向量指令訪問的數(shù)據(jù)元素屬于分離的區(qū)塊或條帶,因此SMD/SMT向量化與并行的區(qū)塊和條帶運算不會對向量或條帶大小添加任何約束,并可以與任意長度的SIMD/SIMT向量一起使用。這樣,與EOS計算相關(guān)的區(qū)塊和條帶或者與EOS計算相關(guān)的區(qū)塊和條帶內(nèi)的數(shù)據(jù)元素的單精度、雙精度或混合精度向量化可以使用單指令多數(shù)據(jù)或單指令多線程向量指令。大多數(shù)現(xiàn)代CPU的向量寄存器可以保存兩個雙精度或四個單精度元素,或者甚至可以保存四個雙精度或八個單精度元素。
[0065]示例
[0066]本文所描述的各種最優(yōu)化可以用不同方式來組合,并可以針對算法可以在其上運行的具體硬件被制定。為了描述的目的,三個示例被說明。然而,這些示例用于描述目的并非意在限制本技術(shù)。同樣,第一示例可以為沒有SIMD指令的硬件而設(shè)計,第二示例可以為具有短SMD向量的硬件而設(shè)計,并且第三示例可以為具有任意長度的SMD向量的硬件而設(shè)計。
[0067]1.在第一示例中,硬件可以不支持SMD指令。所有矩陣可以被組織成區(qū)塊,并且區(qū)塊內(nèi)的數(shù)據(jù)可以使用如本文所描述的行優(yōu)先、列優(yōu)先或區(qū)塊化存儲格式。矩陣內(nèi)的區(qū)塊可以被順序地組織或存儲在主存儲器、高速緩存或寄存器中。區(qū)塊大小可以用盡可能有效地使用寄存器的方式來選擇。當(dāng)前,通常的臺式和工作站CPU可以具有16個寄存器,因此三乘三和四乘四是合理的區(qū)塊大小。使用均勻區(qū)塊大小在組分的數(shù)目中引入粒度。例如,使用每η個的區(qū)塊大小可以將組分的數(shù)目驅(qū)動到η的倍數(shù)。對于其中組分?jǐn)?shù)目不是η的倍數(shù)的混合物,添加痕量的偽組分可以允許組分總體是η的倍數(shù)。為避免過多填充,即使在使用具有大量寄存器的硬件時,區(qū)塊大小仍可以保持較小。
[0068]可替換地,通過將矩陣分成不同大小的區(qū)塊,填充可以完全地被避免。執(zhí)行的區(qū)塊運算可以包括線性代數(shù)運算如矩陣-矩陣乘法、矩陣-向量乘法和矩陣求逆。此外,基于最優(yōu)化區(qū)塊運算使用線性求解器可以求解各種線性方程組。
[0069]此外,在沒有SMD指令的硬件上使用時,向量可以被組織成條帶。條帶長度可以匹配區(qū)塊大小。例如,使用每η個的區(qū)塊大小意味著使用η的條帶長度。向量運算可以被表達(dá)為一系列條帶運算。這允許如本文所描述的部分展開對應(yīng)的循環(huán)。其他循環(huán)可以使用特化來展開。然而在線性求解器內(nèi),一些循環(huán)可以對于編譯器來說過于復(fù)雜而難以展開。這些循環(huán)可以被人工展開或通過使用模板而展開。
[0070]I1.在第二示例中,硬件可以支持在短向量上的SMD指令。因此SMD指令可被用來通過如本文所討論的向量化來加速單個區(qū)塊和條帶運算。這意味著涉及若干數(shù)據(jù)元素的計算可以被并行執(zhí)行,并且單精度SMD向量和雙精度SMD向量都可以被使用。所有矩陣可以被組織成區(qū)塊,并且區(qū)塊內(nèi)的數(shù)據(jù)可以使用行優(yōu)先或列優(yōu)先存儲格式??梢园凑毡M可能有效地使用寄存器的方式來選擇區(qū)塊大小。由于向量化用來加速單個區(qū)塊運算,因此即使區(qū)塊大小是非均勻的,區(qū)塊大小仍可以經(jīng)選擇是向量長度的整數(shù)倍。實施SMD向量的通常臺式和工作站CPU可以保持兩個雙精度元素或四個單精度元素,或者甚至是四個雙精度元素或八個單精度 元素。此外,條帶長度也可以是向量長度的整數(shù)倍并可以被選擇用于而匹配區(qū)塊大小。
[0071]在第二示例中,區(qū)塊運算可以被重設(shè)計為按照SIMD指令工作。除了矩陣-矩陣乘法,矩陣向量乘法和矩陣求逆運算以外,計算矩陣轉(zhuǎn)置的算法也可以被實施。除了使用基于SMD的區(qū)塊運算以外,線性求解器可以與第一示例幾乎相同。然而對于第二示例,一個主要區(qū)別是在每個區(qū)塊內(nèi)的SMD向量對齊必須被考慮。水平SMD向量對齊意味著SMD向量中的所有數(shù)據(jù)元素屬于區(qū)塊中的相同行。相似地,垂直SIMD向量對齊意味著SIMD向量中的所有數(shù)據(jù)元素屬于區(qū)塊中的相同列。單個區(qū)塊運算采用特定SMD向量對齊,并且偶然地,區(qū)塊內(nèi)的SMD向量對齊必須倒轉(zhuǎn)。這可以通過使用矩陣轉(zhuǎn)置運算來完成??梢园凑誗MD指令來表達(dá)條帶運算,并且特化可以使用人為展開的循環(huán)或者通過使用模板展開的循環(huán)來發(fā)生。
[0072]在第二示例的部分實施中,最優(yōu)化算法通過對二十組分混合物執(zhí)行EOS計算并為各種子算法記錄平均執(zhí)行時間來測試。不包括涉及使用條帶的最優(yōu)化。表1示出針對穩(wěn)定性和分相算法獲得的執(zhí)行時間。實施的最優(yōu)化導(dǎo)致2.2倍的平均加速。
[0073]表1:用于穩(wěn)定性和分相算法的執(zhí)行時間
[0074]
算法之前之后加速
穩(wěn)定性 107 μ s 42.5μ s 2.51χ
分相 60.6 μ s 32.8 μ s 1.85χ
總計 168 μ s 75.9 μ s 2.21χ
[0075]加速主要由在穩(wěn)定性和分相算法中執(zhí)行的牛頓算法中的顯著性能改進而引起。表2示出在應(yīng)用到穩(wěn)定性和分相算法時關(guān)于逐次代換和牛頓算法兩者所見的性能改進。
[0076]表2:用于逐次代換和牛頓算法的執(zhí)行時間[0077]
【權(quán)利要求】
1.一種在執(zhí)行EOS計算的指令受限算法中最優(yōu)化矩陣和向量運算的方法,其包括: 將與EOS穩(wěn)定性方程或EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊,其中所述區(qū)塊的大小是非均勻的或均勻的; 將與所述EOS穩(wěn)定性方程或所述EOS分相方程相關(guān)的每個向量分成數(shù)個條帶; 在主存儲器、高速緩存或寄存器中存儲所述區(qū)塊和條帶;以及 使用所述區(qū)塊和條帶并行執(zhí)行與逐次代換和牛頓迭代相關(guān)的所述矩陣和向量運算。
2.根據(jù)權(quán)利要求1所述的方法,包括在主存儲器、高速緩存或寄存器中順序或交錯存儲區(qū)塊或條帶。
3.根據(jù)權(quán)利要求1所述的方法,其中為了最小化單個硬件體系結(jié)構(gòu)內(nèi)的不同等級的存儲器之間的數(shù)據(jù)傳遞而選擇所述區(qū)塊的大小。
4.根據(jù)權(quán)利要求1所述的方法,包括基于與所述EOS計算相關(guān)的區(qū)塊或條帶大小展開循環(huán)。
5.根據(jù)權(quán)利要求1所述的方法,包括將每個矩陣分成數(shù)個區(qū)塊,其中所述矩陣被填充為允許使用均勻區(qū)塊的大小。
6.根據(jù)權(quán)利要求1所述的方法,包括通過特化展開循環(huán),其中數(shù)個不同EOS算法針對具有不同的數(shù)個組分的混合物被生成。
7.根據(jù)權(quán)利要求1所述的方法,包括EOS計算或與EOS計算相關(guān)的所述區(qū)塊和所述條帶內(nèi)數(shù)據(jù)元素的單精度、雙精度或混合精度向量化使用單指令多數(shù)據(jù)或單指令多線程向量指令。
8.一種被適配用于在執(zhí)行EOS計算的指令受限算法中的最優(yōu)化矩陣和向量運算的計算機系統(tǒng),所述計算機系統(tǒng)包括: 處理器;以及 有形機器可讀存儲介質(zhì),所述有形機器可讀存儲介質(zhì)存儲用于由所述處理器執(zhí)行的機器可讀指令,所述機器可讀指令包括: 代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊,其中所述區(qū)塊大小是非均勻的或均勻的; 代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器將與所述EOS穩(wěn)定性方程和所述EOS分相方程相關(guān)的每個向量分成數(shù)個條帶; 代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器在主存儲器、高速緩存或寄存器中存儲所述區(qū)塊和條帶;以及 代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器使用所述區(qū)塊和條帶并行執(zhí)行與逐次代換和牛頓迭代相關(guān)的所述矩陣和向量運算。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其中所述處理器形成標(biāo)量硬件體系結(jié)構(gòu)或矢量硬件體系結(jié)構(gòu)。
10.根據(jù)權(quán)利要求8所述的系統(tǒng),包括順序或交錯存儲區(qū)塊或條帶的主存儲器、高速緩存或寄存器。
11.根據(jù)權(quán)利要求8所述的系統(tǒng),包括代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器基于與所述EOS計算相關(guān)的區(qū)塊或條帶大小展開循環(huán)。
12.根據(jù)權(quán)利要求8所述的系統(tǒng),包括代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器將每個矩陣分成數(shù)個區(qū)塊,其中所述矩陣被填充為允許使用均勻區(qū)塊的大小。
13.根據(jù)權(quán)利要求8所述的系統(tǒng),包括代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器為具有不同的數(shù)個組分的混合物生成數(shù)個不同EOS算法。
14.根據(jù)權(quán)利要求8所述的系統(tǒng),包括代碼,所述代碼在由所述處理器執(zhí)行時被適配為使所述處理器使用單指令多數(shù)據(jù)或單指令多線程向量指令,執(zhí)行單精度、雙精度或混合精度EOS計算或與EOS計算相關(guān)的所述區(qū)塊和所述條帶內(nèi)的數(shù)據(jù)元素的向量化。
15.一種包括代碼的非暫時性計算機可讀介質(zhì),所述代碼被配置為引導(dǎo)處理器: 將與EOS穩(wěn)定性方程和EOS分相方程相關(guān)的每個矩陣分成數(shù)個區(qū)塊,其中所述區(qū)塊大小是非均勻的或均勻的; 將與所述EOS穩(wěn)定性方程和所述EOS分相方程相關(guān)的每個向量分成數(shù)個條帶; 在主存儲器、高速緩存或寄存器中存儲所述區(qū)塊和條帶;以及 使用所述區(qū)塊和條帶并行執(zhí)行與逐次代換和牛頓迭代相關(guān)的所述矩陣和向量運算。
16.根據(jù)權(quán)利要求15所述的非暫時性計算機可讀介質(zhì),包括在主存儲器、高速緩存或寄存器中順序或交錯存儲區(qū)塊或條帶。
17.根據(jù)權(quán)利要求 15所述的非暫時性計算機可讀介質(zhì),包括基于與所述EOS計算相關(guān)的區(qū)塊或條帶大小展開循環(huán)。
18.根據(jù)權(quán)利要求15所述的非暫時性計算機可讀介質(zhì),包括將每個矩陣分成數(shù)個區(qū)塊,其中所述矩陣被填充為允許使用均勻區(qū)塊的大小。
19.根據(jù)權(quán)利要求15所述的非暫時性計算機可讀介質(zhì),包括通過特化展開循環(huán),其中數(shù)個不同EOS算法針對具有不同的數(shù)個組分的混合物被生成。
20.根據(jù)權(quán)利要求15所述的非暫時性計算機可讀介質(zhì),包括EOS計算或與EOS計算相關(guān)的所述區(qū)塊和所述條帶內(nèi)的數(shù)據(jù)元素的單精度、雙精度或混合精度向量化使用單指令多數(shù)據(jù)或單指令多線程向量指令。
【文檔編號】G06F7/60GK103959233SQ201280045166
【公開日】2014年7月30日 申請日期:2012年7月23日 優(yōu)先權(quán)日:2011年9月15日
【發(fā)明者】K·豪根 申請人:??松梨谏嫌窝芯抗?br>