專利名稱:計(jì)算線程陣列粒度執(zhí)行搶占的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總地涉及程序執(zhí)行搶占(preemption),并且更具體地涉及計(jì)算線程陣列粒度執(zhí)行搶占。
背景技術(shù):
搶占是一種在多個不同的應(yīng)用之間對處理器進(jìn)行時間切片的機(jī)制。當(dāng)多個不同的應(yīng)用需要同時使用處理器時,一種實(shí)現(xiàn)所有應(yīng)用上的前向進(jìn)度的方式是使每個應(yīng)用在處理器上運(yùn)行短時間切片。傳統(tǒng)上,時間切片要求處理器管線被完全耗盡并且當(dāng)處理器空閑時不同的應(yīng)用被接入以由處理器管線執(zhí)行。這種時間切片機(jī)制被稱為“等待空閑”搶占,并且該機(jī)制在處理器花費(fèi)長時間來耗盡正在處理器管線上運(yùn)行的工作時工作不良。例如,考慮很長時間運(yùn)行的圖形著色程序或者在最差的情況下為具有無限循環(huán)的著色程序。為了能夠在不同應(yīng)用之間進(jìn)行時間切片,為使每個應(yīng)用的執(zhí)行空閑而需要的時間量應(yīng)該被限制,從而使得長時間運(yùn)行的應(yīng)用實(shí)際上不會縮減可用于其他應(yīng)用的時間切片。被考慮來實(shí)施搶占的另一種機(jī)制是中止或凍結(jié)處理器并且然后存儲處理器內(nèi)的所有寄存器和管線觸發(fā)器的內(nèi)容且稍后恢復(fù)處理器內(nèi)的所有寄存器和管線觸發(fā)器的內(nèi)容。存儲和恢復(fù)所有寄存器和管線觸發(fā)器的內(nèi)容通常導(dǎo)致非常大量的狀態(tài)要被保存和恢復(fù)。存儲和恢復(fù)狀態(tài)所需要的時間縮減了在時間切片期間可用于執(zhí)行每個應(yīng)用的時間。因此,本領(lǐng)域所需要的是一種用于執(zhí)行搶占的系統(tǒng)和方法,其不要求在搶占應(yīng)用時存儲應(yīng)用的整個狀態(tài)也不要求等待處理管線變成空閑以搶占應(yīng)用。
發(fā)明內(nèi)容
一種用于計(jì)算線程陣列粒度執(zhí)行搶占的系統(tǒng)和方法。當(dāng)發(fā)起搶占時,上下文狀態(tài)從處理管線被卸載。當(dāng)在計(jì)算線程陣列邊界執(zhí)行搶占時,要存儲的上下文狀態(tài)量得以縮減,因?yàn)樘幚砉芫€內(nèi)的執(zhí)行單元完成對進(jìn)行中的指令的執(zhí)行并且變成空閑。如果完成對進(jìn)行中指令的執(zhí)行所需要的時間量超出閾值,則搶占可動態(tài)地改變?yōu)樵谥噶罴壎窃谟?jì)算線程陣列粒度執(zhí)行。用于在多線程系統(tǒng)中搶占程序指令的執(zhí)行的本發(fā)明的方法的各個實(shí)施例包括,使用第一上下文在所述多線程系統(tǒng)內(nèi)在處理管線中執(zhí)行程序指令。在計(jì)算線程陣列級搶占使用所述第一上下文的執(zhí)行以使用第二上下文在所述多線程系統(tǒng)中執(zhí)行不同的程序指令。存儲使用所述第一上下文的程序指令的執(zhí)行被搶占的指示,以及使用所述第二上下文在所述處理管線中執(zhí)行所述不同的程序指令。本發(fā)明的各個實(shí)施例包括用于搶占程序指令的執(zhí)行的多線程系統(tǒng)。多線程系統(tǒng)包括存儲器、主機(jī)接口和處理管線。存儲器配置為存儲對應(yīng)于第一上下文的程序指令和對應(yīng)于第二上下文的不同的程序指令。主機(jī)接口耦合到處理管線并且配置為在計(jì)算線程陣列級搶占使用所述第一上下文的程序指令的執(zhí)行以使用第二上下文執(zhí)行不同的程序指令。處理管線配置為:使用第一上下文執(zhí)行程序指令;搶占使用所述第一上下文的程序指令的執(zhí)行以使用第二上下文執(zhí)行不同的程序指令;存儲使用所述第一上下文的程序指令的執(zhí)行被搶占的指示;以及使用所述第二上下文執(zhí)行所述不同的程序指令。所述搶占機(jī)制最小化在搶占應(yīng)用時保存的且在應(yīng)用繼續(xù)執(zhí)行時恢復(fù)的狀態(tài)量。另夕卜,長時間運(yùn)行的應(yīng)用可以在很短的時間量中被搶占。
因此,可以詳細(xì)地理解上述列舉的本發(fā)明的特征,并且可以參考實(shí)施例得到對上面所概括的本發(fā)明的更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)該注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,因?yàn)楸景l(fā)明可以承認(rèn)其他等效的實(shí)施例。圖1是示出了配置為實(shí)現(xiàn)本發(fā)明一個或多個方面的計(jì)算機(jī)系統(tǒng)的框圖;圖2是根據(jù)本發(fā)明一個實(shí)施例的用于圖1的計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;圖3A是根據(jù)本發(fā)明一個實(shí)施例的圖2的任務(wù)/工作單元的框圖;圖3B是根據(jù)本發(fā)明一個實(shí)施例的在圖2的一個并行處理單元內(nèi)的通用處理集群的框圖;圖4是根據(jù)本發(fā)明一個實(shí)施例的處理管線的框圖;圖5A示出了根據(jù)本發(fā)明一個實(shí)施例的用于在搶占過程時卸載上下文狀態(tài)的卸載方法;圖5B示出了根據(jù)本發(fā)明一個實(shí)施例的用于在恢復(fù)搶占的過程時恢復(fù)上下文狀態(tài)的恢復(fù)方法;圖6A示出了根據(jù)本發(fā)明一個實(shí)施例的用于在搶占過程時卸載上下文狀態(tài)的另一種卸載方法;圖6B示出了根據(jù)本發(fā)明一個實(shí)施例的用于在恢復(fù)搶占的過程時恢復(fù)上下文狀態(tài)的另一種恢復(fù)方法。
具體實(shí)施例方式在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更透徹的理解。然而,對本領(lǐng)域的技術(shù)人員顯而易見的是本發(fā)明可以在沒有一個或多個這些具體細(xì)節(jié)的情況下得以實(shí)施。在其他例子中,沒有描述公知的特征以避免對本發(fā)明造成混淆。系統(tǒng)概述圖1是示出了經(jīng)配置以實(shí)現(xiàn)本發(fā)明的一個或多個方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括中央處理單元(CPU) 102和經(jīng)由可以包括存儲器橋105的互連路徑通信的系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106(例如超傳輸(HyperTransport)鏈路)連接至Ij I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個或多個用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由路徑106和存儲器橋105將所述輸入轉(zhuǎn)發(fā)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或其他通信路徑113 (例如PCI Express、加速圖形端口或超傳輸鏈路)耦合到存儲器橋105 ;在一個實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110 (例如傳統(tǒng)的基于CRT或IXD的監(jiān)視器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關(guān)116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他組件之間的連接。其他組件(未明確示出),包括USB或其他端口連接、⑶驅(qū)動器、DVD驅(qū)動器、膠片錄制設(shè)備及類似組件,也可以連接到I/O橋107。使圖1中各種組件互連的通信路徑可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PCI (外圍組件互連)、PC1-Express、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且不同設(shè)備間的連接可使用本領(lǐng)域已知的不同協(xié)議。在一個實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個實(shí)施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成起來,諸如存儲器橋105、CPU 102以及I/O橋107,以形成片上系統(tǒng)(SoC)。應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)洌虻臄?shù)量和布置、CPU 102的數(shù)量以及并行處理子系統(tǒng)112的數(shù)量,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接連接到CPU 102而不是通過橋,并且其他設(shè)備經(jīng)由存儲器橋105和CPU 102與系統(tǒng)存儲器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。而在其他實(shí)施例中,I/O橋107和存儲器橋105可能被集成到單個芯片上。大量實(shí)施例可以包括兩個或兩個以上的CPU 102以及兩個或兩個以上的并行處理系統(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包括一個或多個并行處理單元(PI3U) 202,每個并行處理單元202都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,類似對象的多個實(shí)體以標(biāo)識該對象的參考數(shù)字和需要時標(biāo)識所述實(shí)體的括號中的數(shù)字來表示。)PPU 202和并行處理存儲器204可使用一個或多個集成電路設(shè)備來實(shí)現(xiàn),諸如可編程處理器、專用集成電 路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。再參考圖1,在一些實(shí)施例中,并行處理子系統(tǒng)112的一些或所有PPU202是具有渲染管線的圖形處理器,它可以經(jīng)配置以執(zhí)行與下述相關(guān)的各種操作:經(jīng)由存儲器橋105和總線113從CPU 102和/或系統(tǒng)存儲器104所提供的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù),與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常用幀緩沖區(qū)(buffer))交互以存儲和更新像素?cái)?shù)據(jù),傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU 202以及包括一個或多個用于通用計(jì)算的其他PPU 202。這些PI3U可以是相同的或不同的,并且每個PPU均可具有其自己的專用并行處理存儲器設(shè)備或不具有專用的并行處理存儲器設(shè)備。一個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110,或者每個PPU 202均可輸出數(shù)據(jù)到一個或多個顯示設(shè)備110。在操作中,CPU 102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)組件的操作。具體地,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實(shí)施例中,CPU 102為每個PPU 202寫入命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),所述數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU 102和PPU 202都可訪問的其他存儲位置中。將指向每個數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以啟動對數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個或多個入棧緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令??梢詾槊總€入棧緩沖區(qū)指定執(zhí)行優(yōu)先權(quán)以控制對不同入棧緩沖區(qū)的調(diào)度?,F(xiàn)在返回參考圖2B,每個PPU 202均包括經(jīng)由連接到存儲器橋105 (或者,在一個替代性實(shí)施例中,直接連接到CPU 102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU 202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112可作為插卡來實(shí)現(xiàn),所述插卡可被插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中。在其他實(shí)施例中,PI3U 202可以和諸如存儲器橋105或I/O橋107的總線橋一起集成在單個芯片上。而在其他實(shí)施例中,PPU 202的一些或所有元件可以和CPU102 一起集成在單個芯片上。在一個實(shí)施例中,通信路徑113是PC1-EXPRESS鏈路,如本領(lǐng)域所知的,在PC1-EXPRESS鏈路中專用通道被分配到每個PPU 202。I/O單元205生成用于在通信路徑113上傳輸?shù)臄?shù)據(jù)包(或其他信號),并且還從通信路徑113接收所有傳入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引導(dǎo)到PPU 202的適當(dāng)組件。例如,可將與處理任務(wù)有關(guān)的命令引導(dǎo)到主機(jī)接口 206,而可將與存儲器操作有關(guān)的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口 206讀取每個入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。有利地,每個PPU 202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU 202 (O)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC 208都能夠并發(fā)執(zhí)行大量的(·例如,幾百或幾千)線程,其中每個線程均是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC208用于處理不同類型的程序或用于執(zhí)行不同類型的計(jì)算。取決于因每種類型的程序或計(jì)算所產(chǎn)生的工作量,GPC 208的分配可以變化。GPC 208從任務(wù)/工作單元207內(nèi)的工作分布單元來接收將要執(zhí)行的處理任務(wù)。所述工作分布單元接收指向被編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲在存儲器中的計(jì)算處理任務(wù)的指針。指向TMD的指針被包括在存儲為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢员痪幋a為TMD的處理任務(wù)包括將被處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個TMD所指定的處理啟動前,將GPC 208配置為有效狀態(tài)??梢詾槊總€TMD指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先權(quán)。存儲器接口 214包括D個分區(qū)單元215,每個分區(qū)單元215均直接耦合到一部分并行處理存儲器204,其中DS I。如所示的,分區(qū)單元215的數(shù)量一般等于DRAM 220的數(shù)量。在其他實(shí)施例中,分區(qū)單元215的數(shù)量也可以不等于存儲器設(shè)備的數(shù)量。本領(lǐng)域的技術(shù)人員應(yīng)該理解DRAM 220可以用其他合適的存儲設(shè)備來替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM 220加以存儲,這允許分區(qū)單元215并行寫入每個渲染目標(biāo)的各部分以有效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理將要被寫到并行處理存儲器204內(nèi)的任意DRAM 220的數(shù)據(jù)。交叉開關(guān)單元210經(jīng)配置以路由每個GPC 208的輸出到任意分區(qū)單元215的輸入或到另一個GPC 208用于進(jìn)一步處理。GPC 208通過交叉開關(guān)單元210與存儲器接口 214通信,以對各種外部存儲器設(shè)備進(jìn)行讀取或?qū)懭?。在一個實(shí)施例中,交叉開關(guān)單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或?qū)τ赑PU 202而言非本地的其他存儲器通信。在圖2所示的實(shí)施例中,交叉開關(guān)單元210直接與I/O單元205連接。交叉開關(guān)單元210可使用虛擬信道來分開GPC 208與分區(qū)單元215之間的事物流。另外,GPC 208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色、頂點(diǎn)著色、幾何著色、和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204傳送到內(nèi)部(片上)存儲器中,處理所述數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)組件訪問,所述其他系統(tǒng)組件包括CPU 102或另一個并行處理子系統(tǒng)112。PPU 202可配備有任意容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任意組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實(shí)施例中,PPU 202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實(shí)施例中,PPU 202可被集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PC1-EXPRESS)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信方式將PPU202連接到系統(tǒng)存儲器。如上所述,并行處理子系統(tǒng)112可以包括任意數(shù)量的PPU 202。例如,可在單個插卡上提供多個PPU 202、或可將多個插卡連接到存儲路徑113、或可將一個或多個PPU 202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU 202可以彼此相同或不同。例如,不同的PPU202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在出現(xiàn)多個PPU202的情況下,可并行操作那些PI3U從而以高于單個PPU 202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。多個并發(fā)任務(wù)調(diào)度可以在GPC 208上并發(fā)執(zhí)行多個處理任務(wù)并且處理任務(wù)在執(zhí)行期間可以生成一個或多個“子”處理任務(wù)。任務(wù)/工作單元207接收任務(wù)并動態(tài)調(diào)度處理任務(wù)和子處理任務(wù)以由GPC 208執(zhí)行。圖3A是根據(jù)本發(fā)明一個實(shí)施例的圖2的任務(wù)/工作單元207的框圖。任務(wù)/工作單元207包括任務(wù)管理單元300和工作分布單元340。任務(wù)管理單元300基于執(zhí)行優(yōu)先級來組織將要被調(diào)度的任務(wù)。對于每個優(yōu)先級,任務(wù)管理單元300將指向?qū)?yīng)于任務(wù)的TMD322的指針鏈表存儲在調(diào)度器表321中??梢詫MD 322存儲在PP存儲器204或系統(tǒng)存儲器104中。任務(wù)管理單元300接受任務(wù)并將任務(wù)存儲在調(diào)度器表321中的速度與任務(wù)管理單元300調(diào)度任務(wù)以執(zhí)行的速度是解耦的,這使得任務(wù)管理單元300能夠基于優(yōu)先權(quán)信息或使用其他技術(shù)來調(diào)度任務(wù)。工作分布單元340包括具有槽的任務(wù)表345,每個槽均可以被正在被執(zhí)行的任務(wù)的TMD 322所占用。當(dāng)任務(wù)表345中有空閑槽時,任務(wù)管理單元300可以調(diào)度任務(wù)以執(zhí)行。當(dāng)沒有空閑槽時,沒有占用槽的較高優(yōu)先權(quán)任務(wù)可以驅(qū)逐占用槽的較低優(yōu)先權(quán)任務(wù)。當(dāng)任務(wù)被驅(qū)逐時,該任務(wù)被停止,并且如果該任務(wù)的執(zhí)行沒有完成,則將該任務(wù)添加到調(diào)度器表321中的鏈表。當(dāng)生成子處理任務(wù)時,將該子處理任務(wù)添加到調(diào)度器表321中的鏈表。當(dāng)任務(wù)被驅(qū)逐時,從槽移除該任務(wù)。任務(wù)處理概述圖3B是根據(jù)本發(fā)明一個實(shí)施例的、圖2的一個PPU 202內(nèi)的GPC 208的框圖。每個GPC 208可被配置為并行地執(zhí)行大量線程,其中術(shù)語“線程”是指對特定的一組輸入數(shù)據(jù)執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,采用單指令多數(shù)據(jù)(SIMD)指令發(fā)送技術(shù)來支持大量線程的并行執(zhí)行,而無需提供多個獨(dú)立指令單元。在另一些實(shí)施例中,采用單指令多線程(SMT)技術(shù),使用被配置為發(fā)送指令到每一個GPC 208內(nèi)一組處理引擎的公共指令單元,來支持大量通常同步化的線程的并行執(zhí)行。不同于其中所有處理引擎一般都執(zhí)行相同指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行允許不同的線程更容易跟隨(follow)通過給定線程程序的發(fā)散的執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員將理解的是,SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。經(jīng)由管線管理器305來有利地控制GPC 208的操作,所述管線管理器305將處理任務(wù)分布到流多處理器(SM) 310。管線管理器305也可被配置為通過為由SM 310輸出的處理后的數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。在一個實(shí)施例中,每個GPC 208均包括M個SM 310,其中M彡I,每個SM 310均被配置為處理一個或多個線程組。而且,每個SM 310有利地還包括同樣的一組可被管線化的功能執(zhí)行單元,從而允許在前一個指令結(jié)束之前發(fā)送新的指令,如本領(lǐng)域所已公知的??商峁┕δ軋?zhí)行單元的任何組合。在一個實(shí)施例中,這些功能單元支持多種運(yùn)算,包括整數(shù)和浮點(diǎn)算法(例如,加法和乘法)、比較運(yùn)算、布爾運(yùn)算(AND、OR、X0R)、移位以及各種代數(shù)函數(shù)的計(jì)算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可均衡地用于(be leveraged to)執(zhí)行不同運(yùn)算。傳送到特定GPC 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ù)的時鐘周期上進(jìn)行。由于每個SM 310可以支持多達(dá)G個線程組并發(fā)執(zhí)行,所以在任一給定時間都可以允許多達(dá)GXM個線程組在GPC 208中執(zhí)行。另外,在SM 310內(nèi),多個相關(guān)的線程組可同時活動(處于不同執(zhí)行階段)。這種線程組的集合在本文中被稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于mXk,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SM 310內(nèi)處理引擎的數(shù)量的整數(shù)倍,m是SM 310內(nèi)同時活動的線程組的數(shù)量。CTA的大小通常由編程人員和CTA可用的硬件資源例如存儲器或寄存器的容 量決定。每個SM 310均包括一級(LI)高速緩存,或使用在SM 310之外對應(yīng)的LI高速緩存中用以執(zhí)行加載和存儲操作的空間。每個SM 310也有權(quán)訪問二級(L2)高速緩存,它們在所有GPC 208之間被共享并且可用于在線程之間傳送數(shù)據(jù)。最后,SM 310也有權(quán)訪問片外“全局”存儲器,該存儲器可以包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。應(yīng)予以理解的是,PPU202外部的任何存儲器都可被用作全局存儲器。此外,一點(diǎn)五級(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的實(shí)施例有利地共享被高速緩存于L1.5高速緩存335中的公共指令和數(shù)據(jù)。每個GPC 208可包括存儲器管理單元(MMU) 328,該單元被配置為將虛擬地址映射到物理地址。在另一些實(shí)施例中,MMU 328可處于存儲器接口 214內(nèi)。MMU 328包括一組頁表?xiàng)l目(PTE)以及可選地包括高速緩存線索引(cache line index),該組PTE被用于將虛擬地址映射到像素塊(tile)的物理地址。MMU 328可包括地址轉(zhuǎn)譯后備緩沖區(qū)(translationlookaside buffer,TLB)或高速緩存,其可處于多處理器SM 310或LI高速緩存或GPC 208內(nèi)。物理地址被處理為分布表面數(shù)據(jù)訪問位置以允許在分區(qū)單元之間交錯的高效請求。高速緩存線索引可用于確定對于高速緩存線的請求是否命中或未命中。在圖形和計(jì)算應(yīng)用中,GPC 208可被配置為使得每個SM 310耦合至紋理單元315,用于執(zhí)行紋理映射操作,例如,確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。紋理數(shù)據(jù)是從內(nèi)部紋理LI高速緩存(未示出)讀取的,或者在一些實(shí)施例中是從SM 310內(nèi)的LI高速緩存讀取的,并且根據(jù)需要從L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104獲取。每個SM 310將處理后的任務(wù)輸出到工作分布交叉開關(guān)330,以便將處理后的任務(wù)提供到另一個GPC 208用于進(jìn)一步處理,或者經(jīng)由交叉開關(guān)單元210將處理后的任務(wù)存儲在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中。preROP (pre-raster operations,預(yù)光柵操作)325被配置為從SM 310接收數(shù)據(jù),將數(shù)據(jù)引向分區(qū)單元215中的ROP單元,并執(zhí)行對色彩混合的優(yōu)化、組織像素色彩數(shù)據(jù)以及執(zhí)行地址轉(zhuǎn)譯。應(yīng)予以理解的是,本文所描述的內(nèi)核架構(gòu)是例示性的,可以對其進(jìn)行各種變形和修改。GPC 208內(nèi)可包含有任何數(shù)量的處理單元,例如,SM 310或紋理單元315、preROP325。此外,雖然僅示出了一個GPC 208,但PPU 202可包含任何數(shù)量的GPC 208,這些GPC208最好在功能上彼此相似,以使執(zhí)行行為不依賴于接收具體處理任務(wù)的GPC 208。此外,每個GPC 208最好使用單獨(dú)的且各異的處理單元、LI高速緩存等,相對于其他GPC 208獨(dú)立地操作。本領(lǐng)域普通技術(shù)人員應(yīng)理解的是,圖1、2、3A和3B中所描述的架構(gòu)決非限制本發(fā)明的范圍,并且在不脫離本發(fā)明的范圍的情況下,本文所教導(dǎo)的技術(shù)可在任何適當(dāng)配置的處理單元上實(shí)施,這些處理單元包括但不限于一個或多個CPU、一個或多個多核CPU、一個或多個PPU 202、一個或多個GPC208、一個或多個圖形或?qū)S锰幚韱卧?。在本發(fā)明的實(shí)施例中,所期望的是,用PPU 202或計(jì)算系統(tǒng)的其他處理器使用線程陣列來執(zhí)行通用計(jì)算。給線程陣列中的每個線程分配唯一的線程標(biāo)識符(“線程ID”),所述線程標(biāo)識符在線程執(zhí)行期間可由該線程訪問。線程ID可以被定義為一維或多維數(shù)值,控制線程的處理行為的各個方面。例如,線程ID可用于確定線程輸入數(shù)據(jù)集中將要處理的部分和/或確定線程輸出數(shù)據(jù)集中將要生成或?qū)懭氲牟糠帧?br>
每線程的指令序列可包含至少一個指令,所述至少一個指令定義線程陣列中代表性線程和一個或多個其他線程之間的協(xié)作行為。例如,每線程的指令序列可能包含下列指令:指示在序列中的特定點(diǎn)處暫定執(zhí)行代表性線程的操作直至一個或多個其他線程到達(dá)該特定點(diǎn)時為止的指令;指示代表性線程將數(shù)據(jù)存儲在一個或多個其他線程有權(quán)訪問的共享存儲器中的指令;指示代表性線程自動讀取和更新存儲在共享存儲器中的數(shù)據(jù)的指令,一個或多個其他線程基于它們的線程ID有權(quán)訪問所述共享存儲器;等等。CTA程序也可以包含計(jì)算將從中讀取數(shù)據(jù)的共享存儲器中的地址的指令,其中地址為線程ID的函數(shù)。通過定義合適的功能并提供同步技術(shù),可以以可預(yù)測的方式通過CTA的一個線程將數(shù)據(jù)寫入到共享存儲器中的給定位置,并且通過同一 CTA的不同線程從該位置讀取出來。因此,線程之間任何期望模式的數(shù)據(jù)共享都可以得到支持,并且CTA中的任何線程都可以與同一 CTA中的任何其他線程共享數(shù)據(jù)。CTA的線程之間如果存在數(shù)據(jù)共享,則數(shù)據(jù)共享的程度由CTA程序決定;因而,應(yīng)予以理解的是,在使用CTA的具體應(yīng)用中,取決于CTA程序,CTA的線程實(shí)際上可能彼此共享或者不共享數(shù)據(jù),并且術(shù)語“CTA”和“線程陣列”在本文中具有相同含義。程序執(zhí)行和搶占搶占可用來在多個不同的應(yīng)用之間對處理器進(jìn)行時間切片,從而使得不同的應(yīng)用串行化并且每個在處理器上執(zhí)行達(dá)短時間切片。出于其他目的,搶占還可被用來卸載當(dāng)前執(zhí)行的上下文。例如,主機(jī)接口 206可在CPU 102發(fā)起信道搶占或運(yùn)行列表搶占時搶占上下文,其中信道是指向處理工作的指針的合集并且應(yīng)用可包含一個或多個信道。通過清除信道ram條目中的有效位并且把要搶占的信道的信道標(biāo)識符寫入到搶占寄存器,執(zhí)行信道搶占。然后把指定的信道從PPU 202卸載離開主機(jī)和引擎。通過把指針寫入到運(yùn)行列表寄存器,執(zhí)行運(yùn)行列表搶占。該指針可指向新的運(yùn)行列表或者可指向當(dāng)前活動的運(yùn)行列表。運(yùn)行列表搶占使得正在PPU202中運(yùn)行的內(nèi)容被卸載。主機(jī)接口 206然后在與指針關(guān)聯(lián)的運(yùn)行列表上的第一條目處開始處理并且利用待定工作搜索第一有效條目。運(yùn)行列表上的具有待定工作的第一信道被加載到PPU 202中。當(dāng)上下文離開方法(即程序)并且另一個上下文正等待執(zhí)行時,主機(jī)接口 206還可搶占在時間切片已期滿之前正在執(zhí)行的上下文。在一個實(shí)施例中,時間切片不是等量的時間,而作為代替是基于每個上下文的方法流,從而使得具有密集方法流的上下文與具有稀疏方法流的不同上下文相比被分配較大的時間切片。主機(jī)接口 206配置為向前端212指示主機(jī)接口 206何時沒有用于執(zhí)行的上下文的任何方法。然而,主機(jī)接口 206未發(fā)起對執(zhí)行的上下文的上下文切換,直到分配給上下文的時間切片已期滿或者處理管線為空閑并且不存在方法。圖4是根據(jù)本發(fā)明一個實(shí)施例的、從任務(wù)/工作單元207開始通過GPC208的處理管線和主機(jī)接口 206的框圖。該搶占過程具有由前端212控制的五個階段。第一階段(階段I)停止當(dāng)前上下文中的處理。對于CTA級搶占,這意味著在CTA任務(wù)邊界處停止工作。對于指令級搶占,這意味著在SM 310指令邊界處停止工作。如果在發(fā)起搶占后且在階段I期間發(fā)生中斷或故障,則前端212在進(jìn)行至階段2之前等待清除待定中斷或故障。一旦停止上下文(并且清除任何中斷或故障),階段2就把當(dāng)前上下文的狀態(tài)保存在存儲器中。在階段4把新上下文的狀態(tài)加載到機(jī)器上之前,階段3使引擎復(fù)位。階段5重啟在先前階段I中搶占的任何工作的處理。當(dāng)搶占上下文時,主機(jī)接口 206從運(yùn)行列表選擇新的上下文來執(zhí)行并且指令前端212開始上下文搶占。前端212配置處理管線以通過完成搶占過程的五個階段來執(zhí)行新的上下文。在完成搶占過程的五個階段后,前端212向主機(jī)接口 206發(fā)送確認(rèn)(ACK)。在一個實(shí)施例中,單獨(dú)的圖形處理管線(在圖4中未示出)執(zhí)行圖形特定操作并且前端212還等待圖形處理管線變成空閑。通常,圖形處理方法與計(jì)算處理方法相比在更短的時間內(nèi)執(zhí)行,因此等待圖形處理管線變成空閑可在處理管線完成搶占過程的第一階段時完成。而且,在圖形處理管線中維持的狀態(tài)信息量通常比在(計(jì)算)處理管線中維持的上下文狀態(tài)大得多。等待圖形處理管線至空閑顯著地減小了為捕獲上下文狀態(tài)所需要的存儲。在執(zhí)行搶占之前,在CPU 102上執(zhí)行的程序分配用于存儲特定上下文的CTA級(和指令級)上下文狀態(tài)的上下文緩沖區(qū)。分配的上下文緩沖區(qū)的大小可以基于PPU 202配置和SM 310的數(shù)量。為了完成搶占過程的第一階段,前端212停止從主機(jī)接口 206接受新方法并且把搶占命令輸出到任務(wù)/工作單元207。當(dāng)處理單元接收到搶占命令時,處理單元停止把工作輸出到下游單元。前端212等待所有下游單元停止輸出工作,然后確立上下文凍結(jié)信號以成為搶占過程的第二階段。上下文凍結(jié)信號的確立確保處理管線不執(zhí)行基于用來保存上下文狀態(tài)的事物的任何操作。前端212還確定要求前端212等待處理管線變成空閑的等待空閑命令是否正被處理,并且如果是的話,則前端212中斷等待空閑操作并且保存指示正在為上下文執(zhí)行等待空閑命令的上下文狀態(tài)信息。當(dāng)上下文恢復(fù)時,等待空閑執(zhí)行將由前端212重啟。當(dāng)任務(wù)/工作單元207接收搶占命令時,任務(wù)/工作單元207停止啟動新工作。最后,任務(wù)/工作單元207確定搶占過程的前兩個階段完成并且通知前端212處理管線是空閑的。然后,在使處理管線復(fù)位以完成搶占過程的第三階段之前,前端212將存儲在任務(wù)/工作單元207內(nèi)維持的上下文狀態(tài)。當(dāng)使用指令級搶占時,在GPC 208內(nèi)維持的上下文狀態(tài)由GPC 208本身存儲。當(dāng)使用CTA級搶占時,GPC 208被耗盡從而使得所存儲的上下文狀態(tài)量減小。即使在任務(wù)/工作單元207停止啟動工作后,任務(wù)/工作單元207可接收在先前指令的執(zhí)行期間可由GPC 208生成的附加工作。任務(wù)/工作單元207把將要由前端212存儲的附加工作緩沖作為用于任務(wù)/工作單元207的上下文狀態(tài)的一部分。當(dāng)接收到搶占命令時,工作分布單元340停止啟動CTA。當(dāng)執(zhí)行CTA級搶占時,處理管線中的工作分布單元340下游的處理單元,例如GPC 208,被耗盡從而使得沒有上下文狀態(tài)保持在那些下游處理單元中。因此,當(dāng)與指令級搶占相比執(zhí)行CTA級搶占時,減小了上下文狀態(tài)量,因?yàn)橹噶罴墦屨疾灰蠛谋M下游處理單元。工作分布單元340基于由任務(wù)管理單元300生成的信息來確定哪些GPC208將執(zhí)行所接收的工作。因?yàn)镚PC 208被管線化,因此單個GPC 208可并發(fā)執(zhí)行多個任務(wù)。任務(wù)管理單元300調(diào)度每個處理任務(wù)來執(zhí)行作為網(wǎng)格(grid)或隊(duì)列。工作分布單元340使每個CTA與具體的網(wǎng)格或隊(duì)列關(guān)聯(lián)以并發(fā)執(zhí)行一個或多個任務(wù)。屬于網(wǎng)格的CTA具有隱含的指示相應(yīng)CTA在網(wǎng)格內(nèi)的位置的x、y、z參數(shù)。工作分布單元340跟蹤可用的GPC 208并且在GPC 208可用時啟動CTA。在指令級搶占期間,工作分布單元340把搶占命令傳送到GPC 208中的管線管理器305。管線管理器305可包括用于每個SM 310的控制器。在接收到搶占命令后,SM 310停止發(fā)出指令并且進(jìn)入陷講處理程序(trap handler)。SM 310還等待與先前發(fā)出的指令關(guān)聯(lián)的所有存儲器事物完成,即等待所有未完成的存儲器請求完成。當(dāng)針對讀請求的數(shù)據(jù)尚未返回時以及當(dāng)對于明確請求了確認(rèn)的寫請求尚未從MMU 328接收到確認(rèn)時,存儲器請求被視為是未完成的。管線管理器305維持關(guān)于CTA和線程組的信息并且跟蹤每個CTA搶占哪些線程組。一旦GPC 208中的SM 310停止了發(fā)出指令并且每個SM 310變成空閑,陷阱處理程序就卸載在GPC 208上運(yùn)行的CTA的上下文狀態(tài)并且陷阱處理程序、管線管理器305和前端212中的一個或多個的組合存儲上下文狀態(tài)。被卸載和存儲在SM 310內(nèi)的寄存器、管線管理器305內(nèi)的寄存器、GPC 208內(nèi)的寄存器、共享存儲器等等的上下文狀態(tài)被保存到圖形存儲器中的預(yù)定緩沖區(qū)。而且,從GPC 208內(nèi)的高速緩存例如L 1.5高速緩存335向存儲器的寫入被擠出至存儲器并且高速緩存被無效。一旦所有上下文狀態(tài)被卸載和存儲,陷阱處理程序就將退出所有活動線程,從而使SM 310和GPC 208空閑。陷阱處理程序然后控制從SM 310到管線管理器305的、指示搶占過程的前兩個階段已由GPC 208完成并且GPC 208空閑的信號。管線管理器305向工作分布單元340報(bào)告,從而確認(rèn)(ACK)搶占命令以指示搶占過程的前兩個階段已完成。這個ACK從工作分布單元340向上游傳送至任務(wù)管理單元300且最后上至前端212。當(dāng)工作分布單元340輸出搶占命令時管線管理器305保持正在GPC 208內(nèi)執(zhí)行的每個線程組的狀態(tài)信息。狀態(tài)信息指示線程組在完成執(zhí)行后是否退出或者是否搶占線程組。狀態(tài)信息由管線管理器305保存并且可由管線管理器305用來僅恢復(fù)被搶占的那些線程組。當(dāng)在管線管理器305接收搶占命令后且在進(jìn)入陷阱處理程序以存儲狀態(tài)信息之前,線程組中的所有線程退出時,針對線程組未存儲狀態(tài)信息并且未恢復(fù)線程組。在GPC 208空閑后,GPC可被復(fù)位以完成搶占過程的第三階段。前端212然后通過寫出由前端212維持的上下文狀態(tài)而完成搶占過程的第二階段。前端212保存所有寄存器和ram鏈(ramchain)到用于搶占上下文的上下文狀態(tài)緩沖區(qū)中。為了完成搶占過程的第三階段,前端212確立由處理管線例如任務(wù)/工作單元207和GPC 208接收的上下文復(fù)位信號。當(dāng)選擇上下文來執(zhí)行時,主機(jī)接口 206需要確定選擇的上下文是否是先前搶占的上下文。指示上下文是否被搶占的上下文重載(ctx_reload)標(biāo)志由主機(jī)接口 206維持。當(dāng)主機(jī)接口 206識別選擇的上下文被搶占時,在選擇的上下文的執(zhí)行繼續(xù)之前,重載先前卸載且存儲的上下文狀態(tài)。即使當(dāng)沒有方法留給選擇的上下文時也將重載已被搶占的上下文,因?yàn)榭赡艽嬖谠诜椒ǖ膱?zhí)行期間由SM 310生成且保存作為部分上下文狀態(tài)的工作。當(dāng)主機(jī)接口 206發(fā)起搶占時,前端212向主機(jī)接口 206信號通知上下文是否為空閑。如果上下文為空閑,即處理管線為空閑并且沒有未完成的存儲器請求,則在上下文的執(zhí)行繼續(xù)之前不需要重載搶占的上下文。如果上下文為不空閑,則主機(jī)接口 206保存上下文重載狀態(tài)以在信道重載時進(jìn)行處理。還存在如下情況:當(dāng)前端212從主機(jī)接口 206接收到搶占命令時,處理管線已經(jīng)空閑。當(dāng)處理管線已經(jīng)空閑時,前端212不向任務(wù)/工作單元207發(fā)送搶占命令,而是延續(xù)搶占過程的第二階段。因此,任務(wù)/工作單元207和GPC 208的空閑狀態(tài)應(yīng)該使得那些單元能夠接收新的上下文狀態(tài)或者恢復(fù)上下文狀態(tài)。例如,任務(wù)/工作單元207應(yīng)該處于使得沒有任務(wù)正在運(yùn)行的狀態(tài)中。管線管理器305應(yīng)該僅恢復(fù)搶占的線程組或CTA并且不應(yīng)該恢復(fù)退出的線程組。當(dāng)前端212完成搶占過程的第四階段時,從上下文緩沖區(qū)讀取選擇的上下文狀態(tài)并且將其加載到寄存器和ram鏈中。從搶占過程的第二階段的開始直到第四階段的末尾,上下文凍結(jié)信號由前端212確立。上下文凍結(jié)信號的確立確保處理管線不執(zhí)行基于前端212用來保存和恢復(fù)上下文狀態(tài)的事物的任何操作。前端212通過向任務(wù)/工作單元207輸出搶占恢復(fù)命令而發(fā)起搶占過程的第五階段(階段5)。在任務(wù)/工作單元207接收搶占恢復(fù)命令后,任務(wù)/工作單元207不向前端212確立就緒信號,從而使得沒有新工作可以從前端212傳送到任務(wù)/工作單元207,直到完成搶占過程。任務(wù)/工作單元207內(nèi)的工作分布單元340接收搶占恢復(fù)命令并且恢復(fù)選擇的上下文狀態(tài),從而將恢復(fù)的任務(wù)重放到GPC 208中并且將搶占的CTA和線程組分別恢復(fù)回到管線管理器305和SM 310中。例如,管線管理器305輸出搶占恢復(fù)命令以把相應(yīng)SM 310配置成進(jìn)入“搶占-恢復(fù)-開始”模式。然后,管線管理器305把搶占的CTA和線程組發(fā)送到SM 310。在管線管理器305恢復(fù)了所有搶占的線程組后,管線管理器305向SM 310輸出指示應(yīng)該退出“搶占-恢復(fù)-結(jié)束”模式的命令。當(dāng)使用CTA級搶占時,GPC 308沒有任何存儲的上下文狀態(tài)要重載并且不存在要恢復(fù)的線程組狀態(tài)。當(dāng)使用指令級搶占來恢復(fù)選擇的上下文時,GPC 308從上下文緩沖區(qū)讀取選擇的上下文的上下文狀態(tài)并且加載寄存器和共享存儲器。管線管理器305以CTA被報(bào)告搶占的順序通過向每個CTA正在其上執(zhí)行的相應(yīng)SM 310發(fā)送CTA而重啟所有搶占的CTA。這種技術(shù)確保在SM 310中的與在搶占上下文時占用的CTA相同的物理CTA槽中啟動每個CTA。以相同的物理線程組ID啟動線程組。在搶占后在相同位置中重啟線程組是有利的,因?yàn)楸WC線程組和CTA不超出存儲器和在相應(yīng)SM 310中可用的其他資源。每個SM 310恢復(fù)寄存器值、屏障(barrier)、程序計(jì)數(shù)器、棧指針、每個線程組的活動掩碼等等。最后,前端212向主機(jī)接口 206確認(rèn)原始搶占命令。ACK指示搶占過程完成并且選擇的上下文的執(zhí)行已被啟動。任何先前搶占的CTA繼續(xù)了任務(wù)/工作單元207和GPC 208中的執(zhí)行。當(dāng)使用指令級搶占時,任何先前搶占的線程繼續(xù)了 SM 310上的執(zhí)行。主機(jī)接口206現(xiàn)在可開始向圖形管線中發(fā)送新的工作。在一個實(shí)施例中,前端212在向任務(wù)/工作單元207輸出搶占恢復(fù)命令后確認(rèn)原始搶占命令,并且任務(wù)/工作單元207緩沖在搶占恢復(fù)命令后接收的任何新的工作直到階段5完成為止。任務(wù)/工作單元207直到搶占過程完成才啟動任何新的(未恢復(fù)的)CTA。因此,前端212不知道第五階段何時完成。如果任務(wù)/工作單元207不能緩沖所有新的工作,則任務(wù)/工作單元207向前端212取消就緒信號。然而,前端212不能區(qū)分就緒信號是在搶占過程期間還是在搶占過程完成后取消的。圖5A示出了根據(jù)本發(fā)明一個實(shí)施例的用于在指令級搶占過程時卸載上下文狀態(tài)的卸載方法500。雖然結(jié)合圖1、2、3A、3B和4的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解配置為按任何順序執(zhí)行方法步驟的任何系統(tǒng)都在本發(fā)明的范圍內(nèi)。在步驟505,主機(jī)接口 206向前端212輸出指令級搶占命令并且當(dāng)前上下文的卸載被發(fā)起。在步驟510,前端212確定處理管線是否為空閑,并且如果是的話,則前端212直接進(jìn)行至步驟545以存儲由前端212維持的上下文狀態(tài)。如果在步驟510,前端212確定處理管線不空閑,則在步驟515,前端212停止啟動當(dāng)前上下文的新工作。在步驟520,前端212向任務(wù)/工作單元207輸出搶占命令。在步驟525,任務(wù)/工作單元207內(nèi)的任務(wù)管理單元300停止向工作分布單元340發(fā)出任務(wù)并且把搶占命令輸出到工作分布單元340。在步驟525,工作分布單元340也停止啟動CTA,并輸出搶占命令到管線管理器305。管線管理器305把指令級搶占命令輸出到SM 310。在步驟525,SM 310停止執(zhí)行指令,并且在步驟530,SM 310等待任何未完成的存儲器事物完成。每個SM 310重復(fù)步驟530直到所有的存儲器事物完成。SM 310向管線管理器305指示每個線程組退出還是被搶占。當(dāng)所有未完成的存儲器事物完成時,在步驟535,在SM 310中維持的上下文狀態(tài)被存儲到上下文緩沖區(qū)中并且在管線管理器305中維持的上下文狀態(tài)也被存儲到上下文緩沖區(qū)中。在步驟540,管線管理器305向工作分布單元340報(bào)告處理管線的指令級部分,例如SM 310和GPC 208,是空閑的并且工作分布單元340然后針對當(dāng)前上下文保存在工作分布單元340中維持的CTA級狀態(tài)。工作分布單元340向任務(wù)管理單元300報(bào)告它已完成了搶占的這個階段。任務(wù)管理單元300然后保存在任務(wù)管理單元300中維持的任務(wù)級狀態(tài)。任務(wù)管理單元300向前端212報(bào)告何時存儲了當(dāng)前狀態(tài),并且在步驟545,前端212把針對當(dāng)前上下文由前端212維持的上下文狀態(tài)存儲到上下文緩沖區(qū)。在步驟550,前端212然后存儲保存的上下文狀態(tài)是用于搶占的上下文的指示并且使處理管線復(fù)位。圖5B示出了根據(jù)本發(fā)明一個實(shí)施例的、用于在恢復(fù)指令級搶占的過程時恢復(fù)上下文狀態(tài)的恢復(fù)方法560。雖然結(jié)合圖1、2、3A、3B和4的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解配置為按任何順序執(zhí)行方法步驟的任何系統(tǒng)都在本發(fā)明的范圍內(nèi)。在步驟565,前端212針對主機(jī)接口 206選擇的上下文發(fā)起保存的上下文的恢復(fù)。在步驟570,前端212確立上下文凍結(jié)信號以確保處理管線不執(zhí)行基于前端212用來恢復(fù)上下文狀態(tài)的事物的任何操作。在步驟575,選擇的上下文狀態(tài)由前端212和任務(wù)/工作單元207從上下文緩沖區(qū)讀取,并且在任務(wù)和CTA級被恢復(fù)。在步驟580,每個管線管理器305向下輸出命令以把相應(yīng)SM 310配置成進(jìn)入“搶占-恢復(fù)-開始”模式,從而把SM 310配置為暫停狀態(tài)。在步驟580,管線管理器305向SM310發(fā)送搶占的CTA和線程組并且GPC 208針對(參見圖5A)在步驟535保存的選擇的上下文恢復(fù)在SM 310中維持的指令級上下文狀態(tài)。在恢復(fù)了 CTA和指令級狀態(tài)后,管線管理器305向相應(yīng)SM 310輸出指示應(yīng)該退出“搶占-恢復(fù)-結(jié)束”模式的命令,并且在步驟582,前端212取消上下文凍結(jié)信號。步驟580和582可同時執(zhí)行。在步驟585,CTA按搶占的順序被啟動,并且在步驟590,使用選擇的上下文的恢復(fù)的上下文狀態(tài)來繼續(xù)執(zhí)行。在步驟590,前端212也向主機(jī)接口 206發(fā)出確認(rèn)以用信號通知指令級搶占命令完成了執(zhí)行。主機(jī)接口 206現(xiàn)在可開始從入棧緩沖區(qū)向前端212發(fā)送更多工作。在一個實(shí)施例中,任務(wù)/工作單元207確立和取消上下文凍結(jié)并且在步驟570中確立上下文凍結(jié)后(由前端212)執(zhí)行步驟590。任務(wù)/工作單元緩沖來自入棧緩沖區(qū)的新工作,直至指令級搶占命令完成了執(zhí)行為止。新的工作直至在步驟585中啟動CTA后才由任務(wù)/工作單元輸出。如先前解釋的,被保存和恢復(fù)的上下文狀態(tài)可被縮減,代價是潛在更長的等待時間用于通過在CTA級搶占而非在指令級搶占來停止運(yùn)行的上下文。當(dāng)在CTA級搶占上下文時,SM 310完成任何啟動的CTA的執(zhí)行,從而使得需要存儲的CTA狀態(tài)未維持在管線管理器305和GPC 208內(nèi)。然而,為啟動至少一個附加CTA以完成任務(wù)的執(zhí)行而需要的任務(wù)級狀態(tài)被存儲用于搶占的上下文。在一個實(shí)施例中,在任務(wù)級搶占上下文并且任務(wù)/工作單元207完成具有啟動的至少一個CTA的任何任務(wù)的執(zhí)行,從而使得不需要存儲任務(wù)狀態(tài)。任務(wù)級搶占可能要求啟動一個或多個附加CTA以完成任務(wù)的執(zhí)行,之后保存前端狀態(tài)。當(dāng)執(zhí)行任務(wù)級搶占時,針對任務(wù)或CTA沒有存儲狀態(tài)。圖6A示出了根據(jù)本發(fā)明一個實(shí)施例的、用于在CTA級搶占過程時卸載上下文狀態(tài)的卸載方法600。雖然結(jié)合圖1、2、3A、3B和4的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解配置為按任何順序執(zhí)行方法步驟的任何系統(tǒng)都在本發(fā)明的范圍內(nèi)。在步驟605,主機(jī)接口 206向前端212輸出CTA級搶占命令并且當(dāng)前上下文的卸載被發(fā)起。在步驟610,前端212確定處理管線是否為空閑,并且如果是的話,則前端212直接進(jìn)行至步驟645以存儲由前端212維持的上下文狀態(tài)。如果在步驟610,前端212確定處理管線不空閑,則在步驟615,前端212停止啟動當(dāng)前上下文的新工作。在步驟620,前端212向任務(wù)/工作單元207輸出搶占命令。在步驟625,任務(wù)/工作單元207內(nèi)的任務(wù)管理單元300停止向工作分布單元340發(fā)出任務(wù)并且把搶占命令輸出到工作分布單元340。工作分布單元340停止啟動CTA并且在步驟630,工作分布單元340等待GPC208變成空閑。如果在步驟630,工作分布單元340確定GPC 208為不空閑,則在步驟635,工作分布單元340確定定時器是否期滿。定時器限制工作分布單元340將等待GPC變成空閑的時鐘周期數(shù)量。時鐘周期數(shù)量可以是編程值,并且在一個實(shí)施例中,當(dāng)該值被超出時,工作分布單元340執(zhí)行在指令級而非在CTA級的搶占。如果在步驟635,工作分布單元340確定定時器未期滿,則工作分布單元340返回至步驟630。否則,當(dāng)定時器期滿時,則工作分布單元340進(jìn)行至圖5A的步驟520以執(zhí)行在指令級的搶占。當(dāng)在步驟630,GPC 208為空閑時,在步驟640,工作分布單元340針對當(dāng)前上下文保存在工作分布單元340中維持的CTA級狀態(tài)。工作分布單元340向任務(wù)管理單元300報(bào)告存儲了當(dāng)前狀態(tài)。任務(wù)管理單元300然后保存在任務(wù)管理單元300中維持的任務(wù)級狀態(tài)。任務(wù)管理單元300向前端212報(bào)告何時存儲了當(dāng)前狀態(tài),并且在步驟645,前端212把針對當(dāng)前上下文由前端212維持的上下文狀態(tài)存儲到上下文緩沖區(qū)。在步驟650,前端212然后存儲保存的上下文狀態(tài)是用于搶占的上下文的指示并且使處理管線復(fù)位。圖6B示出了根據(jù)本發(fā)明一個實(shí)施例的、用于在恢復(fù)在CTA級搶占的過程時恢復(fù)上下文狀態(tài)的恢復(fù)方法660。雖然結(jié)合圖1、2、3A、3B和4的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解配置為按任何順序執(zhí)行方法步驟的任何系統(tǒng)都在本發(fā)明的范圍內(nèi)。在步驟665,前端212發(fā)起先前在CTA級搶占的上下文的恢復(fù)。在步驟670,前端212確立上下文凍結(jié)信號以確保處理管線不執(zhí)行基于前端212用來恢復(fù)上下文狀態(tài)的事物的任何操作。在步驟675,選擇的上下文狀態(tài)由前端212和任務(wù)/工作單元207從上下文緩沖區(qū)讀取,并且在任務(wù)和CTA級被恢復(fù)。在步驟682,取消確立上下文凍結(jié)信號。在步驟685,上下文最后一次運(yùn)行時搶占的CTA由任務(wù)/工作單元207重新啟動至GPC 208中。在步驟690,前端212向主機(jī)接口 206發(fā)出確認(rèn)以用信號通知CTA級搶占命令完成了執(zhí)行。主機(jī)接口 206現(xiàn)在可開始從入棧緩沖區(qū)向前端212發(fā)送更多工作。在一個實(shí)施例中,任務(wù)/工作單元207確立和取消上下文凍結(jié)并且在步驟670中確立上下文凍結(jié)后(由前端212)執(zhí)行步驟690。任務(wù)/工作單元緩沖來自入棧緩沖區(qū)的新工作,直至指令級搶占命令完成了執(zhí)行為止。新的工作直至在步驟685中重新啟動CTA后才由任務(wù)/工作單元輸出。在指令級或在CTA級搶占上下文的能力可針對每個特定上下文進(jìn)行指定。長時間運(yùn)行的上下文可在指令級被搶占以避免當(dāng)啟動搶占時到當(dāng)完成搶占時之間的長延遲。不必長時間運(yùn)行但是維持大量狀態(tài)的上下文可在CTA級搶占以最小化存儲的上下文狀態(tài)量。本發(fā)明的一個實(shí)施例可以作為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品實(shí)現(xiàn)。程序產(chǎn)品的程序定義實(shí)施例的功能(包括本文所述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲介質(zhì)上。示例性的計(jì)算機(jī)可讀存儲介質(zhì)包括,但不限于:(i )信息被永久保存在其上的非可寫存儲介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲器設(shè)備,諸如可被CD-ROM驅(qū)動器讀取的CD-ROM盤、閃存、ROM芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲器)jP(ii)可變信息被保存在其上的可寫存儲介質(zhì)(例如,磁盤驅(qū)動器內(nèi)的軟盤或者硬盤驅(qū)動器或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器)。以上已經(jīng)參照具體實(shí)施例描述了本發(fā)明。然而,本領(lǐng)域的技術(shù)人員應(yīng)該理解在不脫離如所附權(quán)利要求提出的本發(fā)明更寬的精神和范圍的情況下,可以做出各種修改和改變。因此,前述的描述和附圖應(yīng)被視為說明性的而非限制性的意義。
權(quán)利要求
1.一種在多線程系統(tǒng)中搶占程序指令的執(zhí)行的方法,所述方法包括: 使用第一上下文在所述多線程系統(tǒng)內(nèi)在處理管線中執(zhí)行程序指令; 在指令級搶占使用所述第一上下文的執(zhí)行以使用第二上下文在所述多線程系統(tǒng)中執(zhí)行不同的程序指令; 存儲使用所述第一上下文的所述程序指令的執(zhí)行被搶占的指示;以及 使用所述第二上下文在所述處理管線中執(zhí)行所述不同的程序指令。
2.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括,在執(zhí)行所述不同的程序指令之前,存儲在使用所述第一上下文的所述程序指令的執(zhí)行期間在所述處理管線內(nèi)維持的第一上下文狀態(tài)的一部分。
3.根據(jù)權(quán)利要求1所述的方法,其中使用所述第一上下文的所述執(zhí)行的所述搶占進(jìn)一步包括,針對當(dāng)在所述指令級發(fā)生搶占時搶占的流多處理器中執(zhí)行的每個線程組,存儲第一上下文狀態(tài)。
4.根據(jù)權(quán)利要求1所述的方法,其中使用所述第一上下文的所述執(zhí)行的所述搶占進(jìn)一步包括,確定配置為使用所述第一上下文來執(zhí)行所述程序指令的流多處理器是空閑的。
5.根據(jù)權(quán)利要求1所述的方法,進(jìn)一步包括: 在執(zhí)行所述不同的程序指令之前,確定所述處理管線是空閑的;以及 使所述處理管線復(fù)位而不存儲所述第一上下文的在所述處理管線中維持的上下文狀態(tài)。
6.一種在多線程系統(tǒng)中搶占程序指令的執(zhí)行的方法,所述方法包括: 使用第一上下文在所述多線程系統(tǒng)內(nèi)在處理管線中執(zhí)行程序指令; 在計(jì)算線程陣列級搶占使用所述第一上下文的執(zhí)行以使用第二上下文在所述多線程系統(tǒng)中執(zhí)行不同的程序指令; 存儲使用所述第一上下文的所述程序指令的執(zhí)行被搶占的指示;以及 使用所述第二上下文在所述處理管線中執(zhí)行所述不同的程序指令。
7.根據(jù)權(quán)利要求6所述的方法,進(jìn)一步包括,在執(zhí)行所述不同的程序指令之前,完成已經(jīng)被啟動以在所述處理管線中執(zhí)行的所有計(jì)算線程陣列的執(zhí)行以及存儲為啟動附加計(jì)算線程陣列和完成使用所述第一上下文的所述程序指令的執(zhí)行而維持的第一上下文狀態(tài)。
8.根據(jù)權(quán)利要求6所述的方法,其中使用所述第一上下文的所述執(zhí)行的所述搶占進(jìn)一步包括: 完成已經(jīng)被啟動以在所述處理管線中執(zhí)行的所有計(jì)算線程陣列的執(zhí)行; 啟動至少附加計(jì)算線程陣列以完成使用所述第一上下文的所述程序指令的執(zhí)行;以及 完成所述處理管線對所述附加計(jì)算線程陣列的執(zhí)行。
9.根據(jù)權(quán)利要求6所述的方法,其中使用所述第一上下文的所述執(zhí)行的所述搶占進(jìn)一步包括,確定配置為使用所述第一上下文來執(zhí)行所述程序指令的流多處理器是空閑的。
10.根據(jù)權(quán)利要求6所述的方法,進(jìn)一步包括: 在執(zhí)行所述不同的程序指令之前,確定所述處理管線是空閑的;以及 使所述處理管線復(fù)位而不存儲所述第一上下文的在所述處理管線中維持的上下文狀態(tài)。
全文摘要
本發(fā)明的一個實(shí)施例闡述了一種技術(shù)指令級和計(jì)算線程陣列粒度執(zhí)行搶占。在指令級的搶占不要求對處理管線的任何耗盡。沒有新指令被發(fā)送并且上下文狀態(tài)從處理管線被卸載。當(dāng)在計(jì)算線程陣列邊界執(zhí)行搶占時,要存儲的上下文狀態(tài)量得以縮減,因?yàn)樘幚砉芫€內(nèi)的執(zhí)行單元完成對進(jìn)行中的指令的執(zhí)行并且變成空閑。如果完成對進(jìn)行中的指令的執(zhí)行所需要的時間量超出閾值,則搶占可動態(tài)地改變?yōu)樵谥噶罴壎窃谟?jì)算線程陣列粒度執(zhí)行。
文檔編號G06F9/38GK103197917SQ20121045174
公開日2013年7月10日 申請日期2012年11月12日 優(yōu)先權(quán)日2011年11月10日
發(fā)明者蘭基·V·姍, 格雷戈里·斯科特·帕爾默, 赫爾諾特·斯考夫勒爾, ??姞枴·鄧肯, 菲利普·布朗寧·約翰遜, 瑟利斯·加德雷, 羅伯特·奧漢尼森, 王若凡, 克里斯托弗·蘭姆, 菲利普·亞歷山大·夸德拉, 蒂莫西·約翰·珀塞爾 申請人:輝達(dá)公司