專利名稱:多級指令高速緩存預取的制作方法
多級指令高速緩存預取技術(shù)領域
本發(fā)明總地涉及計算機架構(gòu),并且,更具體地,涉及用于多線程處理器的多級指令高速緩存預取。
背景技術(shù):
在諸如多線程處理器的高速計算系統(tǒng)中的慣例是利用多級高速緩存系統(tǒng)來在獲取(fetch)指令期間減少延遲。第一級高速緩存級別稱為一級(LI)高速緩存并且一般是與處理器緊密相關的小型高速存儲器。LI高速緩存通常具有各種高速緩存級別的最低存儲器訪問延遲并且含有處理器頻繁訪問或有可能最近要訪問的指令。當在由處理器訪問指令之時或之前將指令存儲在LI高速緩存中時,性能得到提高。二級(L2)高速緩存一般是比LI高速緩存更大且更慢、但比系統(tǒng)存儲器快的存儲器。一些高速緩存系統(tǒng)可采用在LI和L2高速緩存之間的、延遲和大小處于LI和L2高速緩存之間某處的中間級(L1.5)高速緩存。
常規(guī)地,當處理器訪問新指令時,處理系統(tǒng)內(nèi)的獲取單元首先在LI高速緩存中搜尋指令。如果LI高速緩存命中(即指令實際上存在于LI高速緩存中),那么轉(zhuǎn)移(transfer)指令并執(zhí)行存儲器訪問操作。如果指令不在LI高速緩存中,那么LI高速緩存未命中(miss),并且獲取單元不得不嘗試在L1.5高速緩存中尋找指令。如果在L1.5高速緩存中未命中,那么獲取單元隨后在L2高速緩存中搜尋指令,并且如果L2高速緩存未命中,那么最后搜索系統(tǒng)存儲器。
當以可預見的方式進行指令訪問時,可通過在處理器嘗試從LI高速緩存訪問相應的指令之前從L1.5高速緩存預取高速緩存線并轉(zhuǎn)移這些高速緩存線至LI高速緩存來改善LI高速緩存命中率。處理器可預見地在連續(xù)的存儲器地址位置訪問指令,除非出現(xiàn)至非序列性(non-sequential)存儲器位置的支路。因此,如果處理器正在訪問在特定LI高速緩存線的位置,那么獲取單元一般從L1.5高速緩存預取高速緩存線,其含有緊跟隨當前LI高速緩存線的存儲器位置。該下一個的高速緩存線可稱為預取目標,并且位于在緊跟隨與當前LI高速緩存線相對應的L1.5高速緩存地址的L1.5高速緩存內(nèi)。如果預取操作成功,那么到處理器到達緊跟隨當前LI高速緩存線的存儲器地址位置時,下一個LI高速緩存線已從L1.5高速緩存被預取并存儲在更快的LI高速緩存內(nèi)。用這種方式,成功的預取增加了在LI高速緩存內(nèi)的命中率。序列性的存儲器訪問一般致使高速緩存命中。可在高速緩存層級內(nèi)的任一級采用類似的技術(shù)。例如,L1.5高速緩存可從L2高速緩存預取線,并且L2高速緩存可從系統(tǒng)存儲器預取線。
在一種預取方法中,處理器可一次從LI高速緩存訪問兩條指令,其中每個LI高速緩存線均包括八條指令。這種技術(shù)稱作“扇形”訪問,其中每對指令代表LI高速緩存線內(nèi)的“扇區(qū)(sector)”,且每個LI高速緩存線具有四個扇區(qū)。獲取單元在任意給定時間監(jiān)視處理器訪問哪個扇區(qū)并使用該信息來預取下一個LI高速緩存線。此外,如果預取操作成功,那么到處理器消耗當前LI高速緩存線中最后的扇區(qū)時,下一個LI高速緩存已從L1.5高速緩存被預取并存儲在LI高速緩存內(nèi)。
該常規(guī)方法預取指令的一個缺點是,更快的處理器可一次轉(zhuǎn)移整個LI高速緩存線(在該示例中含有八條指令)。在這種情況下,為了從L1.5高速緩存預取附加的高速緩存線,獲取單元不能逐扇區(qū)地監(jiān)視處理器訪問。該方法的另一個缺點是,更快的處理器可以以如此高的速率消耗指令,以致于獲取單元不能足夠快地預取LI高速緩存線,致使高速緩存未命中增加。為了克服該第二種問題,獲取單元可從L1.5高速緩存向前預取兩個LI高速緩存線,力圖在處理器訪問LI高速緩存線之前填充那些線。然而,如果有指向非序列性位置的支路,則處理器通常以引發(fā)兩個或更多個高速緩存未命中而結(jié)束,對于每條所執(zhí)行的支路,不是只一個高速緩存未命中,而是支路目標的前兩個高速緩存線的每一個都有一個高速緩存未命中。因此,高速緩存未命中增加,從而降低了總體性能。
如前述示出的,本領域中需要更優(yōu)化的方式來在具有多級指令高速緩存層級的系統(tǒng)中預取指令。發(fā)明內(nèi)容
本發(fā)明的一個實施例闡釋了用于預取高速緩存線的計算機實現(xiàn)的方法。獲取單元確定在第一高速緩存內(nèi)的存儲器位置。所述獲取單元生成偽隨機數(shù)。所述獲取單元隨后選擇在所述第一高速緩存內(nèi)的與所述存儲器位置和所述偽隨機數(shù)相關聯(lián)的第一高速緩存線。所述獲取單元在第二高速緩存內(nèi)的第一高速緩存線內(nèi)定位第一扇區(qū),其中所述第一扇區(qū)與在所述第一高速緩存內(nèi)的所述第一高速緩存線相對應。所述獲取單元隨后轉(zhuǎn)移所述第一扇區(qū)到在所述第一高速緩存內(nèi)的所述第一高速緩存線。
本公開技術(shù)的一個優(yōu)點是以這樣的方式從L1.5高速緩存轉(zhuǎn)移LI高速緩存線:指令LI高速緩存含有跟隨處理器的當前執(zhí)行點的多個LI高速緩存線。結(jié)果是指令LI高速緩存命中率得到改善,且獲取指令延遲減小,甚至在處理器以高速率消耗在指令LI高速緩存中的指令的情況下。
為了詳細地理解本發(fā)明的上述特征,對于以上簡要說明的發(fā)明,可以參照實施例進行更為具體的描述,其中一些實施例示出于附圖中。然而,應注意的是,附圖中示出的只是本發(fā)明的代表性實施例,因此不應被認為是對本發(fā)明的范圍的限制,本發(fā)明可以適用于其他同等有效的實施例。
圖1是示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機系統(tǒng)的框圖2是根據(jù)本發(fā)明一個實施例的、用于圖1的計算機系統(tǒng)的并行處理子系統(tǒng)的框圖3A是根據(jù)本發(fā)明一個實施例的圖2前端的框圖3B是根據(jù)本發(fā)明一個實施例的、圖2的一個并行處理單元內(nèi)的通用處理集群的框圖3C是根據(jù)本發(fā)明一個實施例的、圖3B的流多處理器的一部分的框圖4是根據(jù)本發(fā)明一個實施例的多級指令高速緩存的框圖5示出了根據(jù)本發(fā)明一個實施例的L1.5高速緩存的一部分;以及
圖6是根據(jù)本發(fā)明一個實施例的、用于從多級指令高速緩存預取指令的方法步驟 的流程圖。
具體實施方式
在下面的描述中,將闡述大量的詳細內(nèi)容以提供對本發(fā)明更深入的理解。然而,本技術(shù)領域的技術(shù)人員應該清楚,本發(fā)明可以在沒有一個或多個這些具體細節(jié)的情況下得以實施。
系統(tǒng)概述
圖1是示出了配置為實現(xiàn)本發(fā)明的一個或多個方面的計算機系統(tǒng)100的框圖。計算機系統(tǒng)100包括中央處理單元(CPU) 102和系統(tǒng)存儲器104,兩者經(jīng)由可包括存儲器橋105的互連路徑通信。存儲器橋105例如可以是北橋芯片,經(jīng)由總線或其他通信路徑106(例如,超傳輸鏈接)連接到I/O (輸入/輸出)橋107。I/O橋107例如可以是南橋芯片,從一個或多個用戶輸入設備108 (例如,鍵盤、鼠標)接收用戶輸入,并將該輸入經(jīng)由通信路徑106和存儲器橋105轉(zhuǎn)發(fā)至CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113(例如,外圍部件互連(PCI) Express、加速圖形端口或超傳輸鏈接)耦合至存儲器橋105 ;在一個實施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設備110 (例如,常規(guī)的基于陰極射線管或液晶顯示器的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114還連接到I/O橋107。開關116為I/O橋107和諸如網(wǎng)絡適配器118以及各種外插卡(add-1n card) 120和121的其他組件之間提供了連接。其他組件(未明確示出)也可以連接到I/O橋107,包括通用串行總線(USB)或其他端口連接、壓縮光盤(⑶)驅(qū)動器、數(shù)字視頻光盤(DVD)驅(qū)動器、膠片記錄設備等。圖1中所示的各種通信路徑,包括特別命名的通信路徑106和113,可以使用任何合適的協(xié)議來實現(xiàn),諸如PCI Express,AGP (加速圖形端口)、超傳輸或任何其他總線或點對點通信協(xié)議,并且不同設備之間的連接可以使用本領域已知的不同協(xié)議。
在一個實施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于圖形和視頻處理的電路,例如包括視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于通用處理的電路,同時保留底層的(underlying)計算架構(gòu),本文將進行更為詳細的描述。在又一個實施例中,并行處理子系統(tǒng)112可與一個或多個其他系統(tǒng)元件集成在單個子系統(tǒng)中,諸如連接存儲器橋105、CPU 102和I/O橋107,以形成片上系統(tǒng)(SoC)。
應理解的是,本文所示系統(tǒng)是例示性的,可以對其進行變形和修改??筛鶕?jù)需要修改連接拓撲結(jié)構(gòu),包括橋的數(shù)量和布置、CPU 102的數(shù)量以及并行處理子系統(tǒng)112的數(shù)量。例如,在一些實施例中,系統(tǒng)存儲器104直接連接到CPU 102而非通過橋連接,并且其他設備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代拓撲結(jié)構(gòu)中,并行處理子系統(tǒng)112連接到I/O橋107或者直接連接到CPU 102,而非連接到存儲器橋105。在又一些實施例中,I/o橋107和存儲器橋105可能被集成到單個芯片中而不是以一個或多個分立設備存在。大量實施例可包括兩個或更多CPU 102以及包括兩個或更多并行處理子系統(tǒng)112。本文所示特定部件是可選的;例如,任何數(shù)量的外插卡或外圍設備都可能得到支持。在一些實施例中,開關116被省去,并且網(wǎng)絡適配器118和外插卡120、121直接連接到I/O橋 107。
圖2示出了根據(jù)本發(fā)明一個實施例的并行處理子系統(tǒng)112。如圖所示,并行處理子系統(tǒng)112包括一個或多個并行處理單元(Pro)202,其每一個均耦合至本地并行處理(PP)存儲器204。一般來講,并行處理子系統(tǒng)包括U個PPU,其中US I。(本文中,相似對象的多個實體用標識該對象的參考數(shù)字并根據(jù)需要結(jié)合標識該實體的帶括號的數(shù)字加以表示)。PPU202和并行處理存儲器204可用一個或多個諸如可編程處理器、專用集成電路(ASIC)或存儲器器件這類集成電路器件來實現(xiàn),或者以任何其他在技術(shù)上可行的方式來實現(xiàn)。
再次參照圖1以及圖2,在一些實施例中,并行處理子系統(tǒng)112中的一些或所有PPU 202是具有渲染管線的圖形處理器,可以配置為執(zhí)行與下述各項相關的各種任務:由圖形數(shù)據(jù)生成像素數(shù)據(jù),所述圖形數(shù)據(jù)是由CPU 102和/或系統(tǒng)存儲器104經(jīng)由存儲器橋105和第二通信路徑113而供給的;與本地并行處理存儲器204 (可以作為圖形存儲器加以使用,包括例如常規(guī)的幀緩沖區(qū))交互,以存儲和更新像素數(shù)據(jù);將像素數(shù)據(jù)傳遞到顯示設備110 ;等等。在一些實施例中,并行處理子系統(tǒng)112可包括作為圖形處理器而操作的一個或多個PPU 202以及供通用計算使用的一個或多個其他PPU 202。這些PPU可相同或不同,并且每個PTO均可具有專用的并行處理存儲器器件或非專用并行處理存儲器器件。在并行處理系統(tǒng)112中的一個或多個PPU 202可向顯示設備110輸出數(shù)據(jù),或者在并行處理系統(tǒng)112中的每個PPU 202均可向一個或多個顯示設備110輸出數(shù)據(jù)。
操作中,CPU 102是計算機系統(tǒng)100的主處理器,控制并協(xié)調(diào)其他系統(tǒng)部件的操作。具體來講,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實施例中,CPU 102將針對每個PPU 202的命令流寫入到數(shù)據(jù)結(jié)構(gòu)(圖1和圖2中均未明確示出),所述數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204或者可由CPU 102和PPU 202訪問的另一個存儲位置中。對入棧緩沖區(qū)(pushbuffer)寫入指向每個數(shù)據(jù)結(jié)構(gòu)的指針來開始數(shù)據(jù)結(jié)構(gòu)中命令流的處理。PPU 202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令。執(zhí)行優(yōu)先級可經(jīng)由設備驅(qū)動程序103由應用程序為每個入棧緩沖區(qū)指定,以控制不同入棧緩沖區(qū)的調(diào)度。
現(xiàn)在返回參照圖2以及圖1,每個PPU 202均包括I/O (輸入/輸出)單元205,該I/o單元205經(jīng)由通信路徑113與計算機系統(tǒng)100的其余部分通信,其連接到存儲器橋105(或者,在一個替代實施例中,直接連接到CPU 102)。PPU 202到計算機系統(tǒng)100的其余部分的連接也可以變化。在一些實施例中,并行處理子系統(tǒng)112被實現(xiàn)為可以被插入到計算機系統(tǒng)100的擴展槽中的外插卡。在另一些實施例中,PPU 202可以被集成在具有諸如存儲器橋105或I/O橋107這類總線橋的單個芯片上。在又一些實施例中,PPU 202中的一些或全部元件可被集成在具有CPU 102的單個芯片上。
在一個實施例中,通信路徑113是PCI Express鏈接,其中給每個PPU202分配有專用通道(lane),如本領域已知的。也可使用其他通信路徑。I/O單元205生成數(shù)據(jù)包(或其他信號)用于在通信路徑113上傳輸,并且也從通信路徑113接收所有傳入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引向PPU 202的適當部件。例如,可將與處理任務相關的命令引向主機接口 206,而可將與存儲器操作相關的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引向存儲器交叉開關(crossbar)單元210。主機接口 206對每個入棧緩沖區(qū)進行讀取并將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。
每個PPU 202均有利地實現(xiàn)高度并行的處理架構(gòu)。如圖中詳細所示,PPU 202(0)包括處理集群陣列230, 該陣列包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC208均能夠并發(fā)執(zhí)行大量(例如,數(shù)百個或數(shù)千個)線程,其中每個線程均為程序的實例(instance)。在各種應用中,可分配不同的GPC 208,用于處理不同類型的程序或用于執(zhí)行不同類型的計算。GPC 208的分配可依據(jù)每個類型的程序或計算產(chǎn)生的工作量而不同。
GPC 208從在任務/工作單元207內(nèi)的工作分布單元接收將要執(zhí)行的處理任務。工作分布單元接收指向被編碼為任務元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務的指針。指向TMD的指針被包括在命令流中,所述命令流被存儲為入棧緩沖區(qū)并由前端單元212從主機接口 206接收??删幋a為TMD的處理任務包括將要處理的數(shù)據(jù)的索引以及定義將如何處理數(shù)據(jù)(例如,將執(zhí)行什么程序)的命令和狀態(tài)參數(shù)。任務/工作單元207從前端212接收任務并保證GPC 208在由每一個TMD所指定的處理開始前被配置為有效狀態(tài)??蔀橛脕碚{(diào)度處理任務的執(zhí)行的每個TMD指定優(yōu)先級。還可從處理集群陣列230接收處理任務。可選地,TMD可包括參數(shù),其控制TMD是否針對處理任務列表(或指向處理任務的指針列表)添加到首部或尾部,從而在優(yōu)先級之上提供另一級控制。
存儲器接口 214包括D個分區(qū)單元215,這些分區(qū)單元每一個均直接耦合至并行處理存儲器204的一部分,其中D > I。如圖所示,分區(qū)單元215的數(shù)量通常等于動態(tài)隨機存取存儲器(DRAM) 220的數(shù)量。在另一些實施例中,分區(qū)單元215的數(shù)量可以不等于存儲器器件的數(shù)量。本領域的普通技術(shù)人員將認識到,DRAM 220可用其他合適的存儲器件代替,并且可以采用一般常規(guī)設計。因此省略詳細描述??煽鏒RAM 220來存儲諸如幀緩沖區(qū)或紋理映射這樣的渲染對象,允許分區(qū)單元215并行地寫入每個渲染對象的一部分,以高效地使用并行處理存儲器204的可用帶寬。
GPC 208中的任何一個都可處理將被寫入并行處理存儲器204內(nèi)任何DRAM 220的數(shù)據(jù)。交叉開關單元210配置為將每個GPC 208的輸出路由(route)至任一分區(qū)單元215的輸入或路由至另一 GPC 208,用于進一步處理。GPC 208通過交叉開關單元210與存儲器接口 214通信,以對各種外部存儲器器件進行讀寫。在一個實施例中,交叉開關單元210具有至存儲器接口 214的連接以與I/O單元205通信,以及至本地并行處理存儲器204的連接從而使不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或相對于PPU 202來講非本地的其他存儲器通信。在圖2所示實施例中,交叉開關單元210與I/O單元205直接相連接。交叉開關單元210可使用虛擬信道在GPC 208和分區(qū)單元215之間分割業(yè)務(traffic)流。
再者,GPC 208可以編程為執(zhí)行與種類繁多的應用相關的處理任務,包括但不限于線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)的過濾、建模操作(例如,運用物理定律確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細分著色、頂點著色、幾何著色和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204轉(zhuǎn)移到內(nèi)部(片上)存儲器中,對數(shù)據(jù)進行處理,并將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,在這里這類數(shù)據(jù)可以由其他系統(tǒng)部件訪問,包括CPU 102或另一并行處理子系統(tǒng)112。
PPU 202可設置具有任何容量(amount)的本地并行處理存儲器204,包括不設置本地存儲器,并且可以任何組合方式來使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實施例中,PPU 202可以是圖形處理器。在這樣的實施例中,將會提供極少的甚至不提供專用圖形(并行處理)存儲器,并且PPU 202將以排他的方式或者幾乎以排他的方式使用系統(tǒng)存儲器。在UMA實施例中,PPU 202可被集成到橋式芯片或處理器芯片中,或者可被提供為具有高速鏈接(例如,PCI EXPRESS)的分立芯片,所述高速鏈接經(jīng)由橋式芯片或其他通信裝置將PPU 202連接到系統(tǒng)存儲器。如上所述,并行處理子系統(tǒng)112中可以包括有任何數(shù)量的PPU 202。例如,多個PPU202可以被設置在單個外插卡上,或者多個外插卡可以連接到通信路徑113,或者PPU 202中的一個或多個可以被集成到橋式芯片中。多PPU系統(tǒng)中的PPU 202可彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等。當存在有多個PPU 202時,可以并行地操作這些PPU從而以高于單個PPU 202可能達到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來加以實現(xiàn),包括桌上型電腦、膝上型電腦或者手持式個人計算機、服務器、工作站、游戲控制臺、嵌入式系統(tǒng)等。多個并發(fā)任務調(diào)度多處理任務可在GPC 208上并發(fā)執(zhí)行,并且處理任務可在執(zhí)行期間生成一個或多個“子”處理任務。任務/工作單元207接收任務并動態(tài)調(diào)度處理任務和子處理任務用于由GPC 208執(zhí)行。圖3A是根據(jù)本發(fā)明的一個實施例的、圖2的任務/工作單元207的框圖。任務/工作單元207包括任務管理單元300和工作分布單元340。任務管理單元300基于執(zhí)行優(yōu)先級組織將要調(diào)度的任務。對于每個優(yōu)先級,任務管理單元300都存儲指向與在調(diào)度器表321中的任務相對應的TMD 322的指針的列表,其中列表可以以鏈接列表來實現(xiàn)。TMD 322可存儲在PP存儲器204或系統(tǒng)存儲器104中。任務管理單元300接受任務并在調(diào)度器表321中存儲任務的速率與任務管理單元300調(diào)度任務用于執(zhí)行的速率解耦。因此,任務管理單元300可在調(diào)度任務之前收集若干任務。被收集的任務可隨后基于優(yōu)先級信息或使用其他技術(shù)諸如循環(huán)(round-robin)調(diào)度來進行調(diào)度。工作分布單元340包括具有槽的任務表345,所述槽可各自被TMD 322占用,用于正在執(zhí)行的任務。當任務表345中有自由槽時,任務管理單元300可調(diào)度任務用于執(zhí)行。當沒有自由槽時,未占用槽的高優(yōu)先級任務可驅(qū)逐占用槽的低優(yōu)先級任務。當任務被驅(qū)逐時,該任務停止,并且如果該任務的執(zhí)行未完成,那么指向該任務的指針被添加到將要調(diào)度的任務指針列表,以使任務的執(zhí)行將在稍后的時間恢復。當子處理任務被生成時,在任務執(zhí)行期間,指向子任務的指針被添加到將要調(diào)度的任務指針列表。子任務可由在處理集群陣列230中執(zhí)行的TMD 322生成。不同于由任務/工作單元207從前端212接收的任務,子任務從處理集群陣列230所接收。子任務不插入入棧緩沖區(qū)或傳輸至前端。當生成子任務或針對子任務的數(shù)據(jù)存儲在存儲器中時,不通知CPU 102。通過入棧緩沖區(qū)所提供的任務和子任務之間的另一個不同是,通過入棧緩沖區(qū)所提供的任務是由應用程序所定義的,而子任務是在任務執(zhí)行期間動態(tài)生成的。任務處理概述圖3B是根據(jù)本發(fā)明一個實施例的、圖2的一個PPU 202內(nèi)的GPC 208的框圖。每個GPC 208均可被配置為并行地執(zhí)行大量線程,其中術(shù)語“線程”是指對特定的一組輸入數(shù)據(jù)執(zhí)行的特定程序的實例。在一些實施例中,采用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術(shù)來支持大量線程的并行執(zhí)行,而無需提供多個獨立指令單元。在另一些實施例中,采用單指令多線程(SMT)技術(shù),使用被配置為發(fā)送指令到每一個GPC 208內(nèi)一組處理引擎的公共指令單元,來支持大量通常同步化的線程的并行執(zhí)行。不同于其中所有處理引擎一般都執(zhí)行相同指令的SMD執(zhí)行機制,SIMT執(zhí)行允許不同的線程更容易跟隨(follow)通過給定線程程序的發(fā)散的執(zhí)行路徑。本領域的普通技術(shù)人員將理解的是,SMD處理機制代表SMT處理機制的功能子集。經(jīng)由管線管理器305來有利地控制GPC 208的操作,所述管線管理器305將處理任務分布到流多處理器(SM) 310。管線管理器305也可配置為通過為由SM 310輸出的處理后的數(shù)據(jù)指定目的地來控制工作分布交叉開關330。在一個實施例中,每個GPC 208均包括M個SM 310,其中M彡I,每個SM 310均配置為處理一個或多個線程組。而且,每個SM 310還最好包括同樣的一組可被管線化的功能執(zhí)行單元(例如,執(zhí)行單元和加載-存儲單元等,如圖3C中的Exec單元302和LSU 303所示),從而允許在前一個指令結(jié)束之前發(fā)送新的指令,如本領域所已公知的??商峁┕δ軋?zhí)行單元的任何組合。在一個實施例中,這些功能單元支持多種運算,包括整數(shù)和浮點算法(例如,加法和乘法)、比較運算、布爾運算(AND、OR、X0R)、移位以及各種代數(shù)函數(shù)的計算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可均衡地用于(beleveraged to)實施不同操作。傳輸?shù)教囟℅PC 208的指令序列構(gòu)成線程,如本文前面所定義的,并且跨SM 310內(nèi)并行處理引擎(未示出)的一定數(shù)量并發(fā)執(zhí)行的線程的集合在本文中被稱為“卷繞包(warp)”或“線程組”。如本文所使用的,“線程組”是指對不同的輸入數(shù)據(jù)并發(fā)執(zhí)行同一程序的一組線程,且該組中有一個線程被分配給SM 310內(nèi)不同的處理引擎。線程組可包括比SM 310內(nèi)處理引擎的數(shù)量少的線 程,在此情況下,在正在處理該線程組的周期內(nèi),一些處理引擎將處于空閑狀態(tài)。線程組也可包括比SM 310內(nèi)處理引擎的數(shù)量多的線程,在此情況下,處理將在連續(xù)的時鐘周期上進行。由于每個SM 310均可以支持多達G個線程組并發(fā)執(zhí)行,所以在任一給定時間都可以允許多達GXM個線程組在GPC 208中執(zhí)行。另外,在SM 310內(nèi),多個相關的線程組可同時處于激活狀態(tài)(處于不同執(zhí)行階段)。這種線程組的集合在本文中被稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于mXk,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SM 310內(nèi)并行處理引擎的數(shù)量的整數(shù)倍,m是SM 310內(nèi)同時處于激活狀態(tài)的線程組的數(shù)量。CTA的大小通常由編程人員和CTA可用的硬件資源例如存儲器或寄存器的容量決定。每個SM 310均包括一級(LI)高速緩存(圖3C中示出),或使用在SM 310之外的相應LI高速緩存中用以執(zhí)行加載和存儲操作的空間。每個SM 310也均有權(quán)訪問在所有GPC208之間共享的二級(L2)高速緩存,并且可用于在線程之間轉(zhuǎn)移數(shù)據(jù)。最后,SM 310也有權(quán)訪問片外“全局”存儲器,該存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應予以理解的是,PPU 202外部的任何存儲器都可被用作全局存儲器。此外,一點五級(L1.5)高速緩存335可被包括在GPC 208之內(nèi),配置為經(jīng)由存儲器接口 214來接收和保持從存儲器中所獲取的、SM 310所請求的數(shù)據(jù),包括指令、一致性(uniform)數(shù)據(jù)以及常數(shù)數(shù)據(jù),以及向SM 310提供所請求的數(shù)據(jù)。在GPC 208中具有多個SM 310的實施例有利地共享被高速緩存于L1.5高速緩存335中的公共指令和數(shù)據(jù)。每個GPC 208均可包括存儲器管理單元(MMU) 328,該單元配置為將虛擬地址映射到物理地址。在其他實施例中,MMU 328可駐留在存儲器接口 214內(nèi)。MMU 328包括一組頁表條目(PTE)以及可選地包括高速緩存線索引,該組PTE用于將虛擬地址映射到像素塊(tile)的物理地址。MMU 328可包括地址轉(zhuǎn)譯后備緩沖區(qū)(translation lookasidebuffer, TLB)或高速緩存,其可駐留在多處理器SM 310或LI高速緩存或GPC 208內(nèi)。物理地址被處理為分布表面數(shù)據(jù)訪問位置以允許在分區(qū)單元215之間交錯的高效請求。高速緩存線索引可用于確定對于高速緩存線的請求是否命中或未命中。在圖形和計算應用中,GPC 208可配置為使得每個SM 310均耦合至紋理單元315,用于執(zhí)行紋理映射操作,例如,確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。紋理數(shù)據(jù)是從內(nèi)部紋理LI高速緩存(未示出)讀取的,或者在一些實施例中是從SM 310內(nèi)的LI高速緩存讀取的,并且根據(jù)需要從在所有GPC208、并行處理存儲器204或系統(tǒng)存儲器104之間共享的L2高速緩存所獲取。每個SM 310均將處理后的任務輸出到工作分布交叉開關330,以便將處理后的任務提供到另一 GPC 208用于進一步處理,或者經(jīng)由交叉開關單元210將處理后的任務存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中。preROP(pre-raster operations,預光柵操作)325配置為從SM 310接收數(shù)據(jù),將數(shù)據(jù)引向分區(qū)單元215內(nèi)的ROP單元,并實施對色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及執(zhí)行地址轉(zhuǎn)譯。應予以理解的是,本文所描述的內(nèi)核架構(gòu)是例示性的,可以對其進行各種變形和修改。GPC 208內(nèi)可包含有任何數(shù)量的處理單元,例如,SM 310或紋理單元315、preROP325。此外,如圖2中所示,PPU 202可包含任何數(shù)量的GPC 208,這些GPC 208最好在功能上彼此相似,以使執(zhí)行行為不依賴于接收具體處理任務的GPC 208。此外,每個GPC 208最好使用單獨的且各異的處理單元、LI高速緩存等,相對于其他GPC 208獨立地操作,以針對一個或多個應用程序執(zhí)行任務。本領域普通技術(shù)人員應理解的是,圖1、2、3A和3B中所描述的架構(gòu)決非限制本發(fā)明的范圍,并且在不脫離本發(fā)明的范圍的情況下,本文所教導的技術(shù)可在任何適當配置的處理單元上實現(xiàn),這些處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或?qū)S锰幚韱卧?。在本發(fā)明的實施例中,所期望的是,用PPU 202或計算系統(tǒng)的其他處理器使用線程陣列來執(zhí)行通用計算。給線程陣列中的每個線程分配唯一的線程標識符(“線程ID”),所述線程標識符在線程執(zhí)行期間可由該線程訪問。線程ID可以被定義為一維或多維數(shù)值,控制線程的處理行為的各個方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集中哪個部分和/或確定線程將要生成或?qū)懭胼敵鰯?shù)據(jù)集中的哪個部分。每線程的指令序列均可包含至少一個指令,所述至少一個指令定義線程陣列中代表性線程和一個或多個其他線程之間的協(xié)作行為。例如,每線程的指令序列可能包含下列指令:指示在序列中的特定點處暫停執(zhí)行代表性線程的操作直至一個或多個其他線程到達該特定點時為止的指令;指示代表性線程將數(shù)據(jù)存儲在一個或多個其他線程有權(quán)訪問的共享存儲器中的指令;指示代表性線程原子地讀取和更新存儲在共享存儲器中的數(shù)據(jù)的指令,一個或多個其他線程基于它們的線程ID有權(quán)訪問所述共享存儲器;等等。CTA程序也可以包含計算將從中讀取數(shù)據(jù)的共享存儲器中的地址的指令,其中地址為線程ID的函數(shù)。通過定義合適的功能并提供同步技術(shù),可以以可預測的方式通過CTA的一個線程將數(shù)據(jù)寫入到共享存儲器中的給定位置,并且通過同一 CTA的不同線程從該位置讀取出來。因此,線程之間任何期望模式的數(shù)據(jù)共享都可以得到支持,并且CTA中的任何線程都可以與同一 CTA中的任何其他線程共享數(shù)據(jù)。CTA的線程之間如果存在數(shù)據(jù)共享,則數(shù)據(jù)共享的程度由CTA程序決定;因而,應予以理解的是,在使用CTA的具體應用中,取決于CTA程序,CTA的線程實際上可能彼此共享或者不共享數(shù)據(jù),并且術(shù)語“CTA”和“線程陣列”在本文中具有相同含義。圖3C為根據(jù)本發(fā)明的一個實施例的、圖3B的SM 310的框圖。該SM310包括指令LI高速緩存370,其配置為經(jīng)由L1.5高速緩存335從存儲器接收指令和常數(shù)。Warp調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常數(shù),并且根據(jù)該指令和常數(shù)來控制本地寄存器堆304和SM 310功能單元。SM 310功能單元包括N個exec (執(zhí)行或處理)單元302以及P個加載-存儲單元(LSU) 303。SM 310提供具有不同可訪問級別的片上(內(nèi)部)數(shù)據(jù)存儲。專用寄存器(未示出)對于LSU 303可讀但不可寫,并用于存儲定義每個CTA線程的“位置”的參數(shù)。在一個實施例中,專用寄存器包括每線程(或SM 310內(nèi)每exec單元302)—個的存儲線程ID的寄存器;每個線程ID寄存器均僅可由各自的一個exec單元302所訪問。專用寄存器還可以包括附加寄存器,其對于執(zhí)行TMD 322所代表的同一處理任務的所有線程(或由所有LSU 303)可讀,所述附加寄存器存儲CTA標識符、CTA維度、CTA所屬的柵格(grid)的維度(或隊列位置,如果TMD 322對隊列任務而不是柵格任務進行編碼的話)以及將CTA分配給其的TMD 322的標識符。如果TMD 322是柵格TMD,那么TMD 322的執(zhí)行致使將要啟動和執(zhí)行的固定數(shù)目的CTA來處理被存儲在隊列525中的固定容量的數(shù)據(jù)。CTA的數(shù)目被指定為柵格寬度、高度和深度的乘積。固定容量的數(shù)據(jù)可存儲在TMD 322中或者TMD 322可存儲將通過CTA處理的指向數(shù)據(jù)的指針。TMD 322也存儲由CTA執(zhí)行的程序的起始地址。如果TMD 322是隊列TMD,那么TMD 322的隊列特征被使用,意味著將要處理的數(shù)據(jù)的容量不必是固定的。隊列條目存儲數(shù)據(jù),用于由分配給TMD 322的CTA處理。隊列條目還可代表在線程執(zhí)行期間由另一個TMD 322生成的子任務,從而提供嵌套的并行性。一般地,線程或包括線程的CTA的執(zhí)行被暫停,直到子任務的執(zhí)行完成。隊列可存儲在TMD 322中或脫離TMD 322單獨存儲,在這種情況下TMD 322存儲指向隊列的隊列指針。有利地,當代表子任務的TMD 322正在執(zhí)行時,由子任務生成的數(shù)據(jù)可寫入隊列。隊列可被實現(xiàn)為循環(huán)隊列以便于數(shù)據(jù)的總?cè)萘坎槐魂犃械拇笮∷拗?。屬于柵格的CTA具有指示在柵格內(nèi)的各自CTA的位置的隱性柵格寬度、高度和深度參數(shù)。專用寄存器在初始化期間響應經(jīng)由前端212從設備驅(qū)動程序103接收的命令被寫入,并且在處理任務的執(zhí)行期間不改變。前端212調(diào)度每個處理任務用于執(zhí)行。每個CTA都與用于一個或多個任務的并發(fā)執(zhí)行的特定TMD 322相關聯(lián)。另外,單個GPC 208可并發(fā)執(zhí)行多個任務。參數(shù)存儲器(未示出)存儲運行時間參數(shù)(常數(shù)),這些參數(shù)可由在同一 CTA內(nèi)的任意線程(或任意LSU 303)讀取但不可由其寫入。在一個實施例中,設備驅(qū)動程序103在指引SM 310開始執(zhí)行使用這些參數(shù)的任務之前將這些參數(shù)提供給參數(shù)存儲器。任意CTA(或者SM 310內(nèi)的任意exec單元302)內(nèi)的任意線程均可以通過存儲器接口 214訪問全局存儲器。該全局存儲器的一部分可被存儲在LI高速緩存320中。
每個線程均可使用本地寄存器堆304作為臨時空間(scratch space);每個寄存器均被分配用于一個線程的排他性使用,并且任何本地寄存器堆304中的數(shù)據(jù)均只可由其被分配給的線程所訪問。本地寄存器堆304可實現(xiàn)為在物理上或邏輯上劃分為P個通道(lane)的寄存器堆,每個通道均具有某一數(shù)量的條目(其中每個條目可能存儲例如32位字)。給N個exec單元302和P個加載-存儲單元LSU 303中的每一個分配一個通道,并且不同通道中對應的條目可以填充有供執(zhí)行同一程序的不同線程使用的數(shù)據(jù),以利于SMD執(zhí)行??梢詫⑦@些通道的不同部分分配給G個并發(fā)線程組中的不同的線程組,以使本地寄存器堆304中的給定條目只可由特定線程訪問。在一個實施例中,本地寄存器堆304內(nèi)的某些條目被保留用于存儲線程標識符,實現(xiàn)專用寄存器之一。另外,一致性LI高速緩存375為N個exec單元302和P個加載-存儲單元LSU 303的每個通道存儲一致性或常數(shù)值。在單個CTA內(nèi)的線程可訪問共享存儲器306 ;換句話說,共享存儲器306中的任意位置均可由同一 CTA內(nèi)的任意線程(或由SM 310內(nèi)任意處理引擎)所訪問。共享存儲器306也可被實現(xiàn)為具有互連的共享片上高速緩存存儲器或共享寄存器堆,允許任意處理引擎對該共享存儲器中任意位置進行讀寫。在其他一些實施例中,共享的狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)域上,并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以被實現(xiàn)為在同一共享寄存器堆內(nèi)或者在實現(xiàn)了共享存儲器306的共享高速緩存存儲器內(nèi)的指定扇區(qū)(section),或者被實現(xiàn)為LSU 303只能以只讀方式訪問的單獨的共享寄存器堆或片上高速緩存存儲器。在一個實施例中,也可使用實現(xiàn)參數(shù)存儲器的區(qū)域來存儲CTA ID和任務ID,以及CTA和柵格維度或隊列位置,從而實現(xiàn)專用寄存器的一部分。在SM 310中的每個LSU 303都耦合到統(tǒng)一地址映射單元352,其將為在統(tǒng)一存儲器空間中指定的加載和存儲指令所提供的地址轉(zhuǎn)換為在每個各異的存儲器空間中的地址。因此,指令可用來通過在統(tǒng)一存儲器空間中指定地址來訪問任意本地、共享或全局存儲器空間??梢允褂妹總€SM 310中的LI高速緩存320來高速緩存私有的每線程的本地數(shù)據(jù)以及每應用程序的全局數(shù)據(jù)。在一些實施例中,每CTA的共享數(shù)據(jù)可以在LI高速緩存320中被高速緩存。LSU 303經(jīng)由存儲器和高速緩存的互連380耦合到共享存儲器306以及LI高速緩存320。多級指令高速緩存中的指令預取圖4是根據(jù)本發(fā)明的一個實施例的、多級指令高速緩存的框圖。如圖所示,多級指令高速緩存包括指令LI高速緩存370、SM 310、L1.5高速緩存335、GPC 208、獲取單元410、MMU 328、L2高速緩存420以及系統(tǒng)存儲器104。指令LI高速緩存370配置為接收由SM 310內(nèi)的處理器所訪問的指令。眾所周知,當處理器能夠從指令LI高速緩存370獲取指令時,性能增強。獲取單元410將高速緩存線從更高的高速緩存級別或從系統(tǒng)存儲器104轉(zhuǎn)移到指令LI高速緩存370和L1.5高速緩存335中。如果由處理器所訪問的下一個指令未駐留在指令LI高速緩存370中,那么該情況構(gòu)成高速緩存未命中,并且獲取單元410從更高的高速緩存級別或從系統(tǒng)存儲器104來獲取指令。一旦找到包含指令的高速緩存線,則獲取單元410轉(zhuǎn)移該高速緩存線到指令LI高速緩存370,并且處理器執(zhí)行所檢索的指令。然而,如果由處理器所訪問的下一個指令駐留在指令LI高速緩存370中,那么該情況構(gòu)成高速緩存命中,并且處理器從指令LI高速緩存370檢索所訪問的指令。在這種情況下,指令并非從更高的高速緩存級別獲取,而是獲取單元410可以啟動“預取”操作來將預取的高速緩存線轉(zhuǎn)移到指令LI高速緩存370中。這種預取操作是可期望的,因為獲取單元410轉(zhuǎn)移高速緩存線到指令LI高速緩存370,其具有在處理器實際訪問那些高速緩存線的時間前被訪問的高概率。結(jié)果,減少了高速緩存未命中,并且處理器性能相應地得到改善。GPC 208內(nèi)的L1.5高速緩存335配置為接收和保持經(jīng)由MMU 328獲取的指令、一致性數(shù)據(jù)和常數(shù)數(shù)據(jù)。當獲取單元410執(zhí)行獲取操作或預取操作時,獲取單元410首先嘗試從L1.5高速緩存335線內(nèi)的扇區(qū)中檢索期望的LI高速緩存線。扇區(qū)是對應于指令LI高速緩存370線的L1.5高速緩存335線的細分部分。在L1.5高速緩存335命中的情況下,獲取單元410從L1.5高速緩存335向指令LI高速緩存370轉(zhuǎn)移期望的高速緩存線。在L1.5高速緩存335未命中的情況下,獲取單元410向MMU 328啟動請求來從L2高速緩存420或(在L2高速緩存未命中的情況下)從系統(tǒng)存儲器104檢索高速緩存線。此外,獲取單元410最好從L1.5高速緩存335預取高速緩存線,以便增加在處理器從系統(tǒng)存儲器104請求指令之前,由處理器所訪問的指令駐留在指令LI高速緩存370中的概率。例如,如果處理器正在執(zhí)行指令LI高速緩存370中的當前高速緩存線內(nèi)的指令,那么獲取單元410預取緊跟隨當前高速緩存線的高速緩存線。在某些條件下,獲取單元410預取跟隨當前高速緩存線的多個高速緩存線。將要預取的高速緩存線的數(shù)量,此外還是處理器的速度、在SM310中執(zhí)行的線程組的數(shù)量、在每個指令LI高速緩存370線和L1.5高速緩存335線中的指令的數(shù)量和對于L1.5高速緩存335命中和L1.5高速緩存335未命中的延遲的函數(shù)。獲取單元410在任意給定的預取操作中轉(zhuǎn)移多個高速緩存線中的一個。在給定的預取操作中的將被轉(zhuǎn)移的高速緩存線稱為“預取目標”。獲取單元410根據(jù)某一概率函數(shù)從多個高速緩存線中隨機選擇預取目標。經(jīng)過若干預取操作的時間,獲取單元410能夠轉(zhuǎn)移多個高速緩存線到指令LI高速緩存370。此外,在L1.5高速緩存335命中延遲和L1.5高速緩存335未命中延遲之間有顯著差異的情況下,獲取單元410還可針對下一個L1.5高速緩存335線觸發(fā)提前預取操作。圖5示出了根據(jù)本發(fā)明的一個實施例的,L1.5高速緩存335的一部分。如圖所示,L1.5高速緩存335包括L1.5高速緩存線O 510、L1.5線O扇區(qū)512、L1.5高速緩存線I 520 和 L1.5 線 I 扇區(qū) 522。L1.5高速緩存線O 510代表L1.5高速緩存335內(nèi)的典型的高速緩存線。當針對指令LI高速緩存370所嘗試的獲取操作或預取操作導致高速緩存未命中時,SM 310內(nèi)的獲取單元410進行確定,在這種情況下,獲取單元410在L1.5高速緩存中尋找被訪問的指令。如果指令位于與L1.5高速緩存線O 510內(nèi)的位置相對應的地址處,那么獲取單元410確定轉(zhuǎn)移L1.5高速緩存線O 510的哪個部分到指令LI高速緩存370。L1.5線O扇區(qū)512是L1.5高速緩存線O 510的細分部分(扇區(qū)),其中每個細分部分(扇區(qū))一般都是指令LI高速緩存370線的大小。當獲取單元410針對駐留在L1.5高速緩存線O 510內(nèi)的高速緩存線而啟動獲取操作或預取操作時,該獲取單元410確定所訪問的指令駐留在哪個L1.5線O扇區(qū)512中。隨后該獲取單元410將L1.5線O扇區(qū)512轉(zhuǎn)移到指令LI高速緩存370。扇區(qū)按照地址連續(xù)地增加的順序排列,其中L1.5線O扇區(qū)I 512
(I)跟隨L1.5線O扇區(qū)O 512 (0),依次L1.5線O扇區(qū)2 512 (2)跟隨L1.5線O扇區(qū)I512 (1),諸如此類。
L1.5高速緩存線I 520代表L1.5高速緩存335內(nèi)的與緊跟隨L1.5高速緩存線O510的存儲器位置相對應的另一個典型的高速緩存線。L1.5高速緩存線I 520同樣被細分為扇區(qū),使得L1.5線I的扇區(qū)O 522 (O)緊跟隨L1.5線O的扇區(qū)3 512 (3)、L1.5線I的扇區(qū)I 522 (I)緊跟隨L1.5線I的扇區(qū)O 522 (0),諸如此類。在預取操作期間,獲取單元410確定發(fā)送L1.5高速緩存335內(nèi)的哪個扇區(qū)到指令LI高速緩存370。該扇區(qū)在本文被稱為“預取目標”。獲取單元410選擇預取目標作為兩個值的函數(shù)。第一值是隨機數(shù)或表面隨機數(shù),諸如由偽隨機數(shù)生成器(未示出)所生成的。隨機數(shù)用來選擇在當前預取操作中轉(zhuǎn)移多個指令LI高速緩存370線(如由L1.5高速緩存335內(nèi)的相應扇區(qū)所代表的)中的哪一個。隨機數(shù)被設計為根據(jù)某一概率函數(shù)來選擇多個指令LI高速緩存線中的一個。第二值是當前指令LI高速緩存370線的L1.5高速緩存335內(nèi)的扇區(qū)位置。當當前指令LI高速緩存370線來自于相應的L1.5高速緩存335線的扇區(qū)O時,獲取單元410最好針對隨機數(shù)的至少一些值來選擇在下一個L1.5高速緩存335線中的預取目標。在一個示例中,每個指令LI高速緩存370線均可包括64個字節(jié),包含每個指令8字節(jié)的8個指令。每個L1.5高速緩存335線可包括256字節(jié),包含每個指令8字節(jié)的32個指令。在這種情況下,L1.5高速緩存335線是指令LI高速緩存370線的4倍大。每個L1.5高速緩存335線分為四個扇區(qū),其中每個扇區(qū)是一個指令LI高速緩存370線的大小。進一步地,在該示例中,在指令LI高速緩存370維護當前處理器的指令地址向前兩個高速緩存線時,處理器可達到期望的性能水平。獲取單元410根據(jù)某一概率函數(shù)而隨機地轉(zhuǎn)移高速緩存線,所述高速緩存線是向前一個或兩個指令LI高速緩存370線(即向前一個或兩個L1.5高速緩存335扇區(qū))??蓪崿F(xiàn)下面表I中闡釋的偏移,來確定相對于當前指令的存儲器位置的預取目標: 表I
權(quán)利要求
1.一種用于預取高速緩存線的計算機實現(xiàn)的方法,所述方法包括: 確定在第一高速緩存內(nèi)的存儲器位置; 生成偽隨機數(shù); 選擇在所述第一高速緩存內(nèi)的與所述存儲器位置和所述偽隨機數(shù)相關聯(lián)的第一高速緩存線; 在第二高速緩存內(nèi)的第一高速緩存線內(nèi)定位第一扇區(qū),其中所述第一扇區(qū)與在所述第一高速緩存內(nèi)的所述第一高速緩存線相對應;以及 轉(zhuǎn)移所述第一扇區(qū)到在所述第一高速緩存內(nèi)的所述第一高速緩存線。
2.一種用于預取高速緩存線的子系統(tǒng),包括: 獲取單元,其配置為: 確定在第一高速緩存內(nèi)的存儲器位置; 生成偽隨機數(shù); 選擇在所述第一高速緩存內(nèi)的與所述存儲器位置和所述偽隨機數(shù)相關聯(lián)的第一高速緩存線; 在第二高速緩存內(nèi)的第一高速緩存線內(nèi)定位第一扇區(qū),其中所述第一扇區(qū)與在所述第一高速緩存內(nèi)的所述第一高速緩存線相對應;以及 轉(zhuǎn)移所述第一扇區(qū)到在所述第一高速緩存內(nèi)的所述第一高速緩存線。
3.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述第一高速緩存包括指令高速緩存。
4.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中在所述第一高速緩存內(nèi)的所述第一高速緩存線中的所述存儲器位置與在所述第二高速緩存內(nèi)的第二扇區(qū)相關聯(lián),并且其中在所述偽隨機數(shù)是第一值的情況下,所述第一扇區(qū)和所述第二扇區(qū)之間的距離為一個扇區(qū);在所述偽隨機數(shù)是第二值并且所述第二扇區(qū)在所述第二高速緩存內(nèi)的第一位置中的情況下,為兩個扇區(qū);以及在所述偽隨機數(shù)是所述第二值并且所述第二扇區(qū)在所述第二高速緩存內(nèi)的第二位置中的情況下,為六個扇區(qū)。
5.根據(jù)權(quán)利要求4所述的子系統(tǒng),其中所述第二扇區(qū)在與在所述第二高速緩存內(nèi)的所述第一高速緩存線不同的所述第二高速緩存內(nèi)的第二高速緩存線內(nèi)。
6.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中在所述第二高速緩存內(nèi)的所述第一高速緩存線內(nèi)的每個扇區(qū)在大小 上均與在所述第一高速緩存內(nèi)的所述第一高速緩存線相等。
7.根據(jù)權(quán)利要求6所述的子系統(tǒng),其中在所述第二高速緩存內(nèi)的每個高速緩存線均包括四個扇區(qū)。
8.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述獲取單元進一步配置為: 確定所述第一扇區(qū)不在所述第一高速緩存內(nèi)的所述第一高速緩存線和所述第二高速緩存內(nèi)的所述第一高速緩存線內(nèi); 在第三高速緩存內(nèi)的第一高速緩存線內(nèi)定位所述第一扇區(qū);以及使所述第一扇區(qū)從在所述第三高速緩存內(nèi)的所述第一高速緩存線轉(zhuǎn)移到在所述第一高速緩存內(nèi)的所述第一高速緩存線。
9.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述第一高速緩存和所述第二高速緩存共享共同的獲取單元。
10.一種計算設備,包括:子系統(tǒng),其包括獲取單元,配置為: 確定在第一高速緩存內(nèi)的存儲器位置; 生成偽隨機數(shù); 選擇在所述第一高速緩存內(nèi)的與所述存儲器位置和所述偽隨機數(shù)相關聯(lián)的第一高速緩存線; 在第二高速緩存內(nèi)的第一高速緩存線內(nèi)定位第一扇區(qū),其中所述第一扇區(qū)與在所述第一高速緩存內(nèi)的所述第一高速緩存線相對應;以及 轉(zhuǎn)移所述第一扇區(qū)到在所述第一高速緩存內(nèi)的所述 第一高速緩存線。
全文摘要
本發(fā)明的一個實施例闡釋了在多級高速緩存中預取指令的改進方式。獲取單元基于偽隨機數(shù)生成器和與當前指令L1高速緩存線相對應的扇區(qū)的函數(shù),來啟動預取操作以轉(zhuǎn)移多個高速緩存線的集合中的一個。獲取單元根據(jù)某一概率函數(shù)從多個高速緩存線的集合中選擇預取目標。如果當前指令L1高速緩存370位于相應L1.5高速緩存線的第一扇區(qū)內(nèi),那么所選擇的預取目標位于下一個L1.5高速緩存線內(nèi)的扇區(qū)。結(jié)果是,改善了指令L1高速緩存命中率并且指令獲取延遲減小,甚至在處理器以高速率消耗指令L1高速緩存中的指令的情況下。
文檔編號G06F12/08GK103218309SQ201210520348
公開日2013年7月24日 申請日期2012年12月6日 優(yōu)先權(quán)日2011年12月6日
發(fā)明者王若凡, 杰克·希萊爾·肖凱特 申請人:輝達公司