專利名稱::用于管理并行高速緩存層級的指令的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明的實(shí)施例總體上涉及多線程處理,以及,更具體地,涉及一組能夠使應(yīng)用軟件對并行線程處理器中的并行高速緩存層級(cachehierarchy)進(jìn)行管理的指令。
背景技術(shù):
:傳統(tǒng)的高速緩存策略技術(shù)試圖通過確定加載和存儲的操作模式,來努力預(yù)測應(yīng)該對哪些數(shù)據(jù)進(jìn)行高速緩存和/或清除。然而,在高度多線程并行處理器中,要對模式進(jìn)行確定則是極端困難的。例如,可以同時執(zhí)行超過10000個線程,而這使得模式檢測是非常困難的。此外,高度多線程并行處理器,諸如圖形處理單元(GPU),與諸如CPU(中央處理器)內(nèi)核的串行處理器相比,其每一個線程僅具有相對較小的高速緩存容量。相應(yīng)地,本
技術(shù)領(lǐng)域:
需要的是能夠有效地利用多線程并行處理器中有限的高速緩存容量的高速緩存管理技術(shù)。
發(fā)明內(nèi)容本發(fā)明的實(shí)施例提供了使并行多線程應(yīng)用軟件能夠協(xié)調(diào)并發(fā)的線程以有效地利用工作集(working-set)容量有限的高速緩存的指令。本發(fā)明的實(shí)施例提供了針對加載/存儲存儲器訪問指令的顯式高速緩存行為修飾符(modifier)。該修飾符可以使程序員和/或編譯器能夠?qū)σ韵滦袨橹付ǜ咚倬彺娴膬?yōu)化針對特定的加載/存儲存儲器指令的易失和非高速緩存行為、工作集行為以及流行為。本發(fā)明的一個實(shí)施例提供了一種用于管理處理單元中的并行高速緩存層級的方法。該方法包括從調(diào)度單元接收指令,其中所述指令包括加載指令或存儲指令;確定該指令包括高速緩存操作修飾符,所述修飾符識別用于在所述并行高速緩存層級的一個或多個級別上對與指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存的策略;以及執(zhí)行所述指令,并且基于所述高速緩存操作修飾符對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)進(jìn)行高速緩存。有利地,本發(fā)明的實(shí)施例允許程序員和/或編譯器來指定在哪個高速緩存級別上對數(shù)據(jù)進(jìn)行高速緩存。這使得程序的執(zhí)行以及數(shù)據(jù)的訪問更加有效率。為了詳細(xì)地理解本發(fā)明的上述特征,對于以上簡要說明的發(fā)明,可以參照實(shí)施例進(jìn)行更為具體的描述,其中一些實(shí)施例示出于附圖中。然而,應(yīng)注意的是,附圖中示出的只是本發(fā)明的代表性實(shí)施例,因此不應(yīng)被認(rèn)為是對本發(fā)明的范圍的限制,本發(fā)明可以適用于其他同等有效的實(shí)施例。圖I為示出了被配置以實(shí)現(xiàn)本發(fā)明一個或多個方面的計算機(jī)系統(tǒng)的框圖。圖2為根據(jù)本發(fā)明的一個實(shí)施例,用于圖I的計算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖。圖3A為根據(jù)本發(fā)明的一個實(shí)施例,圖2中一個PPU內(nèi)的GPC的框圖。圖3B為根據(jù)本發(fā)明的一個實(shí)施例,圖2中一個PPU內(nèi)的分區(qū)單元的框圖。圖3C為根據(jù)本發(fā)明的一個實(shí)施例,圖3A中SPM的一部分的框圖。圖4為根據(jù)本發(fā)明的一個實(shí)施例,圖2中的一個或多個PI3U可經(jīng)配置以實(shí)現(xiàn)的圖形處理管線的示意圖。圖5為根據(jù)本發(fā)明的一個實(shí)施例,示出了并行線程處理器中的并行高速緩存層級的示意圖。圖6為根據(jù)本發(fā)明一個實(shí)施例,用于處理加載存儲器訪問指令的方法步驟的流程圖。圖7為根據(jù)本發(fā)明的一個實(shí)施例,用于處理存儲存儲器訪問指令的方法步驟的流程圖。具體實(shí)施例方式在下面的說明中,將闡述大量的細(xì)節(jié)以提供對本發(fā)明更為徹底的理解。然而,顯而易見地是,對于本領(lǐng)域技術(shù)人員來說缺少這些細(xì)節(jié)的一個或多個也可以實(shí)施本發(fā)明。在其他實(shí)例中,沒有描述公知的特征,以免對本發(fā)明造成混淆。系統(tǒng)概述圖I的框圖示出被配置為實(shí)現(xiàn)本發(fā)明一個或多個方面的計算機(jī)系統(tǒng)100。計算機(jī)系統(tǒng)100包括中央處理器(CPU)102以及經(jīng)由互連路徑進(jìn)行通信的系統(tǒng)存儲器104,該互連路徑可包括存儲器橋105。存儲器橋105,其可能是例如北橋芯片,其經(jīng)由總線或者其它的通信路徑106(例如超傳輸鏈路)與I/O(輸入/輸出)橋107相連。I/O橋107,其例如可能是南橋芯片,從一個或多個用戶輸入設(shè)備108(例如,鍵盤,鼠標(biāo))接收用戶輸入,并且將該輸入經(jīng)由路徑106和存儲器橋105轉(zhuǎn)發(fā)給CPU102。并行處理子系統(tǒng)112經(jīng)由總線或者其它的通信路徑113(例如,PCIExpress,加速圖形端口,或者超傳輸鏈路)耦合至存儲器橋105;在一個實(shí)施例中,并行處理子系統(tǒng)112為圖形子系統(tǒng),其向顯示設(shè)備110(例如,傳統(tǒng)的基于CRT或者IXD的監(jiān)視器)傳送像素。系統(tǒng)磁盤114也連接到I/O橋107。開關(guān)116提供了在I/O橋107及其他諸如網(wǎng)絡(luò)接口卡118的組件與不同的外插卡(add-incard)120和121之間的連接。其它的組件(未明確的示出),包括USB或者其它的端口連接、CD驅(qū)動器、DVD驅(qū)動器、膠片錄制設(shè)備等等,也可以連接到I/O橋107??梢允褂萌魏芜m宜的協(xié)議,諸如PCI(外圍組件互連)、PCI-Express、AGP(加速圖形端口)、超傳輸或者任何其它的總線或者點(diǎn)對點(diǎn)通信協(xié)議來實(shí)現(xiàn)圖I中將各組件互連的通信路徑,并且不同設(shè)備之間的連接也可使用現(xiàn)有技術(shù)中已知的不同的協(xié)議。在一個實(shí)施例中,并行處理子系統(tǒng)112結(jié)合了被優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成了圖形處理單元(GPU)。在另一個實(shí)施例中,并行處理子系統(tǒng)112結(jié)合了被優(yōu)化用于通用處理的電路,同時保留了底層(underlying)的計算架構(gòu),在這里將對其進(jìn)行更為詳細(xì)地描述。在另一實(shí)施例中,可將并行處理子系統(tǒng)112與一個或多個其它的系統(tǒng)元件,諸如存儲器橋105、CPU102以及I/O橋107集成,來形成片上系統(tǒng)(SoC)??梢岳斫獾皆谶@里所顯示的系統(tǒng)是說明性的,并且可對其進(jìn)行變化和修改??筛鶕?jù)需要修改連接拓?fù)浣Y(jié)構(gòu),包括橋的數(shù)量和布置、CPU102的數(shù)量以及并行處理子系統(tǒng)112的數(shù)量。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接地,而不是通過橋來連接到CPU102,并且其它的設(shè)備經(jīng)由存儲器橋105以及CPU102與系統(tǒng)存儲器104進(jìn)行通信。在其它可供選擇的拓?fù)浣Y(jié)構(gòu)中,并行處理子系統(tǒng)112連接到I/O橋107,或者直接連接到CPU102,而不是連接到存儲器橋105。但在其它的實(shí)施例中,可將I/O橋107以及存儲器橋105集成到單一的芯片中。大量的實(shí)施例可以包括兩個或更多的CPU102以及兩個或更多的并行處理系統(tǒng)112。在這里所顯示的具體的組件是可選擇的;例如,可支持任何數(shù)量的外插卡或者外圍設(shè)備。在一些實(shí)施例中,刪除了開關(guān)116,并且網(wǎng)絡(luò)適配器118和外插卡120、121直接連接到I/O橋107。圖2示出了根據(jù)本發(fā)明一個實(shí)施例的并行處理子系統(tǒng)112。如同所顯示的,并行處理子系統(tǒng)112包括一個或多個并行處理單元(PPU)202,其每一個都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I(此處,相似對象的多個實(shí)體使用標(biāo)識該對象的參考數(shù)字以及根據(jù)需要結(jié)合標(biāo)識該實(shí)體的帶有括號的數(shù)字來表示)??梢允褂靡粋€或多個諸如可編程處理器、專用集成電路(ASIC)或者存儲器器件的集成電路設(shè)備來實(shí)現(xiàn),或者以任何其它技術(shù)上可行的方式來實(shí)現(xiàn)。再次參考圖1,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或者所有的PPU202,都是具有渲染管線的圖形處理器,可以被配置為執(zhí)行與下述各項相關(guān)的各種任務(wù)從圖形數(shù)據(jù)中生成像素數(shù)據(jù),所述圖形數(shù)據(jù)是由CPU102和/或系統(tǒng)存儲器104經(jīng)由存儲器橋105以及總線113所提供的;與本地并行處理存儲器204(其能被作為包括了例如傳統(tǒng)幀緩沖區(qū)的圖形存儲器來使用)交互來存儲并更新像素數(shù)據(jù);將像素數(shù)據(jù)輸送到顯示設(shè)備110,等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可以包括一個或多個作為圖形處理器來操作的PPU202,以及一個或多個被用于通用計算的其他PPU202。PI3U可以是相同的或者是不同的,并且每個PPU可具有其自己專用的并行處理存儲器裝置或者非專用的并行處理存儲器裝置。一個或多個PPU202可以向顯示設(shè)備110輸出數(shù)據(jù),或者每一個PPU202都可以向一個或多個顯示設(shè)備110輸出數(shù)據(jù)。操作時,CPU102是計算機(jī)系統(tǒng)100的主處理器,其控制并且協(xié)調(diào)其他系統(tǒng)組件的操作。具體地,CPU102發(fā)出控制PPU202操作的命令。在一些實(shí)施例中,CPU102對于每一個PPU202都將命令流寫入到入棧緩沖區(qū)(pushbuffer)中(未明確地在圖I或者圖2中示出),該入棧緩沖區(qū)可位于系統(tǒng)存儲器104、并行處理存儲器204、或者可為CPU102和PPU202訪問的另外的存儲位置中。PPU202從入棧緩沖區(qū)中讀取命令流,然后相對于CPU102的操作異步地執(zhí)行命令?,F(xiàn)在返回參考圖2,每一個PPU202都包括1/0(輸入/輸出)單元205,該單元經(jīng)由通信路徑113與計算機(jī)系統(tǒng)100其余的部分相互通信,該通信路徑113連接到存儲器橋105(或者在另一個替代實(shí)施例中,直接連接到CPU102)。PPU202與計算機(jī)系統(tǒng)100其余部分的連接也可以改變。在一些實(shí)施例中,可將并行處理子系統(tǒng)112實(shí)現(xiàn)為外插卡,該卡可以被插入到計算機(jī)系統(tǒng)100的擴(kuò)展槽中。在其它的實(shí)施例中,可以將PPU202與諸如存儲器橋105或I/O橋107的總線橋一起集成到單一芯片上。但在其它的實(shí)施例中,可將PPU202的某些或者所有的元件與CPU102一起集成到單個芯片上。在一個實(shí)施例中,通信路徑113是PCI-EXPRESS鏈路,其中對于每個PPU202都分配了專用通道(lane),如同現(xiàn)有技術(shù)中所已知的。也可以使用其它的通信路徑。I/O單元205生成用于在通信路徑113上傳輸?shù)臄?shù)據(jù)包(或者其它的信號),以及從通信路徑113上接收所有輸入進(jìn)來的數(shù)據(jù)包(或者其它的信號),將輸入的數(shù)據(jù)包引導(dǎo)到PPU202的適當(dāng)?shù)慕M件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口206,而可將與存儲器操作相關(guān)的命令(例如,對并行處理存儲器204的讀或者寫)引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口206讀取每個入棧緩沖區(qū)并且將由入棧緩沖區(qū)指定的工作輸出給前端212。每一個PPU202都有利地實(shí)現(xiàn)了高度的并行處理構(gòu)架。如同所詳細(xì)顯示地,PPU202(0)包括了處理集群陣列230,該處理集群陣列230包括C個通用處理集群(GPC)208,其中OI。每個GPC208都能夠并發(fā)地執(zhí)行大量的(例如數(shù)百或者數(shù)千個)線程,其中每個線程都是程序的實(shí)例。在不同的應(yīng)用程序中,不同的GPC208可被分配用于處理不同類型的程序或者用于執(zhí)行不同類型的計算。例如,在圖形應(yīng)用程序中,第一組GPC208可被分配用于執(zhí)行曲面細(xì)分(tessellation)操作以及用于對曲面片生成基元拓?fù)洌⑶业诙MGPC208可被分配用于執(zhí)行曲面細(xì)分著色以對于基元拓?fù)涞那嫫瑓?shù)進(jìn)行評價并確定頂點(diǎn)位置及每個頂點(diǎn)的其他屬性。GPC208的分配可依據(jù)每個類型的程序或計算產(chǎn)生的工作量而不同。GPC208經(jīng)由工作分布單元200接收所要執(zhí)行的處理任務(wù),工作分布單元200從前端單元212接收定義處理任務(wù)的命令。處理任務(wù)包括將要處理的數(shù)據(jù)索引,例如表面(曲面片)數(shù)據(jù)、基元數(shù)據(jù)、頂點(diǎn)數(shù)據(jù)和/或像素數(shù)據(jù),以及定義了如何對該數(shù)據(jù)進(jìn)行處理(例如,將要執(zhí)行什么程序)的狀態(tài)參數(shù)和命令。可將工作分布單元200配置為獲取與任務(wù)相對應(yīng)的索引,或者工作分布單元200可以從前端212接收索引。前端212確保,在由入棧緩沖區(qū)所指定的處理開始之前,GPC208被配置成為有效的狀態(tài)。當(dāng)PPU202用于圖形處理時,例如,將對于每個曲面片的處理工作量分成近似相等規(guī)模的任務(wù),以使得可以將曲面細(xì)分處理分布給多個GPC208。可將工作分布單元200配置為以能夠為多個GPC208提供任務(wù)進(jìn)行處理的頻率來生成任務(wù)。相反地,在傳統(tǒng)的系統(tǒng)中,典型地是由單一的處理引擎來執(zhí)行處理,而同時其他處理引擎則是保持空閑,在開始它們的處理任務(wù)之前等待單個的處理引擎完成其任務(wù)。在本發(fā)明的一些實(shí)施例中,GPC208的各部分被配置為執(zhí)行不同類型的處理。例如,第一部分可被配置為執(zhí)行頂點(diǎn)著色(vertexshading)和拓?fù)渖?,第二部分可被配置為?zhí)行細(xì)分曲面和幾何著色,第三部分可被配置為在屏幕空間中執(zhí)行像素著色以生成渲染后的圖像。由GPC208生成的中間數(shù)據(jù)可被存儲在緩沖區(qū)中,以允許在GPC208之間對該中間數(shù)據(jù)進(jìn)行傳輸,以用于進(jìn)一步的處理。存儲器接口214包括D個分區(qū)單元215,其每一個都直接地耦合到并行處理存儲器204的一部分,其中DSI。如同所顯示的,分區(qū)單元215的數(shù)量通常都等于DRAM220的數(shù)量。在其它的實(shí)施例中,分區(qū)單元215的數(shù)量可以不等于存儲設(shè)備的數(shù)量。本領(lǐng)域技術(shù)人員將會理解DRAM220可被替換為其它適宜的存儲設(shè)備并且可以是通常的常規(guī)設(shè)計。因此省略了詳細(xì)的說明??煽鏒RAM220來存儲渲染對象,例如幀緩沖器或者紋理映射,允許分區(qū)單元215并行地寫入每個渲染對象的一部分,以有效地使用并行處理存儲器204的可用帶寬。任何一個GPC208都可以對將要寫入到并行處理存儲器204中任何一個DRAM220的數(shù)據(jù)進(jìn)行處理。交叉開關(guān)單元210被配置為將每個GPC208的輸出路由給任一分區(qū)單元215的輸入或者路由至另一個GPC208,用于進(jìn)一步的處理。GPC208與存儲器接口214通過交叉開關(guān)單元210進(jìn)行通信,以對不同的外部儲存器設(shè)備進(jìn)行讀取或?qū)懭?。在一個實(shí)施例中,交叉開關(guān)單元210具有到存儲器接口214的連接以與I/O單元205進(jìn)行通信,以及到本地并行處理存儲器204的連接,從而使在不同的GPC208之中的處理內(nèi)核能夠與系統(tǒng)存儲器104或者其它的對于PPU202來說非本地的存儲器進(jìn)行通信。在圖2所顯示的實(shí)施例中,交叉開關(guān)單元210直接與I/O單元205相連。交叉開關(guān)單元210可以使用虛擬信道,以分離GPC208和分區(qū)單元215之間的業(yè)務(wù)流。在另一方面,GPC208可以被編程用來執(zhí)行與各式各樣的應(yīng)用程序相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)的過濾、建模操作(例如,應(yīng)用物理定律來確定對象位置、速率及其他屬性)、圖像渲染操作(例如,細(xì)分曲面著色、頂點(diǎn)著色、幾何著色和/或像素著色程序)等等。PPU202可以將來自系統(tǒng)存儲器104和/或本地并行處理存儲器204的數(shù)據(jù)傳送給內(nèi)部的(片上)存儲器,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數(shù)據(jù)可以由其它的系統(tǒng)組件訪問,包括CPU102或者另一個并行處理子系統(tǒng)112。PPU202可擁有任何容量(amount)的本地并行處理存儲器204,包括不設(shè)置本地存儲器,并且可以任何組合形式來使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一(unified)存儲器架構(gòu)(UMA)實(shí)施例中,PI3U202可以是圖形處理器。在這樣的實(shí)施例中,將幾乎沒有或者沒有提供專用的圖形(并行處理)存儲器,并且PPU202將獨(dú)占地或者是幾乎獨(dú)占地使用系統(tǒng)存儲器。在UMA實(shí)施例中,可將PPU202集成到橋式芯片或者處理器芯片中,或者作為具有高速鏈路(例如,PCI-EXPRESS)的分立芯片加以提供,該高速鏈路經(jīng)由橋式芯片或者其它的通信方式將PPU202連接到系統(tǒng)存儲器。如上所述,并行處理子系統(tǒng)112中可包括許任意數(shù)量的PPU202。例如,多個PPU202可以被設(shè)置在單個外插卡上,或者多個外插卡可以連接到通信路徑113,或者PPU202中的一個或多個可以被集成到橋式芯片中。多PPU系統(tǒng)中的PPU202可以是彼此相同或者不同的。例如,不同的PPU202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在具有多個PPU202時,可以并行地進(jìn)行操作這些PPU,以高于采用單個PPU202可能達(dá)到的吞吐量來對數(shù)據(jù)進(jìn)行處理。可以用各式各樣的配置和形式因素來實(shí)現(xiàn)包含一個或多個PPU202的系統(tǒng),包括桌上型電腦、膝上型電腦、或者手持個人電腦、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等等,。處理集群陣列(ProcessingClusterArray)概述圖3A是根據(jù)本發(fā)明一個實(shí)施例的、圖2的一個PPU202中GPC208的框圖。每個GPC208可被配置為并行地執(zhí)行大量的線程,其中術(shù)語“線程”指的是對一組特定的輸入數(shù)據(jù)所執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,采用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術(shù)來支持大量線程的并行執(zhí)行,而不必提供多個獨(dú)立的指令單元。在其它的實(shí)施例中,采用單指令多線程(SMT)技術(shù),使用被配置為發(fā)送指令到每一個GPC208內(nèi)一組處理引擎的公共指令單元,來支持大量通常同步化線程的并行執(zhí)行。與所有的處理引擎一般都執(zhí)行相同指令的SMD執(zhí)行方式不同,SIMT執(zhí)行通過給定線程程序允許不同的線程更加容易地跟蹤離散型的執(zhí)行路徑。本領(lǐng)域技術(shù)人員將會理解到SMD處理機(jī)制相當(dāng)于SMT處理機(jī)制的功能子集。經(jīng)由管線管理器305可方便地控制GPC208的操作,該管線管理器305向流多處理器(SPM)310分布處理任務(wù)。管線管理器305也可被配置為,通過為SPM310所輸出的經(jīng)處理數(shù)據(jù)指定目的地,來控制工作分布交叉開關(guān)330。在一個實(shí)施例中,每個GPC208都包括M個SPM310,其中M彡I,每個SPM310都被配置為處理一個或多個線程組。而且,每個SPM310有利地包括相同的一組可被管線化的功能執(zhí)行單元(例如,算術(shù)邏輯單元,以及加載-存儲單元,如在圖3C中所示的Exec單元302和LSU303),允許在前一個指令結(jié)束之前發(fā)送新的指令,如現(xiàn)有技術(shù)中所知的??商帷⒐┕δ軋?zhí)行單元的任何組合。在一個實(shí)施例中,功能單元支持多種運(yùn)算,包括整數(shù)和浮點(diǎn)算法(例如,加法和乘法)、比較運(yùn)算、布爾運(yùn)算(AND和、OR或、XOR異或)、位移以及不同代數(shù)函數(shù)的計算(例如,平面內(nèi)插、三角、指數(shù)、以及對數(shù)函數(shù),等等);并且相同功能單元硬件可均衡地用于(beleveragedto)執(zhí)行不同運(yùn)算。傳送到特定GPC208的指令序列形成線程,如之前本文所定義的,并且在此將跨SPM310中并行處理引擎(沒有示出)所并發(fā)執(zhí)行的一定數(shù)量的線程的集合稱為“卷繞包(warp)”或“線程組”。如同在此所使用的,“線程組”指的是針對不同的輸入數(shù)據(jù),并發(fā)執(zhí)行相同程序的一組線程,其中該組中有一個線程被分配給SPM310中的不同的處理引擎。線程組可以包括比SPM310中的處理引擎數(shù)量更少的線程,而在這樣情況下,在該線程組正在被執(zhí)行的周期內(nèi),一些處理引擎將會處于空閑狀態(tài)。線程組同樣可以包括比SPM310中的處理引擎數(shù)量更多的線程,而在這樣情況下,處理將在連續(xù)的時鐘脈沖周期上發(fā)生。因為每個SPM310可以并發(fā)支持多達(dá)G個線程組,于是在任何給定的時間在GPC208中可以允許執(zhí)行多達(dá)G*M個線程組。此外,在SPM310中可有多個相關(guān)的線程組同時處于激活狀態(tài)(處于執(zhí)行的不同階段)。在此將該線程組的集合稱為“協(xié)作線程陣列”(“CTA”)或者“線程陣列”。特定CTA的大小等于m*k,其中k是在線程組中并發(fā)執(zhí)行線程的數(shù)量,并且k一般是SPM310中并行處理引擎數(shù)量的整數(shù)倍數(shù),并且m是SPM310中同時處于激活狀態(tài)的線程組的數(shù)量。CTA的大小通常是由程序員以及CTA可用的硬件資源的諸如存儲器或者寄存器的容量來決定的。每個SPM310都包括LI高速緩存(沒有示出)或者使用SPM310之外的相應(yīng)的LI高速緩存中用于執(zhí)行加載和存儲操作的空間。而且每個SPM310都可以訪問分區(qū)單元215內(nèi)的L2高速緩存,該高速緩存由所有的GPC208所共享,并且可用于在線程之間傳送數(shù)據(jù)。最后,SPM310還可以訪問片外“全局”存儲器,其可包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。將要理解到的是PPU202之外的任何存儲器都可作為全局存儲器來使用。此外,可將LI.5高速緩存335包括在GPC208之內(nèi),其被配置為據(jù)SPM310的請求經(jīng)由存儲器接口214來接收并且保持從存儲器中所獲取的數(shù)據(jù),其包括指令、一致性(uniform)數(shù)據(jù)以及常數(shù)數(shù)據(jù),并且將所請求的數(shù)據(jù)提供給SPM310。在GPC208中具有多個SPM310的實(shí)施例有利于共享被緩存在LI.5高速緩存335中的共同指令和數(shù)據(jù)。每個GPC208都可包括存儲器管理單元(MMU)328,其被配置為將虛擬地址映射為物理地址。在其他的實(shí)施例中,MMU328可以位于存儲器接口214內(nèi)。MMU328包括一組頁表項目(PTE)以及可選地包括高速緩存線索引(cachelineindex),該組PTE被用于將虛擬地址映射到像素塊(tile)的物理地址。MMU328可包括地址轉(zhuǎn)換后備緩沖區(qū)(TLB)或者高速緩存,其可以位于多處理器SPM310或者LI高速緩存或者GPC208之中。對物理地址進(jìn)行處理,來分散表面數(shù)據(jù)訪問位置,以允許在分區(qū)單元之間交錯的高效請求。高速緩存線索引可用來確定對于高速緩存線的請求是否命中或失敗。在圖形以及計算應(yīng)用程序中,可對GPC208進(jìn)行配置使得每個SPM310都耦合到紋理單元315,以執(zhí)行紋理映射操作,例如確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。根據(jù)需要,從內(nèi)部的紋理LI高速緩存(沒有示出)中讀取紋理數(shù)據(jù),或者在一些實(shí)施例中從SPM310中的LI高速緩存讀取紋理數(shù)據(jù),以及從L2高速緩存、并行處理存儲器204或者系統(tǒng)存儲器104中取得紋理數(shù)據(jù)。每個SPM310都向工作分布交叉開關(guān)330輸出處理后的任務(wù),以便向另一個GPC208提供該處理后的任務(wù)用于進(jìn)一步的處理,或者經(jīng)由交叉開關(guān)單元210將該處理后的任務(wù)存入L2高速緩存、并行處理存儲器204或者系統(tǒng)存儲器104中。PreROP(pre-rasteroperations,預(yù)光柵操作)325被配置為從SPM310接收數(shù)據(jù),將數(shù)據(jù)引向分區(qū)單元215中的ROP單元,并且執(zhí)行對色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)、以及執(zhí)行地址轉(zhuǎn)換。應(yīng)該予以理解的是,在此所描述的內(nèi)核架構(gòu)是說明性的而且是可變化以及修改的。可在GPC208中包括任何數(shù)量的處理單元,例如SPM310或者紋理單元315、PreROP325。此外,雖然僅顯示了一個GPC208,但是PPU202可包括任何數(shù)量的GPC208,其最好在功能上彼此相類似,以便執(zhí)行行為將不會依賴于是哪個GPC208接收了特定的處理任務(wù)。此外,每個GPC208都最好使用單獨(dú)且不同的處理單元、LI高速緩存等,獨(dú)立于其它的GPC208進(jìn)行操作。圖3B是根據(jù)本發(fā)明的一個實(shí)施例的、在圖2中的一個PPU202之內(nèi)的分區(qū)單元215的框圖。如所顯示的,分區(qū)單元215包括L2高速緩存350、幀緩沖區(qū)(FB)DRAM接口355以及光柵操作單元(R0P)360。L2高速緩存350是讀/寫高速緩存,其被配置為對從交叉開關(guān)單元210和ROP360所接收的操作進(jìn)行加載和存儲。由L2高速緩存350將讀取失敗以及緊急回寫請求輸出給FBDRAM接口355以用于處理。還將臟的更新(Dirtyupdate)發(fā)送給FB355用于伺機(jī)處理。FB355與DRAM220直接對接,輸出讀和寫請求并且接收從DRAM220讀取的數(shù)據(jù)。在圖形應(yīng)用程序中,ROP360是處理單元,其執(zhí)行光柵操作并且輸出作為處理后圖形數(shù)據(jù)的像素數(shù)據(jù)用于在圖形存儲器中存儲,其中光柵操作例如模板(stencil)、z測試、混合等等。在本發(fā)明的一些實(shí)施例中,ROP360被包括在每個GPC208而非分區(qū)單元215中,并且將像素讀和寫請求而不是像素片段數(shù)據(jù)通過交叉開關(guān)單元210進(jìn)行傳輸。可在顯示設(shè)備110上顯示處理后的圖形數(shù)據(jù),或者對該圖形數(shù)據(jù)進(jìn)行路由以用于由CPU102或又并行處理子系統(tǒng)112中的一個處理實(shí)體來進(jìn)行進(jìn)一步的處理。每個分區(qū)單元215都包括ROP360以便分布光柵操作的處理。在一些實(shí)施例中,可將ROP360配置為對被寫入存儲器中z數(shù)據(jù)或者色彩數(shù)據(jù)進(jìn)行壓縮,以及對從存儲器中讀取出來的z數(shù)據(jù)或者色彩數(shù)據(jù)進(jìn)行解壓縮。本領(lǐng)域技術(shù)人員將會理解在圖1、2、3A和3B中描述的架構(gòu)不以任何方式對本發(fā)明的范圍進(jìn)行限制,而且在此教導(dǎo)的技術(shù)可在任何被適當(dāng)設(shè)置的處理單元上實(shí)現(xiàn),該處理單元包括但并非限制,一個或多個CPU、一個或多個多內(nèi)核CPU、一個或多個PPU202、一個或多個GPC208、一個或多個圖形或者特殊用途處理單元等等,均不脫離本發(fā)明的范圍。在本發(fā)明的實(shí)施例中,使用PPU202或者其它計算系統(tǒng)的處理器來采用線程陣列執(zhí)行通用計算是可取的。在線程陣列中的每個線程都分配有唯一的線程標(biāo)識符(“線程ID”),線程在其執(zhí)行期間可對該線程標(biāo)識符進(jìn)行訪問。線程ID可被定義為一維的或多維的數(shù)值,控制線程處理行為各個方面。例如,線程ID可能被用來確定線程將對輸入數(shù)據(jù)集的哪個部分進(jìn)行處理,和/或確定線程將要生成或者寫入輸出數(shù)據(jù)集哪個部分。每一線程的指令序列都可以包括至少一個指令,該指令定義了代表性線程和線程陣列中一個或多個其它線程之間的協(xié)作行為。例如,每一線程的指令序列可能包括下列指令在序列中的特定點(diǎn)處掛起代表性線程的操作的執(zhí)行直到一個或多個其他線程到達(dá)該特定點(diǎn)時為止的指令,指示代表性線程將數(shù)據(jù)存儲在一個或多個其他線程有權(quán)訪問的共享存儲器中的指令,,指示代表性線程自動讀取和更新存儲在共享存儲器中的數(shù)據(jù)的指令,一個或多個其他線程基于其線程ID有權(quán)訪問所述共享存儲器,等等。CTA程序還可以包括計算將從中讀取數(shù)據(jù)的共享存儲器中的地址的指令,其中地址為線程ID的函數(shù)。通過定義適宜的函數(shù)并提供同步技術(shù),可以用可預(yù)測的方式,由CTA的一個線程將數(shù)據(jù)寫入到共享存儲器中給定的位置,以及由同一個CTA中不同的線程從該位置讀取出數(shù)據(jù)。從而,線程之間任何期望模式的數(shù)據(jù)共享都可以得到支持,并且在CTA中任何的線程都可以與同一CTA中的任何其他線程共享數(shù)據(jù)。如果需要的話,可由CTA程序來決定在CTA的線程之中數(shù)據(jù)共享的程度;如此,可以理解到在特定的使用了CTA的應(yīng)用程序中,CTA的線程彼此之間可能或者可能不實(shí)際地共享數(shù)據(jù),這取決于CTA程序,并且在此對術(shù)語“CTA”和“線程陣列”以相同的含義進(jìn)行使用。圖3C是根據(jù)本發(fā)明的一個實(shí)施例,圖3A中SPM310的框圖。SPM310包括指令LI高速緩存370,其被配置為經(jīng)由LI.5高速緩存335從存儲器接收指令和常數(shù)。warp調(diào)度器和指令單元312從指令LI高速緩存器370接收指令和常數(shù),并且根據(jù)該指令和常數(shù)對本地寄存器文件304和SPM310功能單元進(jìn)行控制。SPM310功能單元包括N個exec(執(zhí)行或者處理)單元302和P個加載-存儲單元(LSU)303。SPM310提供了具有不同訪問級別(level)的片上(內(nèi)部的)數(shù)據(jù)存儲。專用寄存器(沒有顯示)對于LSU303來說是可讀取的而不是可寫入的,并且其用于存儲定義了每個CTA線程“位置”的參數(shù)。在一個實(shí)施例中,專用寄存器對于每個CTA線程(或者對于SPM310中每個exec單元302)都包括一個存儲線程ID的寄存器;每個線程ID寄存器僅可由一個相應(yīng)的exec單元302進(jìn)行訪問。專用寄存器還可包括輔助寄存器,其可由所有的CTA線程(或者由所有的LSU303)進(jìn)行讀取,該輔助寄存器存儲了CTA標(biāo)識符、CTA維度(dimension)、CTA所屬的柵格(grid)的維度以及CTA所屬的柵格的標(biāo)識符。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動器103接收的命令,來對專用寄存器進(jìn)行寫操作,并且該專用寄存器在CTA執(zhí)行期間不會變化。參數(shù)存儲器(未被顯示)存儲了運(yùn)行時(runtime)參數(shù)(常數(shù)),可以由任何的CTA線程(或者任何的LSU303)對該參數(shù)進(jìn)行讀取而非寫入。在一個實(shí)施例中,設(shè)備驅(qū)動器103在引導(dǎo)SPM310開始對使用這些參數(shù)的CTA的執(zhí)行之前,將參數(shù)提供給參數(shù)存儲器。在任何CTA(或者SPM310中的任何exec單元302)中的任何CTA線程可以通過存儲器接口214來訪問全局存儲器??稍贚I高速緩存320中存儲全局存儲器的一部分。本地寄存器文件304被每個CTA線程用作臨時空間(scratchspace);每個寄存器都被分配用于一個線程的排他性使用,并且任何本地寄存器文件304中的數(shù)據(jù)僅對于該寄存器被分配給的CTA線程可訪問??梢詫⒈镜丶拇嫫魑募?04實(shí)現(xiàn)為在物理上或者邏輯上被劃分成P個通道的寄存器文件,每個通道都具有一定數(shù)量的條目(entry)(其中每個條目都可能存儲,例如32比特的字符)。對N個exec單元302和P個加載-存儲單元LSU303中的每一個都分配一個通道,并且可以使用用于執(zhí)行同一個程序的不同線程的數(shù)據(jù)來填充不同通道中的相應(yīng)條目,以有助于SIMD的執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙浣oG個并發(fā)線程組中不同的線程組,以便本地寄存器文件304中給定的條目僅對特定的線程是可訪問的。在一個實(shí)施例中,在本地寄存器文件304中的某些條目被保留用于存儲線程標(biāo)識符,其實(shí)現(xiàn)了一個專用寄存器。共享存儲器306對于所有的CTA線程(在單一的CTA之內(nèi))都是可訪問的;共享存儲器306中的任何位置對于在同一個CTA中(或者對于SPM310中的任何處理引擎)的任何CTA線程來說都是可訪問的。共享存儲器306可以被實(shí)現(xiàn)為具有互連的共享寄存器文件或者共享片上高速緩存存儲器,該互連允許任何處理引擎從共享存儲器中的任何位置讀取或?qū)懭?。在其它的?shí)施例中,共享狀態(tài)空間可以映射到片外(off-chip)存儲器的每個CTA區(qū)域,并且可以在LI高速緩存320中進(jìn)行高速緩存??蓪?shù)存儲器實(shí)現(xiàn)為在實(shí)現(xiàn)了共享存儲器306的同一個共享寄存器文件或者共享高速緩存存儲器中的指定部分,或者LSU303僅能進(jìn)行只讀訪問的單獨(dú)的共享寄存器文件或片上高速緩存存儲器。在一個實(shí)施例中,也可以將實(shí)現(xiàn)了參數(shù)存儲器的區(qū)域用于存儲CTAID和柵格ID,以及CTA維度和柵格的維度,由此實(shí)現(xiàn)了部分的專用寄存器。SPM310中的每個LSU303都耦合到統(tǒng)一地址映射單元352,該統(tǒng)一地址映射單元將在統(tǒng)一的存儲器空間中所指定的為加載和存儲指令而提供的地址轉(zhuǎn)換為每個不同存儲器空間中的地址。從而,指令可用來訪問任何由統(tǒng)一的存儲器空間中的地址所指定的本地的、共享的、或者全局的存儲器空間。每個SPM310中的LI高速緩存320都可用于對私有的每個線程的本地數(shù)據(jù)以及每個應(yīng)用程序的全局?jǐn)?shù)據(jù)進(jìn)行高速緩存。在一些實(shí)施例中,可在LI高速緩存320中對每個CTA的共享數(shù)據(jù)進(jìn)行高速緩存。LSU303經(jīng)由存儲器和高速緩存的互連380耦合到一致性LI高速緩存375、共享存儲器306以及LI高速緩存320。一致性LI高速緩存375被配置為經(jīng)由LI.5高速緩存335從存儲器接收只讀數(shù)據(jù)和常數(shù)。圖4是根據(jù)本發(fā)明的一個實(shí)施例的圖形處理管線400的示意圖,可由圖2中的一個或多個PPU202配置實(shí)現(xiàn)。例如,一個SPM310可被配置為執(zhí)行頂點(diǎn)處理單元415的功能、幾何處理單元425以及片段處理單元460中的一個或多個的功能。還可以由GPC208中的其它處理引擎以及相應(yīng)的分區(qū)單元215來執(zhí)行數(shù)據(jù)匯編器410、基元匯編器420、光柵化器455以及光柵操作單元465的功能。另一方面,可使用針對于一個或多個功能的專用處理單元來實(shí)現(xiàn)圖形處理管線400。數(shù)據(jù)匯編器410處理單元為高階表面、基元等等采集頂點(diǎn)數(shù)據(jù),并且向頂點(diǎn)處理單元415輸出包括了頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)。頂點(diǎn)處理單元415為可編程執(zhí)行單元,其被配置為執(zhí)行頂點(diǎn)著色程序,從而根據(jù)頂點(diǎn)著色程序的指定來光照(lighting)和變換(transforming)頂點(diǎn)數(shù)據(jù)。例如,可對頂點(diǎn)處理單元415進(jìn)行編程以將頂點(diǎn)數(shù)據(jù)從對基于對象的坐標(biāo)表示(對象空間)變換到諸如世界空間或者規(guī)格化設(shè)備坐標(biāo)(NDC)空間的替代基礎(chǔ)坐標(biāo)系統(tǒng)。頂點(diǎn)處理單元415可以通過數(shù)據(jù)匯編器410讀取存儲在LI高速緩存320、并行處理存儲器204或者系統(tǒng)存儲器104中的數(shù)據(jù)來供頂點(diǎn)數(shù)據(jù)處理之用。基元匯編器420從頂點(diǎn)處理單元415接收頂點(diǎn)屬性,根據(jù)需要讀取所存儲的頂點(diǎn)屬性,并且構(gòu)建圖形基元用于由幾何處理單元425進(jìn)行處理。圖形基元包括三角形、線段、點(diǎn)等等。幾何處理單元425是可編程執(zhí)行單元,其被配置為執(zhí)行幾何著色程序,依據(jù)幾何著色程序的指定對從基元匯編器420接收的圖形基元進(jìn)行變換。例如,可對幾何處理單元425進(jìn)行編程,以將圖形基元細(xì)分成為一個或多個新的圖形基元和計算參數(shù),例如平面方程系數(shù),其用于對新的圖形基元進(jìn)行光柵化。在一些實(shí)施例中,幾何處理單元425也可以添加或者刪除幾何流中的元素。幾何處理單元425向視圖縮放、剔除(cull)以及裁剪(clip)單元450輸出指定新的圖形基元的參數(shù)和頂點(diǎn)。幾何處理單元425可以讀取存儲在并行處理存儲器204或者系統(tǒng)存儲器104中的數(shù)據(jù)用于在處理幾何數(shù)據(jù)中使用。視圖縮放、剔除以及裁剪單元450執(zhí)行裁剪、剔除以及視圖縮放,并且將處理后的圖形基元輸出到光柵化器455。光柵化器455對新的圖形基元進(jìn)行掃描轉(zhuǎn)換并且將片段和覆蓋(coverage)數(shù)據(jù)輸出給片段處理單元460。此外,可將光柵化器455配置為執(zhí)行z剔除及其他基于z的最佳化。片段處理單元460是可編程執(zhí)行單元,其被配置為執(zhí)行片段著色程序,依據(jù)片段著色程序的指定,來對從光柵化器455接收的片段進(jìn)行變換。例如,可對片段處理單元460編程以執(zhí)行例如透視校正、紋理映射、著色、混合等諸如此類的操作,以生成輸出到光柵操作單元465的著色后的片段。片段處理單元460可以讀取存儲在并行處理存儲器204或者系統(tǒng)存儲器104中的數(shù)據(jù)用于在處理片段數(shù)據(jù)中使用。取決于所編程的采樣率,可在像素、樣本或者其它粒度上對片段進(jìn)行著色。光柵操作單元465是處理單元,其執(zhí)行模板(stencil)、z測試、混合等諸如此類的光柵操作并且輸出像素數(shù)據(jù)作為處理后的圖形數(shù)據(jù)用于存儲在圖形存儲器中的??蓪⑻幚砗蟮膱D形數(shù)據(jù)存儲在圖形存儲器,例如并行處理存儲器204和/或系統(tǒng)存儲器104中,以用于在顯示設(shè)備110上進(jìn)行顯示,或者用于進(jìn)一步的由CPU102或并行處理子系統(tǒng)112進(jìn)行處理。在本發(fā)明的一些實(shí)施例中,可將光柵操作單元465配置為對寫入到存儲器中的z數(shù)據(jù)或者色彩數(shù)據(jù)進(jìn)行壓縮,以及對從存儲器中讀取出來的z數(shù)據(jù)或者色彩數(shù)據(jù)進(jìn)行解壓縮。雖然結(jié)合圖1、2、3A、3B和3C中的系統(tǒng)對方法步驟進(jìn)行了描述,但是本領(lǐng)域技術(shù)人員將理解到任何配置為以任意順序執(zhí)行該方法步驟的系統(tǒng)都在本發(fā)明的范圍之內(nèi)。用于管理并行高速緩存層級的指令圖5是根據(jù)本發(fā)明一個實(shí)施例的示意圖,示出了在并行線程處理器中的并行高速緩存層級。如所顯示的,PPU502包括一個或多個SPM510。PPU502耦合到PPU存儲器526,該P(yáng)PU存儲器526可以包括DRAM。PPU502也耦合到橋506。橋506耦合到CPU504和系統(tǒng)存儲器508。在一種實(shí)現(xiàn)方式中,PI3U502經(jīng)由PCI-Express鏈路和橋506耦合到CPU504和系統(tǒng)存儲器508。如圖5所示,每個SPM510均包括指令LI高速緩存512、常數(shù)LI高速緩存514、數(shù)據(jù)LI高速緩存516和/或一致性LI高速緩存518。PPU也包括耦合到每個SPM510的LI.5高速緩存520。L2高速緩存互連耦合到每個SPM510、LI.5高速緩存520和L2高速緩存524中。L2高速緩存524耦合到PPU存儲器526。在一個實(shí)施例中,每個PPU502都相當(dāng)于圖2中所顯示的PPU202,并且每個SPM510都相當(dāng)于在圖3C中所顯示的SPM310。例如,如同在圖3C中所顯示的,指令LI高速緩存512相當(dāng)于指令LI高速緩存370,數(shù)據(jù)LI高速緩存516相當(dāng)于LI高速緩存320,并且一致性LI高速緩存518相當(dāng)于一致性LI高速緩存375。LI.5高速緩存520可以相當(dāng)于在圖3A中所顯示的LI.5高速緩存335。L2高速緩存524可以相當(dāng)于如在圖3B中所顯示的L2高速緩存350。在圖5所舉例說明的示意圖中,僅僅顯示了并行線程處理器架構(gòu)中并行高速緩存層級的一種實(shí)現(xiàn)方式,具有被稱為流多處理器(SPM)510的數(shù)量可擴(kuò)展的線程處理器。在一個實(shí)施例中,warp調(diào)度器和指令單元312也被包括在SPM510中,從并行線程向并行執(zhí)行單元302和并行加載-存儲單元303提供指令,如同在圖3C中所描述的。在圖5所示的實(shí)施例中,每個SPM510都包括多個不同的LI高速緩存L1指令高速緩存512、L1常數(shù)高速緩存514、L1數(shù)據(jù)高速緩存516以及一致性數(shù)據(jù)LI高速緩存518。SPM510和LI高速緩存經(jīng)由高速緩存互連網(wǎng)絡(luò)522來共享統(tǒng)一的L2高速緩存524。在一些實(shí)施例中,在LI高速緩存和L2高速緩存之間提供了輔助的高速緩存層,即,LI.5高速緩存520。L2高速緩存524訪問PPUDRAM存儲器526,經(jīng)由PCIe接口來訪問系統(tǒng)存儲器508,以及可選地,經(jīng)由PCIe接口訪問輔助的對等設(shè)備存儲器。對等(peer)設(shè)備存儲器的實(shí)例是與附屬于同一PCIe網(wǎng)絡(luò)的另一個PPU的DRAM存儲器。SPM加載-存儲單元(LSU)303(在圖3C中所顯示的)執(zhí)行存儲器訪問指令,包括如下所列的加載、存儲和高速緩存控制指令I(lǐng)d{.cop}.szrd,[ra+offset];//從存儲器加載ldu.szrd,[ra+offset];//經(jīng)由一致性高速緩存加載st{.cop}.sz[ra+offset],rb;//存儲到存儲器中cctl.cache.op{rd,}[ra+offset];//高速緩存控制操作如同在此所使用的,術(shù)語“加載(load)”描述了從存儲器讀取并返回值的指令,而術(shù)語“存儲(store)”描述了將值寫到存儲器中的指令。一些指令,例如原子和鎖操作,會修改存儲器并返回值,并且應(yīng)該被看作兼?zhèn)浼虞d和存儲的語義,因此,同時遵循加載和存儲的規(guī)則。下面對加載指令和存儲指令“高速緩存操作”(.cop)加以描述。下面還對高速緩存控制指令cctl加以描述。用于加載和存儲指令的高速緩存操作加載和存儲指令在由地址操作數(shù)所指定的有效地址上對存儲器進(jìn)行讀取或者寫入。.sz后綴指定了將要讀取或者寫入存儲器中的字節(jié)大小,并且SPM指令集架構(gòu)(ISA)可以支持1、2、4-、8和16個字節(jié)的大小用于加載/存儲指令。有效存儲器地址是寄存器ra加上立即數(shù)offset(偏移)的字節(jié)總和。ld{.cop}.szrd,[ra+offset]-J/從存儲器加載rdst{.cop}.sz[ra+offset],rb-J/將rb存儲到存儲器中在一些實(shí)施例中,SPM510使用32比特的地址,以及使用指定有后綴.e的64比特的擴(kuò)充地址,實(shí)現(xiàn)了兩個版本的存儲器存取指令(即,指令I(lǐng)d.e和st.e)。加載指令高速緩存操作Id.cop加載指令具有可選的由.cop所指定的高速緩存操作,編譯程序和/或程序員可以用來優(yōu)化對全局存儲器空間和對本地每個線程的專用存儲器空間進(jìn)行訪問的高速緩存使用。依賴于由系統(tǒng)軟件和PPU存儲器管理單元(MMU)頁表(pagetable)所提供的虛擬地址到物理地址的映射,全局的和本地的存儲器訪問可以映射到PPU(DRAM)存儲器526、系統(tǒng)存儲器508和PCIe設(shè)備存儲器。在一種實(shí)現(xiàn)方案中,對共享存儲器RAM的訪問忽略了高速緩存操作,但是對共享存儲器空間進(jìn)行高速緩存的實(shí)現(xiàn)方案則可以使用高速緩存操作。關(guān)于加載指令I(lǐng)d{.cop}和Id.e{.cop}的可選高速緩存操作是.ca在所有級別(level)上進(jìn)行高速緩存,有可能被再次訪問(缺省值).eg在全局級別上進(jìn)行高速緩存(在L2和之下的級別,非LI上進(jìn)行高速緩存).CS高速緩存流,有可能被訪問一次,繞過高速緩存或者提前回收(evict).Iu最后使用如果地址是每個線程的本地地址,并且高速緩存線被完全地覆蓋(由warp的線程來訪問在高速緩存線中的所有數(shù)據(jù)),則加載然后使該線無效并且取消任何待定的臟回寫,否則加載并且將高速緩存線標(biāo)記為回收優(yōu)先?!op的編碼與.CS的相同。.Cv如果地址是在系統(tǒng)存儲器中,則以易失(volatile)的方式進(jìn)行高速緩存;認(rèn)為高速緩存的系統(tǒng)存儲器線失去時效時,再次獲取。缺省的Id指令高速緩存操作是Id.ca,其在所有級別(LI和L2)上用正常的回收策略來分配高速緩存線。在一個實(shí)施例中,當(dāng)應(yīng)用程序希望多次訪問同一個高速緩存線,并且希望其訪問命中在LI高速緩存的工作集中的時候,應(yīng)用程序可以使用這個指令。全局?jǐn)?shù)據(jù)在L2高速緩存級別中是連貫的(coherent),但是在一種實(shí)現(xiàn)方案中,在每個SPM中的多個LI高速緩存對于全局?jǐn)?shù)據(jù)來說并非彼此連貫。如果一個線程經(jīng)由一個LI高速緩存存儲到全局存儲器,并且在不同的SPM中的第二個線程使用Id.ca經(jīng)由第二個LI高速緩存來加載那個地址,那么第二個線程可能得到的是失去時效的LI高速緩存數(shù)據(jù),而不是由第一個線程所存儲的數(shù)據(jù)。由此,驅(qū)動器將會使全局LI高速緩存線在并行線程的從屬柵格之間無效。如同下面所要詳細(xì)描述的,程序還可以使用高速緩存控制指令cctl來使LI高速緩存線無效。隨后由第二個柵格程序正確地獲取由第一個柵格程序所進(jìn)行的存儲,該第二個柵格程序發(fā)布被高速緩存在LI高速緩存中的缺省的Id.ca加載。這個指令支持可選的實(shí)現(xiàn)方案,其提供了在多個LI高速緩存中的高速緩存連貫性。可供選擇地,程序可以利用如下所述的Id.eg加載高速緩存全局操作,來繞過LI高速緩存級別,以避免讀取失去時效的LI數(shù)據(jù)。在一個實(shí)施例中,指令I(lǐng)d.Cg僅用于全局的高速緩存加載,繞過LI高速緩存并且僅在全局的(L2高速緩存)級別上進(jìn)行高速緩存。當(dāng)應(yīng)用程序希望讀取一次地址時,并且在相對較小的LI高速緩存中減少工作集的擾動的時候,其可以使用這個指令。這個指令使不同SPM中的線程之間能夠通信。該Id.cs加載高速緩存流操作,使用回收-優(yōu)先策略在LI和L2中分配全局線,以限制由臨時性流數(shù)據(jù)導(dǎo)致的高速緩存污染,該臨時性流數(shù)據(jù)可被訪問一次或兩次。在另一個實(shí)施例中,流數(shù)據(jù)可以經(jīng)由小的流高速緩存或者與每個高速緩存相鄰的先入先出(FIFO)來繞過LI和L2高速緩存,以便流數(shù)據(jù)不會干擾LI或者L2的工作集。當(dāng)將Id.cs用于本地窗口地址時,其執(zhí)行如下所述的Id.Iu操作。該Id.Iu加載最后使用操作,當(dāng)被應(yīng)用于本地每線程私有的地址的時候,如果本地LI高速緩存線被完全覆蓋(該高速緩存線中的所有數(shù)據(jù)被warp的線程讀取),則該操作在加載之后將該線無效(即,如果自在先的存儲起該線是臟的,則丟棄和取消該線的任何待定的臟的回寫)。當(dāng)要恢復(fù)溢出的寄存器以及彈出功能堆棧幀時,編譯器和/或程序員可以使用Id.Iu以避免對不會被再次使用的線進(jìn)行不必要的回寫。Id.Iu指令具有與Id.cs相同的高速緩存操作.cop編碼,并且Id.Iu指令執(zhí)行在全局地址上的加載高速緩存流操作。該Id.CV加載高速緩存易失操作被應(yīng)用于全局的系統(tǒng)存儲器地址,其使匹配的L2線無效(即,丟棄)并且對于每個新的加載進(jìn)行線的重新獲取,以允許線程程序輪詢由CPU寫入的系統(tǒng)存儲器的位置。如表I所示,應(yīng)用于PPUDRAM地址的Id.cv與Id.cs相同,回收-優(yōu)先。LD.cop[全局地址丨LD.cop[本地地址].copLIL2DRAML2SvsMem.copLIL2.ca*回收-正?;厥?正?;厥?正常.ca*回收-正?;厥?正常.eg不-緩存[I]回收-正?;厥?正常.eg回收-優(yōu)先回收-正常cs回收-優(yōu)先回收-優(yōu)先回收-優(yōu)先.Iu最后使用[2]回收-優(yōu)先.CV不-緩存[I]回收-優(yōu)先獲取易失的[3].CV回收-優(yōu)先回收-優(yōu)先表I*指示缺省值。[I]在Id.eg或者Id.cv之前,LI使匹配的線無效。在這個實(shí)現(xiàn)方案中,LI不是連貫的-其沒有對全局的寫進(jìn)行監(jiān)聽,所以匹配的LI線可能會失去時效。在Id.eg或者Id.cv之后,在LI中沒有留下記錄。[2]只有在線被完全覆蓋(其所有數(shù)據(jù)均由warp的線程讀取)的時候,LI將會返回本地的每線程的數(shù)據(jù),然后使線無效并且取消待定的臟的回寫取消;否則,其將返回該線并且以回收-優(yōu)先的方式加以保留。[3]應(yīng)用于系統(tǒng)存儲器的加載易失高速緩存Id.cv使匹配的L2線無效并且對于每個新的加載進(jìn)行線的重新獲取,以允許線程程序輪詢由CPU寫入的SysMem位置。L2可以將爆發(fā)的加載合并(coalesce)到同一個SysMem地址。應(yīng)用于巾貞緩沖DRAM地址的Id.cv與Id.CS相同,回收-優(yōu)先。存儲指令高速緩存操作St.cop與上述加載指令類似,存儲指令具有可選的由.cop所指定的高速緩存操作,編譯器和程序員可以用其來優(yōu)化對全局存儲器空間和本地每個線程的專用存儲器空間進(jìn)行訪問的高速緩存使用。關(guān)于存儲指令st{.cop}和st.e.{.cop}的可選高速緩存操作是.wb回寫全部連貫的級別(缺省值).eg在全局級別進(jìn)行高速緩存(在L2和以下的級別,而非LI上進(jìn)行高速緩存).eg高速緩存流,有可能被寫入一次(繞過高速緩存或者提前回收.wt高速緩存透寫(write-through)(對于在系統(tǒng)存儲器中的地址)在一個實(shí)施例中,當(dāng)將共享存儲器實(shí)現(xiàn)為RAM的時候,忽略對共享存儲器的高速緩存操作。與那些用于全局存儲器的高速緩存操作相比,對于本地存儲器的高速緩存操作可以具有不同的含義。缺省的st通用存儲高速緩存操作是存儲回寫(write-back)st.wb,其利用正常的回收策略回寫連貫高速緩存級別的高速緩存線。,利用回寫將被存儲到本地每線程的存儲器中的數(shù)據(jù)在LI高速緩存和L2高速緩存中進(jìn)行高速緩存。然而,在一個實(shí)施例中,由于對于全局?jǐn)?shù)據(jù)來說多個LI高速緩存是不連貫的,因此不對LI中的全局存儲數(shù)據(jù)進(jìn)行高速緩存。全局存儲繞過了LI高速緩存并且將任何匹配的LI高速緩存線丟棄,而不考慮.cop高速緩存操作。其它的實(shí)施例可提供全局連貫的LI高速緩存,并且st.wb可以從LI高速緩存中回寫臟的全局儲存數(shù)據(jù)。在表2所示的一個實(shí)施例中,如果一個線程繞過其LI高速緩存器存儲到全局存儲器,并且在不同的SPM中的第二個線程隨后利用Id.ca經(jīng)由不同的LI高速緩存來加載那個地址,那么第二個線程可能命中失去時效的LI高速緩存數(shù)據(jù),而不是從L2或者存儲器得到由第一個線程所存儲的數(shù)據(jù)。相應(yīng)地,驅(qū)動器必須使線程陣列的附屬柵格之間的全局LI高速緩存線無效。然后由第一格柵程序進(jìn)行的存儲會在LI高速緩存中得到正確地忽略,并被發(fā)布了缺省Id.ca加載的第二柵格程序所獲取。該高速緩存操作st.eg全局高速緩存,僅全局性地用于對全局儲存數(shù)據(jù)進(jìn)行高速緩存,繞過LI高速緩存,以及僅在L2高速緩存中進(jìn)行高速緩存。在表2所顯示的一種實(shí)現(xiàn)方案中,st.eg高速緩存全局策略還可用于針對全局?jǐn)?shù)據(jù)的st.wb指令,但是針對本地存儲器的st.eg使用LI高速緩存,并且將本地LI線標(biāo)記為回收-優(yōu)先。該st.cs存儲高速緩存流操作,利用回收-優(yōu)先策略在L2高速緩存(和LI高速緩存,如果是本地的話)中分配高速緩存線,以限制由流輸出數(shù)據(jù)導(dǎo)致的高速緩存污染;全局流數(shù)據(jù)繞過LI。自程序發(fā)布一次流寫入后,st.cs的另一個實(shí)現(xiàn)方案將使流數(shù)據(jù)經(jīng)由小的流高速緩存或者與每個高速緩存相鄰接的先入先出(FIFO)來繞過LI和L2高速緩存,以使流數(shù)據(jù)不會對LI高速緩存或者L2高速緩存的工作集形成干擾。該st.wt存儲透寫操作,被應(yīng)用于全局系統(tǒng)存儲器地址,其將對L2高速緩存進(jìn)行透寫操作,以允許CPU程序利用St.Wt來輪詢由PPU所寫入的系統(tǒng)存儲器位置。在一個實(shí)現(xiàn)方案中,不在系統(tǒng)存儲器中的地址使用正常的L2回寫。存儲指令高速緩存操作的一個實(shí)施例采用在表2中所示的高速緩存操作策略。權(quán)利要求1.一種用于管理處理單元中的并行高速緩存層級的方法,該方法包括從調(diào)度器單元接收指令,其中所述指令包括加載指令或者存儲指令;確定所述指令包括高速緩存操作修飾符,所述修飾符識別用于在所述并行高速緩存層級的一個或多個級別上對與所述指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存的策略;以及執(zhí)行所述指令,并且基于所述高速緩存操作修飾符對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)進(jìn)行高速緩存。2.如權(quán)利要求I的方法,其中所述指令進(jìn)一步地與識別存儲器區(qū)域的地址相關(guān)聯(lián),其中用于對數(shù)據(jù)進(jìn)行高速緩存的所述策略以所述存儲器區(qū)域為基礎(chǔ)。3.如權(quán)利要求2的方法,其中如果所述地址位于本地存儲器區(qū)域之中,則對所述數(shù)據(jù)進(jìn)行高速緩存,并且如果所述地址位于全局區(qū)域中,則不對所述數(shù)據(jù)進(jìn)行高速緩存。4.如權(quán)利要求I的方法,其中所述并行高速緩存層級包括LI高速緩存級別以及L2高速緩存級別。5.如權(quán)利要求4的方法,其中包括在所述處理單元中的每個處理器都包括位于所述LI高速緩存級別上的不同的LI高速緩存,所述L2高速緩存級別包括每個處理器經(jīng)配置均可對其進(jìn)行訪問的至少一個L2高速緩存。6.如權(quán)利要求4的方法,其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)在LI高速緩存級別和L2高速緩存級別上進(jìn)行高速緩存。7.如權(quán)利要求6的方法,其中利用回收-優(yōu)先的回收策略,對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)在所述LI高速緩存級別和所述L2高速緩存級別的每一者上進(jìn)行高速緩存。8.如權(quán)利要求4的方法,其中實(shí)現(xiàn)所述高速緩存操作修飾符,以在加載指令之后,無效和丟棄被高速緩存在所述LI高速緩存中的所述數(shù)據(jù)。9.如權(quán)利要求4的方法,其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)在所述L2高速緩存級別上進(jìn)行高速緩存,而非在所述LI高速緩存級別上進(jìn)行聞速緩存。10.如權(quán)利要求9的方法,其中利用回收-優(yōu)先的回收策略,對與所述指令相關(guān)的所述數(shù)據(jù)在所述L2高速緩存級別上進(jìn)行高速緩存。11.如權(quán)利要求I的方法,其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得利用回寫策略或者透寫策略,對與存儲指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存。12.如權(quán)利要求I的方法,其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得利用易失性始終獲取策略,對與加載指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存。13.一種用于管理并行高速緩存層級的系統(tǒng),該系統(tǒng)包括處理器,其被配置為接收指令,其中所述指令包括加載指令或者存儲指令,確定所述指令包括高速緩存操作修飾符,所述修飾符識別用于在所述并行高速緩存層級的一個或多個級別上對與所述指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存的策略,以及執(zhí)行所述指令,并且基于所述高速緩存操作修飾符對與所述指令相關(guān)聯(lián)的所述數(shù)據(jù)進(jìn)行高速緩存。14.如權(quán)利要求13的系統(tǒng),其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得利用回寫策略或者透寫策略,對與存儲指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存。15.如權(quán)利要求13的系統(tǒng),其中實(shí)現(xiàn)所述高速緩存操作修飾符,以使得利用易失性始終獲取策略,對與加載指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存。全文摘要一種用于管理處理單元中的并行高速緩存層級的方法。該方法包括從調(diào)度器單元接收指令,其中該指令包括加載指令或存儲指令;確定該指令包括高速緩存操作修飾符,該修飾符識別用于在并行高速緩存層級的一個或多個級別上對與指令相關(guān)的數(shù)據(jù)進(jìn)行高速緩存的策略;以及執(zhí)行該指令,并且基于該高速緩存操作修飾符對與該指令相關(guān)聯(lián)的數(shù)據(jù)進(jìn)行高速緩存。文檔編號G06F9/30GK102713837SQ201080053153公開日2012年10月3日申請日期2010年9月23日優(yōu)先權(quán)日2009年9月23日發(fā)明者布雷特·W·庫恩,約翰·R·尼科爾斯,邁克爾·C·希巴儂申請人:輝達(dá)公司