專利名稱:一種基于GPU的Cache模擬器及其時間并行加速模擬方法
技術領域:
本發明涉及一種Cache模擬器及其加速模擬方法,尤其涉及一種基于GPU的 Trace-driven Cache模擬器及其時間并行加速模擬方法,屬于計算機體系結構和并行計算 領域。
背景技術:
Cache (高速緩沖存儲器)技術有效的縮小了處理器和存儲器之間的速度差距,極 大的提升了計算機系統的性能,因此在現代處理器設計中通常都伴隨著Cache設計。但是 由于設計成本與上市周期的約束,設計師在處理器研發階段難以全面的對不同Cache結構 的性能進行硬件的評測,因此設計師通常需要借助軟件的方法來評估不同的Cache結構的 性能。 模擬器根據是否有輔助的硬件部分,分為硬件模擬器和軟件模擬器。硬件模擬器 由于其開發周期長,不易調試,代價昂貴等種種弊端,已經漸漸為廣大業內人士所摒棄。而 軟件模擬器因其開發周期短,代價小,風險低,易于調試等諸多優點逐漸受到人們的青睞。
軟件的Cache模擬器按照模擬精度和驅動方式不同可以劃分為兩種執行驅 動的Cache模擬器(Execution-driven Cache Simulator)禾口蹤跡驅動的Cache模擬器 (Trace-drivenCache Simulator) 。 Execution-driven Cache模擬器需要模擬整個程序執 行過程,包括取指(Fetch)、譯碼(Decode)、執行(Execute)、寫回(Writeback)等動作,動態 的產生對內存的訪問序列,這種模擬器雖然可以獲得包括時間信息等較全面的統計結果, 但是開發成本高,模擬時間長。相比較,后者則以內存訪問地址文件(Trace文件)作為輸 入,模仿處理器的訪存動作,輸出性能分析結果,在保證了一定模擬精度的同時實現了高效 率和較好的可移植性。但隨著被模擬系統日益復雜,需要模擬的設計空間不斷擴大,需要模 擬的Trace文件長度不斷增加,致使Trace-driven Cache模擬器的執行時間迅速增長,難 以全面的對各種Cache設計進行量化評估,所以加速Trace-driven Cache模擬器的模擬速 度對研究Cache體系結構具有重要意義。 基于Trace-driven Cache模擬器的模擬加速方法主要有三種Trace Reduction (Trace消減技術)、One Single Pass (單趟多配置模擬技術),以及并行模擬。
Trace Reduction方法是通過減少Trace長度來縮短Cache模擬時間。Trace消減 技術可以分為無損消減和有損消減。無損消減是指整個Trace數據在消減后可以被還原為 消減前的Trace,而不損失Trace數據,無損消減可以通過傳統的數據壓縮技術結合Cache 訪存空間局部性來實現Trace消減,也可以先對一系列特定的Cache配置進行模擬,在每次 模擬完一種Cache配置后抽掉多余的Trace,以實現Cache消減,以上兩種方法雖然能實現 trace的無損消減,但引入了額外的開銷,影響了模擬的效率,而且靈活度不高;有損消減 則不能保證消減后的Trace保留原Trace數據的所有信息,有多種方法可以實現Trace的 有損消減,如Trace刪除方法,基于時間采樣和組采樣的Trace消減方法,但有損消減終因 不能保證模擬結果的精確性而被業界拋棄。
5
One Single Pass方法則是利用不同Cache配置參數運行結果的相關性, 一趟計算 出所有Cache配置的模擬結果統計信息,如森林算法和基于二叉樹的算法。雖然該方法可 以達到很好的效率,但其存在一定的局限性,因為要跟蹤所有被模擬的Cache塊的狀態,每 一個記錄必須非常簡單,否則基本無異于串行模擬所有的Cache配置。 并行模擬分為空間并行模擬和時間并行模擬。基于空間的并行模擬是對Cache模 擬算法進行空間劃分,比如分組模擬,機群模擬等。基于時間的并行模擬是把Trace劃分為 若干個子序列,對于這些子序列進行并行模擬以加快模擬速度,由于Trace-driven Cache 模擬器對于Trace訪存序列存在偏序關系,即ti+1 Trace段模擬的開始狀態應該為ti Trace 段模擬結束的狀態,模擬過程會造成誤差,故需要在所有子Trace段模擬結束后,增加一個 修正操作,保證模擬結果正確。目前,在時間并行模擬方面,德國學者Kiesling在時間分片 算法的基礎上,采用有限近似的方法為Cache模擬進行修正操作,但真實的模擬結果與真 實結果有差異,不能很好反映實際Cache性能。 上述方法各自存在條件限制,如加速效果不夠理想、或成本較高、或不夠靈活。沒 有一種模擬方法能夠同時滿足正確性、實用性、成本、加速效果、靈活性等方面的要求。隨著 GPU(圖形處理器)硬件的快速發展,GPU內部聚合了越來越多的并行計算資源,同時基于 GPU的編程環境的不斷改善更有利于將通用計算中的并行計算部分映射到GPU平臺,使得 GPU加速Cache模擬成為可能。充分合理的挖掘Cache模擬的并行性,并將其映射到GPU并 行編程模型中去,可以得到更好的加速效果,且規避前人方法的不足。
發明內容
本發明提出了一種基于GPU的Cache模擬器,該模擬器建立在具有強大的高性能 并行計算能力的GPU上,具備多維度、多配置能力和并行模擬的特性,并采用時間并行加速 方法,實現快速高效的Cache模擬。 本發明提出的一種基于GPU的Cache模擬器,包括初始化模塊、Trace分段模塊、 GPU并行模擬模塊、GPU并行修正模塊與統計計算模塊;初始化模塊用于讀取用戶設定的 配置文件并解析該配置文件,得到所要模擬Cache的配置參數及模擬維度參數,并將各參 數傳遞給Trace分段模塊;Trace分段模塊用于對載入Trace序列文件進行分段,并為各 Trace段分配Cache實例,并初始化Cache實例;GPU并行模擬模塊用于模擬GPU顯存中的 各Trace段,記錄模擬結果包括命中、缺失次數和保存需要進行修正的修正Trace序列,并 將模擬結果傳遞給統計計算模塊,將修正Trace序列提供給GPU并行修正模塊;GPU并行修 正模塊使用修正Trace序列在對應Cache實例上進行模擬,記錄模擬結果包括命中次數,并 將模擬結果傳遞給統計計算模塊;統計計算模塊綜合GPU并行模擬模塊的和GPU并行修正 模塊的模擬結果,計算出最終的模擬結果,將模擬結果寫入文件保存。 本發明提供了一種基于GPU的Cache模擬器的時間并行加速模擬方法,包含以下 執行步驟 步驟1 :Cache模擬器啟動;讀取Cache的配置參數及模擬維度參數讀取,包含兩 個子步驟 步驟1. l,初始化模塊讀取并解析用戶設定的配置文件,得到所讀取要模擬的 Cache的參數,該參數包括要模擬的Cache的相聯度、組數、塊大小;
步驟1. 2,初始化模塊讀取并解析用戶設定的配置文件,得到模擬過程的模擬維度 參數; 步驟2 :對Trace序列分段,在GPU中分配Cache實例,完成以下五個子步驟 步驟2. 1 , Trace分段模塊對系統當前GPU進行枚舉,得到能用GPU的數量; 步驟2. 2, Trace分段模塊讀入Trace文件,解析得到Trace序列; 步驟2. 3, Trace分段模塊根據模擬維度和GPU的資源情況對Trace序列進行平均
分段,得到較小的Trace段,具體為設模擬維度中GPU、ThreadBlock和Thread維度對應的
值分別是Gi、 TBi和Ti,可用GPU的數量是AG"則當AGt > Gt或AGt = Gt時,Trace分段個
數等于Gi * TBi * 1\ ;當AGi < Gi時,Trace分段個數等于AGt * TBi * 1 ; 步驟2. 4,待Trace序列分段完成后,根據步驟1中讀入的模擬維度參數,將Trace
段復制到GPU的顯存中; 步驟2. 5, Trace分段模塊根據步驟1中讀入的Cache參數在GPU中為每個Trace 段建立相應的Cache實例并初始化,具體為假設在Trace分段后Trace[i]表示第i_l 個實例,首先為Trace [i]分配一個Cache實例Cache [i],然后將除Cache
之外的所有 Cache [i]中每個塊Block的標記tag信息都設置為-l,其中i為大于0的整數;
步驟3 :對各Trace段并行模擬,包含以下兩個子步驟 步驟3. 1 ,啟動GPU并行模擬模塊中各并行線程,對多個Trace段同時進行模擬,記 錄命中、缺失信息; 步驟3. 2,在對某Trace段模擬的過程中使用替換法保存需要進行修正的Trace 序列,為下一步的GPU并行修正模塊提供修正輸入數據。使用替換法保存需要進行修正的 Trace序列具體為在GPU并行模擬模塊處理過程中,對于Trace序列中Tracei的模擬,在 發生Cache缺失時,如果Tracei在Cache實例中屬于set」,且該組set」內存在tag值為_1 的Blockk,則Tracei將被添力口到修正Trace序列(Fixup—Trace)中,其中,Tracei表示Trace 序列中的第i個Trace, set」表示Cache實例中第j組,Blockk表示Cache實例中某組中的 第k個塊,i、j、k為大于0的整數; 步驟4 :對各Trace段并行修正;GPU并行修正模塊對步驟3中的模擬結果進行修 正,本步驟是多次循環的過程,每次循環具體包含以下兩個子步驟 步驟4. l,重新設各Cache實例的起始狀態;假設步驟2中的Trace序列共分為N 個Trace段,則與其對應的Cache實例的個數也為N,其中Cache
表示第一個Cache實 例,對于任意整數0 < i < N,都將Cache [i_l]的各個Block的tag值賦值給Cache [i]中 對應Block的tag ; 步驟4. 2,執行并行修正;GPU并行修正模塊的各并行修正線程使用修正Trace序 列在對應Cache實例上進行模擬,記錄Cache命中次數,使用同步驟3. 2中的替換法將要 修正的Trace添加到修正Trace序列中,并刪除修正Trace序列中的原始Trace。如果所 有Cache實例的修正Trace序列均為空,則并行修正過程結束,轉至步驟5執行;如果存在 Cache [i]的修正Trace序列不為空,則轉至步驟4. 1執行; 步驟5 :模擬結果的統計計算及模擬結果的存儲;待整個Cache并行模擬和修正過 程結束后,加載統計計算模塊,對Cache模擬結果進行統計,并存儲結果,包含以下兩個子 步驟
7,對于任意一個Cache實例,統計計算模塊利用統計算法,根據步驟4 并行修正中得到的命中對步驟3并行模擬中得到的命中次數、缺失次數進行修正,具體 為GPU并行模擬模塊的統計結果中命中次數、缺失次數分別是Hit—3、Miss—3, GPU并行 修正模塊的統計結果得到的命中次數是Hit_4,則最終的Cache模擬結果為命中次數是 Hit_3+Hit_4,缺失次數是Miss_3-Hit_4 ; 步驟5. 2,將步驟5. 1得到最終的Cache模擬結果寫入到文件中存儲,模擬結束。
相比現有技術本發明具有以下優點和積極效果 [OO32] (1)提高Cache模擬效率 傳統的采用Trace-driven的Cache模擬器大都使用CPU進行串行模擬,由于 Trace文件長度不斷加長,導致模擬器運行時間越來越長,而本發明使用時間并行算法,在 不縮短模擬Trace長度的前提下,對較長Trace序列進行分段,然后依托GPU強大的并行計 算能力,在GPU上實現多Trace段的并行模擬,提高了 Cache模擬效率。
(2)更好的利用資源 本發明提出的方法是基于GPU實現的,GPU在并行計算的性能遠優于同檔次的 CPU,選擇將適合并行化的應用在GPU上實現, 一方面充分利用了 GPU上具有的并行化處理 器的資源,另一方面也使得CPU可以專注于通用計算的應用,實現了不同應用的并行化處 理,更好的利用了計算資源。 [OO36] (3)更高的加速性價比 本發明提出的基于GPU的Cache模擬器,使用GPU做加速處理,傳統的Cache模擬 并行加速大多采用集群系統,需要眾多獨立的PC主機;而GPU內有大量的低廉的并行計算 資源,對于同樣的加速比,GPU的價格遠低于多個PC主機。
圖1是本發明提出的基于GPU的Cache模擬器的結構示意圖; 圖2是本發明提出的基于GPU的Cache模擬器的時間并行加速方法的執行步驟流程圖。
具體實施例方式
下面結合附圖對本發明進行進一步的詳細說明。 本發明提出的一種基于GPU的Cache模擬器,如圖1所示,包括初始化模塊1、 Trace分段模塊2、 GPU并行模擬模塊3、 GPU并行修正模塊4和統計計算模塊5。其中,初 始化模塊1、 Trace分段模塊2和統計計算模塊5運行在CPU端,而GPU并行模擬模塊3與 GPU并行修正模塊4運行在GPU端,實現并行模擬。 初始化模塊1和GPU并行模擬模塊3分別在傳統Cache模擬器中的初始化模塊和 模擬模塊基礎上進行了改進,在初始化模塊1中加入了配置文件,增加了對不同cache模 擬的靈活性,GPU并行模擬模塊3采用了并行計算的思想,在GPU上實現了具有并行計算能 力的模擬模塊;統計計算模塊5,對傳統Cache模擬器中的統計計算模塊的統計方法進行修 改,保證并行模擬的正確性;相對傳統Cache模擬器來說,Trace分段模塊2和GPU并行修 正模塊4是新添加的模塊。
8
初始化模塊l,在Cache模擬器啟動后,讀取用戶指定的配置文件,該配置文件是 XML類型的,通過解析配置文件中標簽的值,得到所要模擬的Cache的相聯度、組數、塊大 小、寫回策略等參數,以及模擬維度信息,然后將這些參數信息傳遞給Trace分段模塊2 ;
配置文件是XML類型的,Cache配置參數如相聯度、組數、塊大小、寫回策略分別 使用〈lesassoc>、 〈lessetno>、 〈lesblocksize>、 〈leswritepolicy>標簽進行標不,且 寫回策略的值是寫直達leswritethrough或者寫回leswriteback。模擬維度參數包括 GPU、 ThreadBlock禾口 Thread三個維度信息,分另U使用〈lessimugpu>、 〈lessimublock>、 〈lessimuthread〉標簽進行標示,其中〈lessimugpu〉的值表示參與模擬的GPU的個 數,〈lessimublock〉的值表示在一個GPU中參與模擬的線程塊(ThreadBlock)的個數, 〈lessimuthread〉的值表示在一個GPU的一個線程塊(ThreadBlock)中參與模擬的線程 (Thread)的個數。 Trace分段模塊2,負責對Trace序列進行平均分段。首先從初始化模塊1中得到 Cache的參數和模擬維度信息,而后對當前系統可用的GPU進行枚舉,得到可用GPU數量; Trace分段策略是假設模擬維度中GPU、 ThreadBlock和Thread維度對應的值分別是Gt、 TBi和l,可用GPU的數量是AGi,則當AGi > Gt或AGi = Gt時,Trace分段個數等于Gt * TBi * 1\ ;當AGi < Gi時,Trace分段個數等于AGt * TBi * 1。然后將Trace段拷貝到一個或 多個GPU的顯存中,并為每個Trace段建立一個Cache實例。為各Trace段分配Cache實 例,并初始化Cache實例,具體是為各Trace段Trace [i]分配Cache實例Cache [i],設置 所有Cache [i]中每個塊Block的標記tag信息都為_1, i為大于0的整數。
GPU并行模擬模塊3,主要功能是對多個Trace段進行并行模擬。在Trace段被拷 貝到GPU的顯存中后,在GPU中進行并行模擬。在并行模擬處理過程中,對于Trace序列中 Traceji為大于0的整數)的模擬,在發生Cache缺失時,如果Tracei在Cache實例中屬 于組setj(j為大于0的整數),且該組setj內存在tag值為_1的Blockk(k為大于0的整 數),則Tracei將被添力口到要修正Trace序列(Fixup—Trace)中,其中,Tracei表示Trace 序列中的第i個Trace, set」表示Cache實例中第j組,Blockk表示Cache實例中某組中的 第k個塊。 GPU并行修正模塊4,負責對并行模擬的模擬結果進行并行修正。并行的每一個線 程(Thread)都采用循環操作,以一個線程為例首先使用Fixup_TraCe在對應Cache實例 上進行模擬,過程與GPU并行模擬模塊3中的模擬過程類似,使用同步驟3. 2中的方法將要 修正的Trace添加到Fixup_Trace中,并刪除Fixup_Trace中的原始Trace。與GPU并行模 擬模塊3模擬過程唯一不同的是,此過程僅統計Cache的命中次數,而不統計Cache的缺失 次數,如果所有Cache實例的Fixup_TraCe均為空,則并行修正過程結束;如果不為空,則進 入下次循環操作。 統計計算模塊5,主要負責綜合GPU并行模擬模塊3和GPU并行修正模塊4的統 計結果,計算出最終的模擬結果,并寫入文件保存。統計計算模塊5修改后統計算法具體 為GPU并行模擬模塊的統計結果中命中次數、缺失次數分別是Hit—3、Miss—3, GPU并行 修正模塊的統計結果得到的命中次數是Hit—4,則最終的Cache模擬結果為命中次數是 Hit—3+Hit—4,缺失次數是Miss—3-Hit—4。在計算結束后,將結果寫入到指定文件中保存。
本發明提出一種基于GPU的Trace-driven Cache模擬器的時間并行加速模擬方
9法,如圖2所示,包含以下步驟 步驟1 :Cache模擬器啟動,讀取Cache配置參數及模擬維度信息,具體完成以下兩 個子步驟 步驟1. 1, Cache模擬器啟動后,初始化模塊1即從用戶指定的配置文件config. xml中,通過角牟析〈lesassoc>、 〈lessetno>、 〈lesblocksize>、 〈leswritepolicy>等標簽的 值,得到要模擬的Cache的相聯度、組數、塊大小、寫回策略等配置參數值,將這些配置參數 值傳遞給Trace分段模塊2 ; 步驟1. 2,從上述config. xml中讀取標簽〈lessim卿u〉、 〈lessimublock〉禾口 〈lessimuthread〉的值,解析得到模擬維度信息,然后將該參數信息傳遞給Trace分段模塊 2。 步驟2 :對Trace序列分段,在GPU中分配Cache實例;當Cache模擬器初始化完 成后,加載Trace分段模塊2,對Trace序列進行分段,然后在GPU中分配對應的Cache實 例,具體包括五個子步驟 步驟2. 1 ,對系統當前GPU進行枚舉,得到可用GPU的數量; 步驟2. 2,加載Trace分段模塊2,讀入存有Trace序列的文件,對于Trace文件中 的每一行采用"訪存類型_訪存地址_數據"("_"代表"空格")的格式解析得到所有的 Trace序列; 步驟2. 3,根據模擬維度和GPU的資源情況,將Trace序列平均分成較小的Trace 段。Trace分段策略是假設模擬維度中GPU、ThreadBlock和Thread維度對應的值分別是 Gi、TBi和Ti,可用GPU的數量是AG"則當AGt > Gt或AGt = Gt時,Trace分段個數等于Gt * TBi * 1\ ;當AGi < Gi時,Trace分段個數等于AG丄* TB丄* 1\ ; 步驟2. 4,待Trace序列分段完成后,根據步驟1中讀入的模擬維度參數,將Trace 段復制到GPU的顯存中; 步驟2. 5,在GPU中為每個Trace段分配一個對應的Cache實例,首先使用步驟1 中讀入的Cache配置參數初始化每個Cache實例,具體為假設在Trace分段后Trace [i]表 示第i-1個Trace段,首先為Trace [i]分配一個Cache實例Cache [i],然后將除Cache
之外的所有Cache [i]中每個塊Block的標記tag信息都設置為_1 ; 步驟3 :對多個Trace段并行模擬;在Trace分段和Cache實例分配完成后,加載 GPU并行模擬模塊3,本步驟包含以下兩個子步驟 步驟3. 1,在步驟2中根據模擬維度完成Trace的分段和相應Cache實例的創建 后,啟動GPU并行模擬模塊3中的各處理線程,對多個Trace段同時進行模擬,即并行執行 若干個〈Trace, Cache, Thread〉組合,每個組合內單獨記錄命中與缺失信息;
步驟3. 2,由于相鄰Trace段的并行模擬存在相關性,所以為了消除誤差,在對某 段Trace模擬的過程中使用替換法保存需要進行修正的Trace序列,為下一步的GPU并行 修正模塊提供修正輸入數據;替換法具體是在每個處理單元中的Cache實例模擬過程中, 對于任一 TraCei (其中i > 0,其在Cache實例中屬于第set」(j > 0)組)的模擬發生Cache 缺失,且此Cache實例的該組內存在tag值為_1的blockk(k > 0),則Tracei將被添加到 要FixupJrace內,其中i、 j、k為大于0的整數; 步驟4 :對各Trace段并行修正;在并行模擬完成后,加載GPU并行修正模塊4,對步驟3中的模擬結果進行修正,本步驟是一個多次循環修正的過程,每次循環依次執行以 下兩個子步驟 步驟4. 1,假設步驟2中的Trace序列共分為N個Trace段,則與其對應的Cache 實例的個數也為N,其中Cache
表示第一個Cache實例,對于任意整數O < i < N,都將 Cache [i_l]的各個Block的tag值賦值給Cache [i]中對應Block的tag ;
步驟4. 2, GPU并行修正模塊的各并行修正線程使用Fixup_Trace在對應Cache 實例上進行模擬,記錄Cache命中次數,使用同步驟3. 2中的方法將要修正的Trace添加 到Fixup_Trace中,并刪除Fixup_Trace中的原始Trace。如果所有Cache實例的Fixup_ Trace均為空,則并行修正過程結束,轉至步驟5執行;如果存在Cache [i]的Fixup_TraCe 不為空,則轉至步驟4. l執行; 步驟5 :模擬結果的統計計算及模擬結果的存儲;待整個Cache并行模擬和修正過 程結束后,加載統計計算模塊5,本步驟包含以下兩個子步驟 步驟5. 1對于任意一個Cache實例,根據步驟4并行修正中得到的命中和對步驟 3并行模擬中得到的命中次數、缺失次數進行修正,具體為設步驟3. 1中得到的命中次數、 缺失次數分別是Hit_3、Miss_3,步驟4中得到的命中次數是Hit_4,則最終的Cache模擬結 果為命中次數是Hit_3+Hit_4,缺失次數是Miss_3-Hit_4。 步驟5. 2在得到正確的Cache模擬結果后,寫入到文件中存儲,模擬過程結束。
1權利要求
一種基于GPU的Cache模擬器,其特征在于,包括初始化模塊、Trace分段模塊、GPU并行模擬模塊、GPU并行修正模塊與統計計算模塊;初始化模塊用于讀取用戶設定的配置文件并解析該配置文件,得到所要模擬Cache的配置參數及模擬維度參數,并將各參數傳遞給Trace分段模塊;Trace分段模塊用于對載入的Trace序列進行分段,并為各Trace段分配Cache實例和初始化Cache實例;GPU并行模擬模塊用于模擬GPU顯存中的各Trace段,記錄模擬結果包括命中、缺失次數和保存需要進行修正的修正Trace序列,并將模擬結果傳遞給統計計算模塊,將修正Trace序列提供給GPU并行修正模塊;GPU并行修正模塊使用修正Trace序列在對應Cache實例上進行模擬,記錄模擬結果包括命中次數,并將模擬結果傳遞給統計計算模塊;統計計算模塊綜合GPU并行模擬模塊的和GPU并行修正模塊的模擬結果,計算出最終的模擬結果,將模擬結果寫入文件保存。
2. 根據權利要求l所述的一種基于GPU的Cache模擬器,其特征在于,所述的初 始化模塊,讀取用戶指定的配置文件,該配置文件是XML類型的,通過解析配置文件中 〈lesassoc>、 〈lessetno>、 〈lesblocksize>、 〈leswrit印olicy〉標簽的值,得到所要模擬的 Cache的相聯度、組數、塊大小、寫回策略,通過解析標簽〈lessimugpu〉、 〈lessimublock〉、 〈lessimuthread〉得到模擬維度三個信息GPU、 ThreadBlock和Thread,將這些參數 信息傳遞給Trace分段模塊;其中,〈lessimugpu〉的值表示參與模擬的GPU的個數, 〈lessimublock〉的值表示在一個GPU中參與模擬的線程塊的個數,〈lessimuthread〉的值 表示在一個GPU的一個線程塊中參與模擬的線程的個數。
3. 根據權利要求1所述的一種基于GPU的Cache模擬器,其特征在于,所述的Trace 分段模塊,對系統當前圖形處理器GPU進行枚舉,得到能用GPU的數量AGi,結合初始化模 塊傳遞的模擬維度和GPU的資源情況將Trace序列平均分為i個Trace段,將各Trace段 復制到GPU的顯存中,并為各Trace段Trace [i_l]分配Cache實例Cache [i_l],設置所有 Cache [i]中每個塊Block的標記tag信息都為_1 ;所述的Trace段個數i,當> ^或AG丄=^時,i等于^ * * 1\,當AG丄< ^時, i等于AGi * TBi * 1\ ;其中,TBi和1分別表示模擬維度中GPU、 ThreadBlock和Thread維度,i為大于0 的整數。
4. 根據權利要求1所述的一種基于GPU的Cache模擬器,其特征在于,所述的GPU并行 模擬模塊,其內并行運行的線程,對各Trace段進行模擬過程中,當Trace序列中Trace,的 模擬發生Cache缺失時,而Tracei在Cache實例中屬于setj,且此Cache實例的set」內存 在tag值為-1的Blockk,則保存Tracei到要修正Trace序列內,模擬完成后把修正Trace 序列提供給GPU并行修正模塊;其中Tracei表示Trace序列中的第i個Trace, setj表示Cache實例中第j組,Blockk 表示Cache實例中某組中的第k個塊,i、 j、 k為大于0的整數。
5. 根據權利要求1所述的一種基于GPU的Cache模擬器,其特征在于,所述的GPU并 行修正模塊,其內并行運行的線程都采用循環操作,對于每一個線程,使用修正Trace序列 在對應Cache實例上進行模擬,模擬過程與GPU并行模擬模塊中的模擬過程類似,并使用同 GPU并行模擬模塊中的方法將要修正的Trace添加到修正Trace序列中,并刪除修正Trace 序列中的原始Trace,當所有Cache實例的修正Trace序列均為空時,并行修正過程結束,否則,進入下次循環操作。
6. 根據權利要求l所述的一種基于GPU的Cache模擬器,其特征在于,所述的統計 計算模塊,綜合GPU并行模擬模塊的命中次數Hit—3、缺失次數Miss—3和GPU并行修正 模塊的命中次數Hit—4,計算出最終的模擬結果命中次數是Hit—3+Hit—4,缺失次數是 Miss_3-Hit_4。
7. 應用權利要求1所述的一種基于GPU的Cache模擬器的時間并行加速模擬方法,其 特征在于,包括以下步驟步驟1 :Cache模擬器啟動時,讀取Cache的配置參數及模擬維度參數,包含兩個子步驟步驟1. l,初始化模塊讀取并解析用戶設定的配置文件,得到所讀取要模擬的Cache的配置參數,該參數包括要模擬的Cache的相聯度、組數、塊大小;步驟1. 2,初始化模塊讀取并解析用戶設定的配置文件,得到模擬過程的模擬維度參數,該模擬維度包括三個維度信息GPU、 ThreadBlock和Thread, GPU表示參與模擬的GPU的個數,ThreadBlock表示在一個GPU中參與模擬的線程塊的個數,Thread表示在一個GPU的一個線程塊中參與模擬的線程的個數;步驟2 :對Trace序列分段,在GPU中分配Cache實例,完成以下五個子步驟步驟2. 1, Trace分段模塊對系統當前GPU進行枚舉,得到能用GPU的數量;步驟2. 2, Trace分段模塊讀入Trace文件,解析該文件得到Trace序列;步驟2. 3, Trace分段模塊根據模擬維度與GPU的資源情況對Trace序列進行平均分段,得到較小的Trace段;步驟2. 4,待Trace序列分段完成后,Trace分段模塊根據步驟1中讀入的模擬維度參數,將Trace段復制到GPU的顯存中;步驟2. 5,Trace分段模塊根據步驟1中讀入的Cache配置參數在GPU中為每個Trace段建立相應的Cache實例并初始化;步驟3 :對各Trace段并行模擬,包含以下兩個子步驟步驟3. 1 ,啟動GPU并行模擬模塊中各并行線程,對多個Trace段同時進行模擬,記錄命 中次數Hit—3、缺失次數Miss_3 ;步驟3. 2,在對某Trace段模擬的過程中使用替換法保存需要進行修正的Trace序列, 為下一步的GPU并行修正模塊提供修正輸入數據;步驟4 :對各Trace段并行修正;GPU并行修正模塊對步驟3中的模擬結果進行修正,本 步驟是多次循環的過程,每次循環具體包含以下兩個子步驟步驟4. l,重新設置各Cache實例的起始狀態;假設步驟2中的Trace序列共分為N個 Trace段,則與其對應的Cache實例的個數也為N,其中Cache
表示第一個Cache實例, 對于任意整數0 < i < N,都將Cache [i_l]的各個Block的tag值賦值給Cache [i]中對應 Block的tag ;步驟4. 2,執行并行修正;GPU并行修正模塊的各并行修正線程使用修正Trace序列在 對應Cache實例上進行模擬,記錄Cache命中次數Hit_4,并使用替換法將要修正的Trace 添加到修正Trace序列中,并刪除修正Trace序列中的原始Trace,如果所有Cache實例的 修正Trace序列均為空,則并行修正過程結束,轉至步驟5執行;如果存在Cache [i]的修正Trace序列不為空,則轉至步驟4. 1執行;步驟5 :待整個Cache并行模擬和修正過程結束后,加載統計計算模塊,對Cache模擬 結果進行統計,并存儲結果,包含以下兩個子步驟步驟5. 1 ,對于任意一個Cache實例,統計計算模塊利用統計算法,根據步驟4并行修正 中得到的命中次數Hit_4對步驟3并行模擬中得到的命中次數Hit—3、缺失次數Miss_3進 行修正,得到最終模擬結果命中次數是Hit_3+Hit_4,缺失次數是Miss_3-Hit_4 ;步驟5. 2,將步驟5. 1得到最終的Cache模擬結果寫入到文件中存儲,模擬結束。
8. 根據權利要求7所述的時間并行加速模擬方法,其特征在于,步驟2. 3中所述的將 Trace序列平均分段,分段個數具體為當> ^或= ^時,Trace分段個數等于^ ^ TBi * 1\ ;當< &時,Trace分段個數等于* TBi * 1\ ;其中,表示能用GPU的數量,TBi和1分別表示模擬維度中GPU、 ThreadBlock和Thread維度。
9. 根據權利要求7所述的時間并行加速模擬方法,其特征在于,步驟2. 5所述的Trace 分段模塊為每個Trace段建立相應的Cache實例并初始化,具體為Trace序列平均分 為i個Trace段,為每個Trace段Trace [i-1]分配一個Cache實例Cache [i_l],將所有 Cache [i]中每個塊Block的標記tag信息都設置為_1, i為大于0的整數。
10. 根據權利要求7所述的時間并行加速模擬方法,其特征在于,步驟3. 2與步驟4. 2 中所述的使用替換法保存需要進行修正的Trace序列,具體為在Cache實例模擬過程中, 對于Trace序列中Tracei的模擬,發生Cache缺失時,若Tracei在Cache實例中屬于set」, 且此Cache實例的setj內存在tag值為_1的Blockk,則Tracei將被添加到要修正Trace序 列內,其中Tracei表示Trace序列中的第i個Trace, set」表示Cache實例中第j組,Blockk 表示Cache實例中某組中的第k個塊,i、 j、 k為大于0的整數。
全文摘要
本發明提出了一種基于GPU的Cache模擬器及其時間并行加速方法,該Cache模擬器包括初始化模塊、Trace分段模塊、GPU并行模擬模塊、GPU并行修正模塊與統計計算模塊,本發明建立在具有強大的高性能并行計算能力的GPU上,具備多粒度、多配置能力和并行模擬的特性,并采用時間并行加速方法,對較長Trace序列進行分段,在GPU上實現多Trace段的并行模擬,模擬過程中利用GPU并行修正模塊修正模擬過程造成的誤差。本發明提高了Cache模擬效率,更好的利用了計算資源,同時實現了較高的性價比。
文檔編號G06T1/20GK101770391SQ201010105079
公開日2010年7月7日 申請日期2010年2月2日 優先權日2010年2月2日
發明者萬寒, 王志強, 馬俊杰, 高小鵬, 龍翔 申請人:北京航空航天大學