專利名稱:用于并行命令列表生成的硬件的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及處理單元,并且,具體地說,涉及用于并行命令列表生成的硬件。
背景技術(shù):
Microsoft Direct3D 11 (DXll)是支持曲面細(xì)分(tessellation)以及允許經(jīng)改進(jìn)多線程的API (應(yīng)用程序接口),用于幫助開發(fā)者開發(fā)更好地利用多核處理器的應(yīng)用程序。在DXl I中,CPU (中央處理單元)的每個內(nèi)核均能并行地執(zhí)行命令線程。每個內(nèi)核或在相同內(nèi)核上的不同線程均通過自己的用戶模式驅(qū)動副本來生成獨(dú)立的命令列表以提高軟件應(yīng)用程序的性能。命令列表是命令緩沖區(qū)(buffer)的API級的抽象,它是較低級別的概念。當(dāng)驅(qū)動從應(yīng)用程序接收到API命令時,該驅(qū)動建立命令緩存;命令列表由完整的命令緩沖區(qū)加上任意附加的定義實(shí)施的(implementation-defined)元(meta)信息來表現(xiàn)。命令列表或命令緩沖區(qū)的內(nèi)容典型地由GPU(圖形處理單元)執(zhí)行。在這些CPU內(nèi)核的其中之一上運(yùn)行有單個線程,該線程以特定順序提交用于執(zhí)行的命令列表。這些命令列表的順序,以及由此命令緩沖區(qū)的順序,由所述應(yīng)用程序確定。通過入棧緩沖區(qū)(pushbuffer)將命令緩沖區(qū)輸入到內(nèi)核中。所述命令緩沖區(qū)包括由內(nèi)核執(zhí)行的方法,特別是由GPU執(zhí)行的方法。然而,DXll不允許跨命令列表的處理器狀態(tài)繼承。相反,處理器狀態(tài)在每個命令列表開始時被重置為所謂的“空白狀態(tài)(clean slate state)”。也就是指,每個用戶模式驅(qū)動線程都在命令列表開始時在處理器中設(shè)置所有的狀態(tài)參數(shù)。由于在執(zhí)行應(yīng)用程序時線程不能配合,所以不提供跨命令列表的狀態(tài)繼承具有極大的缺點(diǎn)。此外,使用幾十或幾百個命令來將處理器的狀態(tài)重置為空白狀態(tài)所增加的處理開銷降低了系統(tǒng)的效率,因此,降低了整體性能。如上所述,本技術(shù)領(lǐng)域需要一種改進(jìn)的技術(shù)解決上述當(dāng)前方法的局限性。
發(fā)明內(nèi)容
本發(fā)明的一個實(shí)施例提供了一種用于在多線程處理環(huán)境中提供跨命令列表的狀態(tài)繼承方法。所述方法包括接收包括多個并行線程的應(yīng)用程序;為所述多個并行線程的每個線程生成命令列表;使與所述多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表由處理單元執(zhí)行;以及使與所述多個并行線程的第二線程相關(guān)聯(lián)的第二命令列表由所述處理單元 執(zhí)行,其中所述第二命令列表從所述第一命令列表繼承與所述處理單元相關(guān)聯(lián)的狀態(tài)。
本發(fā)明的另一個實(shí)施例提供一種用于為多線程處理環(huán)境提供初始默認(rèn)狀態(tài)的方法。所述方法包括接收包括多個并行線程的應(yīng)用程序;為所述多個并行線程的每個線程生成命令列表;將釋放方法插入到與所述多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表中以由處理單元執(zhí)行,其中所述釋放方法是將由所述處理單元所執(zhí)行的命令;使所述釋放方法由所述處理單元執(zhí)行,使得處理單元的狀態(tài)的每個參數(shù)被重置;以及,在執(zhí)行所述釋放方法后,使被包括在所述第一命令列表中的命令由所述處理單元執(zhí)行。本發(fā)明實(shí)施例所提供的一個優(yōu)點(diǎn)在于,相對現(xiàn)有技術(shù)實(shí)現(xiàn)更高的處理效率。
因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例對于上面所簡要說明的本發(fā)明進(jìn)行更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dā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ū)單元的框圖;圖4為根據(jù)本發(fā)明一個實(shí)施例的,圖2的一個或多個PTO可經(jīng)配置以實(shí)現(xiàn)的圖形處理管線的示意圖;圖5為根據(jù)本發(fā)明一個實(shí)施例的,示出了使用并行命令列表的多線程處理的示意圖。圖6為根據(jù)本發(fā)明一個實(shí)施例的,示出了跨命令列表的狀態(tài)繼承的示意圖。圖7為根據(jù)本發(fā)明一個實(shí)施例的,示出了用于狀態(tài)繼承的命令列表的示意圖。圖8為根據(jù)本發(fā)明一個實(shí)施例的,用于具有跨命令列表狀態(tài)繼承的多線程處理的方法步驟的流程圖;圖9為根據(jù)本發(fā)明一個實(shí)施例的,用于生成命令列表的方法步驟的流程圖;圖10為根據(jù)本發(fā)明一個實(shí)施例的,用于使用UnbindAll ()方法實(shí)現(xiàn)多線程處理的方法步驟的流程圖。
具體實(shí)施例方式在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更為徹底的理解。然而,對于本技術(shù)領(lǐng)域技術(shù)人員來講將顯而易見的是,本發(fā)明可以在缺少這些具體細(xì)節(jié)的一個或者多個的情況下得以實(shí)施。在其他實(shí)例中,沒有描述公知的特征以避免對本發(fā)明造成混淆。系統(tǒng)概述圖I為示出了被配置為實(shí)施本發(fā)明的一個或多個方面的計算機(jī)系統(tǒng)100的框圖。計算機(jī)系統(tǒng)100包括中央處理單元(CPU) 102和系統(tǒng)存儲器104,兩者通過存儲器橋105經(jīng)由總線路徑通信。DX 11多線程特征主要針對多內(nèi)核CPU。因此,在一些實(shí)施例中,CPU 102是多內(nèi)核CPU。如圖I所示,存儲器橋105可整合在CPU 102中。可選地,存儲器橋105可以是常見設(shè)備,例如北橋芯片,其通過總線連接到CPU 102。存儲器橋105可經(jīng)由通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以例如是南橋芯片,從一個或多個用戶輸入設(shè)備108 (諸如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由路徑106和存儲器橋105將所述輸入轉(zhuǎn)發(fā)(forward)到CPU 102。并行處理子系統(tǒng)112經(jīng)由總線或其他通信路徑113 (例如PCI Express、加速圖形端口或超傳輸鏈路)耦合到存儲器橋105 ;在一個實(shí)施例中,并行處理子系統(tǒng)112是將像素傳輸?shù)斤@示設(shè)備110(例如常見的基于CRT或IXD的顯示器)的圖形子系統(tǒng)。系統(tǒng)盤114也連接到I/O橋107。開關(guān)116為I/O橋與諸如網(wǎng)絡(luò)適配器118以及各種外插卡(add-in card) 120和121的其他組件之間提供了連接。其他組件(未明確示出)也可以連接到I/O橋107,包括USB或其他端口連接、CD驅(qū)動器、DVD驅(qū)動器、膠片記錄設(shè)備等。圖I中將各種組件互連的通信路徑可以采用任何適合的協(xié)議來實(shí)現(xiàn),諸如PCI (外部組件互連)、PCI-Express, AGP (加速圖形端口)、超傳輸或任何其他總線或者點(diǎn)對點(diǎn)通信協(xié)議。并且不同設(shè)備間的連接可采用本技術(shù)領(lǐng)域已知的不同協(xié)議。 在一個實(shí)施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于圖形和視頻處理的電路,例如包括視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個實(shí)施例中,并行處理子系統(tǒng)112包含被優(yōu)化用于通用目的處理的電路,同時保留底層(underlying)的計算架構(gòu),本文將進(jìn)行更為詳細(xì)的描述。在另一個實(shí)施例中,可以將并行處理子系統(tǒng)112與一個或多個其他系統(tǒng)元件集成,諸如存儲器橋105、CPU 102、以及I/O橋107,以形成片上系統(tǒng)(SoC)。應(yīng)該理解,本文所示系統(tǒng)是示例性的,可以對其進(jìn)行變形和修改??筛鶕?jù)需要修改連接拓?fù)洌虻臄?shù)量和布置。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接連接到CPU102而不是通過橋,其他設(shè)備經(jīng)由存儲器橋105以及CPU 102與系統(tǒng)存儲器104通信。在其他替代拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU 102,而不是連接到存儲器橋105。在又一個實(shí)施例中,CPU 102的一個或多個、I/O橋107、并行處理子系統(tǒng)112和存儲器橋105可被集成到一個或多個芯片中。本文所示的特定組件是可選的;例如,可以支持任意數(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,每個并行處理單元PI3U都耦合到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個PPU,其中U彡I。(本文中,相似對象的多個實(shí)體用標(biāo)識該對象的參考數(shù)字和根據(jù)需要結(jié)合標(biāo)識該實(shí)體的帶括號的數(shù)字加以表示。)PPU 202和并行處理存儲器204可使用一個或多個集成電路器件來實(shí)現(xiàn),該集成電路器件諸如可編程處理器、專用集成電路(ASIC)或存儲器器件,或以任何其他技術(shù)上可行的方式來實(shí)現(xiàn)。再參考圖I,在一些實(shí)施例中,并行處理子系統(tǒng)112的一些或所有PPU202是具有渲染管線的圖形處理器,它可以被配置為執(zhí)行與下述各項相關(guān)的各種任務(wù)從CPU102和/或系統(tǒng)存儲器104所提供的圖形數(shù)據(jù)生成像素數(shù)據(jù)、與本地并行處理存儲器204(可被用作圖形存儲器,包括例如常用的幀緩沖器)交互以存儲和更新像素數(shù)據(jù)、輸送像素數(shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個或多個作為圖形處理器而操作的PPU 202,以及一個或多個用作通用計算的其他PPU 202。這些PI3U可以是相同的或不同的,并且每個PPU均可有自己的專用并行處理存儲器設(shè)備或非專用并行處理存儲器設(shè)備。一個或多個PPU 202可輸出數(shù)據(jù)到顯示設(shè)備110,或每個PPU 202均可輸出數(shù)據(jù)到一個或多個顯示設(shè)備110。在操作中,CPU 102是計算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)組件的操作。具體地,CPU 102發(fā)出控制PPU 202的操作的命令。在一些實(shí)施例中,CPU 102將針對每個PPU 202的命令流寫入到命令緩沖區(qū)中(在圖I或圖2中未明確示出),所述命令緩沖區(qū)可位于系統(tǒng)存儲器104、并行處理存儲器204、或其他可由CPU 102和PPU 202訪問的存儲位置中。PPU 202從命令緩沖區(qū)讀取命令流,然后相對于CPU 102的操作異步地執(zhí)行命令。CPU 102也可創(chuàng)建可由PPU 202響應(yīng)命令緩沖區(qū)中的命令而讀取的數(shù)據(jù)緩沖區(qū)。每個命令和數(shù)據(jù)緩沖區(qū)均可由每個PPU 202所讀取?,F(xiàn)在返回參考圖2,每個PPU 202均包括I/O (輸入/輸出)單元205,該I/O單元205經(jīng)由連接到存儲器橋105 (或,在一個替代實(shí)施例中,直接連接到CPU 102)的通信路徑 113與計算機(jī)系統(tǒng)100的其余部分通信。PPU 202與計算機(jī)系統(tǒng)100的其余部分的連接也可以不同。在一些實(shí)施例中,并行處理子系統(tǒng)112可作為外插卡來實(shí)現(xiàn),所述外插卡可被插入到計算機(jī)系統(tǒng)100的擴(kuò)展插槽中。在其他實(shí)施例中,PPU 202可以和諸如存儲器橋105或I/O橋107的總線橋一起集成在單個芯片上。在又一些實(shí)施例中,PPU 202的一些或所有元件可以和CPU 102—起集成在單個芯片上。在一個實(shí)施例中,通信路徑113是PCI-Express鏈路,其中給每個PPU202分配專用的通道(lane),如本技術(shù)領(lǐng)域所知。也可使用其他的通信路徑。I/O單元205生成數(shù)據(jù)包(或其他信號)用于在通信路徑113上傳送,并且還從通信路徑113接收所有傳入的數(shù)據(jù)包(或其他信號),將傳入的數(shù)據(jù)包引向PPU 202的適當(dāng)組件。例如,可將與處理任務(wù)有關(guān)的命令引向主機(jī)接口 206,而可將與存儲器操作有關(guān)的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引向存儲器交叉開關(guān)(crossbar)單元210。主機(jī)接口 206讀取每個命令緩沖區(qū),并且將該命令緩沖區(qū)指定的工作輸出到前端212。有利地,每個PPU 202都實(shí)現(xiàn)高度并行處理架構(gòu)。如圖中詳細(xì)所示,PPU 202(0)包括處理集群陣列230,該陣列230包括C個通用處理集群(GPC) 208,其中C彡I。每個GPC 208均能并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個線程均是程序的實(shí)例(instance)。在各種應(yīng)用中,可以分配不同的GPC208用于處理不同類型的程序或用于執(zhí)行不同類型的計算。例如,在圖形應(yīng)用中,可分配第一組GPC 208來執(zhí)行曲面細(xì)分操作并為曲面片(patch)生成基元(primitive)拓?fù)?,并且可分配第二組GPC 208來執(zhí)行曲面細(xì)分著色以評估用于基元拓?fù)涞那嫫瑓?shù)以及確定頂點(diǎn)位置和每頂點(diǎn)的其他屬性。GPC 208的分配可根據(jù)為每種類型的程序或計算所產(chǎn)生的工作量而不同??商娲兀珿PC208可被分配以使用分時(time-slice)機(jī)制來執(zhí)行處理任務(wù),從而在不同的處理任務(wù)間切換。GPC 208經(jīng)由工作分布單元200接收將被執(zhí)行的處理任務(wù),所述工作分布單元200從前端單元212接收定義處理任務(wù)的命令。處理任務(wù)包括指向?qū)⒈惶幚淼臄?shù)據(jù)的指針以及定義將如何處理數(shù)據(jù)(例如,將執(zhí)行哪個程序)的命令和狀態(tài)參數(shù),所述指向?qū)⒈惶幚淼臄?shù)據(jù)的指針例如表面(曲面片)數(shù)據(jù)、基元數(shù)據(jù)、頂點(diǎn)數(shù)據(jù)和/或像素數(shù)據(jù)。工作分布單元200可以被配置為獲取與這些處理任務(wù)相對應(yīng)的指針、可以從前端212接收指針或者可以直接從前端接收數(shù)據(jù)。在一些實(shí)施例中,索引指定了數(shù)據(jù)在陣列中的位置。前端212確保在命令緩沖區(qū)所指定的處理啟動前,GPC 208被配置為有效狀態(tài)。當(dāng)PPU 202被用于圖形處理時,例如,將每個曲面片的處理工作量分成大小近似相等的任務(wù),以使曲面細(xì)分處理能夠被分布到多個GPC 208。工作分布單元200可被配置為以能夠提供任務(wù)給多個GPC 208進(jìn)行處理的頻率輸出任務(wù)。在本發(fā)明的一些實(shí)施例中,部分GPC 208可被配置為執(zhí)行不同類型的處理。例如,第一部分可被配置為執(zhí)行頂點(diǎn)著色和拓?fù)渖桑诙糠挚杀慌渲脼閳?zhí)行曲面細(xì)分和幾何著色,并且第三部分可被配置為在屏幕空間中執(zhí)行像素著色以產(chǎn)生渲染后的圖像。分配部分GPC 208用于執(zhí)行不同類型處理任務(wù)的能力有效地適應(yīng)了由這些不同類型處理任務(wù)所產(chǎn)生的數(shù)據(jù)的擴(kuò)展和伸縮。在下游GPC208接收數(shù)據(jù)的速率滯后于上游GPC208產(chǎn)生數(shù)據(jù)的速率的情況下,由GPC 208產(chǎn)生的中間數(shù)據(jù)可以被緩沖,以允許該中間數(shù)據(jù)在GPC 208之間以最小的停頓(stalling)來傳送??蓪⒋鎯ζ鹘涌?214劃分為D個存儲器分區(qū)單元,其每一個單元均耦合到并行處 理存儲器204的一部分,其中DS I。通常,并行處理存儲器204的每一部分均包括一個或多個存儲器設(shè)備(例如,DRAM 220)。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,DRAM 220可以由其他合適的存儲設(shè)備代替,并且可以是一般常規(guī)設(shè)計。因此省略詳細(xì)的描述。渲染目標(biāo),諸如幀緩沖區(qū)或紋理映射,可以被跨DRAM 220存儲,允許分區(qū)單元215并行地寫入每個渲染目標(biāo)的一部分,從而有效地使用并行處理存儲器204的可用帶寬。任意一個GPC 208都可以處理將被寫到并行處理存儲器204內(nèi)任意DRAM 220的數(shù)據(jù)。交叉開關(guān)單元210被配置為將每個GPC 208的輸出路由到任意分區(qū)單元215的輸入或路由到另一個GPC 208用于進(jìn)一步處理。GPC 208通過交叉開關(guān)單元210與存儲器接口214通信,以對各種外部存儲器設(shè)備進(jìn)行讀寫。在一個實(shí)施例中,交叉開關(guān)單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及具有到本地并行處理存儲器204的連接,從而使得在不同GPC 208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或相對于PPU 202來講非本地的其他存儲器通信。交叉開關(guān)單元210可使用虛擬通道來分開GPC 208與分區(qū)單元215之間的業(yè)務(wù)流。再者,GPC 208可被編程為執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)轉(zhuǎn)換、視頻和/或音頻數(shù)據(jù)的過濾、建模操作(例如,應(yīng)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分著色、頂點(diǎn)著色、幾何著色和/或像素著色程序)等等。PPU 202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204傳輸?shù)絻?nèi)部(片上)存儲器中,處理數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,在這里這樣的數(shù)據(jù)可以由其他系統(tǒng)組件訪問,所述其他系統(tǒng)組件包括CPU 102或另一并行處理子系統(tǒng)112。PPU202可擁有任意容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且PPU202可以以任意組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲架構(gòu)(UMA)實(shí)施例中,PTO 202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU 202會以排他的方式或幾乎以排他的方式使用系統(tǒng)存儲器。在UMA實(shí)施例中,PPU 202可被集成到橋式芯片中或處理器芯片中,或作為分立芯片被提供,所述分立芯片具有經(jīng)由橋式芯片或其他通信方式將PPU 202連接到系統(tǒng)存儲器的高速鏈路(例如,PCI-Express)。如上所述,并行處理子系統(tǒng)112可以包括任意數(shù)量的PPU 202。例如,在單個外插卡上可以提供多個PPU 202,或可以將多個外插卡連接到通信路徑113,或可以將一個或多個PPU 202集成到橋式芯片中。多PI3U系統(tǒng)中的PPU 202可以彼此相同或不同。例如,不同的PPU 202可能具有不同數(shù)量的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在出現(xiàn)多個PPU202的情況下,可并行地操作這些PI3U從而以高于單個PPU 202可能達(dá)到的吞吐量來處理數(shù)據(jù)。包括一個或多個PPU 202的系統(tǒng)可以以各種配置和形式因素來加以實(shí)現(xiàn),包括桌上型電腦、膝上型電腦或手持式個人計算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等。處理集群陣列概述圖3A為根據(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ī)制不同,SMT的執(zhí)行通過給定的線程程序,允許不同線程更容易地跟蹤(follow)分散的執(zhí)行路徑。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,SMD處理機(jī)制代表SMT處理機(jī)制的一個功能子集。在圖形應(yīng)用中,GPC 208可被配置以實(shí)現(xiàn)用于執(zhí)行屏幕空間圖形處理功能的基元引擎,所述屏幕空間圖形處理功能可包括但不限于,基元建立、光柵化以及z裁剪(zculling)。該基元引擎從工作分布單元200接收處理任務(wù),并且當(dāng)該處理任務(wù)不需要基元引擎執(zhí)行操作時,將該處理任務(wù)通過基元引擎?zhèn)鞯焦芫€管理器305。經(jīng)由管線管理器305來方便地控制GPC 208的操作,所述管線管理器305分布處理任務(wù)給流多處理器(SPM) 310。管線管理器305也可被配置為通過為由SPM 310輸出的處理后的數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。在一個實(shí)施例中,每個GPC 208均包括M個SPM 310,其中M彡I,每個SPM 310均被配置為處理一個或多個線程組。傳送到特定GPC 208的一系列指令構(gòu)成線程,如本文前面所定義的,并且跨SPM310內(nèi)并行處理引擎(未示出)所并發(fā)執(zhí)行的一定數(shù)量的線程的集合在本文中被稱作“線程組”。如本文所使用的,“線程組”是指針對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,該組的每個線程被分配給SPM 310內(nèi)的不同處理引擎。線程組可以包括比SPM 310內(nèi)處理引擎的數(shù)量更少的線程,在這種情況下,在正在處理該線程組的周期期間,一些處理引擎將處于空閑狀態(tài)。線程組也可以包括比SPM 310內(nèi)處理引擎的數(shù)量更多的線程,在這種情況下,將在多個時鐘周期進(jìn)行處理。因為每個SPM 310能并發(fā)地支持多達(dá)G個線程組,所以在任意給定的時間,GPC 208中都可以執(zhí)行多達(dá)GXM個線程組。此外,在SPM 310內(nèi),多個相關(guān)的線程組可同時處于激活狀態(tài)(處于不同的執(zhí)行階段)。這個線程組的集合在本文中被稱作“協(xié)作線程陣列”(“CTA”)。特定CTA的大小等于mXk,其中k是線程組中并發(fā)執(zhí)行的線程的數(shù)量,并且一般是SPM 310內(nèi)并行處理引擎數(shù)量的整數(shù)倍,m是在SPM 310內(nèi)同時處于激活狀態(tài)的線程組的數(shù)量。CTA的大小通常由編輯人員以及CTA可用的硬件資源例如存儲器或寄存器的容量來確定。每個線程可使用獨(dú)享的本地地址空間,并且共享的每CTA(per-CTA)地址空間用于在CTA內(nèi)的線程之間傳遞數(shù)據(jù)。將存儲在每線程地址空間和每CTA地址空間中的數(shù)據(jù)存儲在LI高速緩存(cache) 320中,并且可使用回收(eviction)策略以有助于在LI高速緩存320中保持該數(shù)據(jù)。每個SPM 310使用相應(yīng)的LI高速緩存320中用于執(zhí)行加載和存儲操作的空間。每個SPM 310也可以訪問分區(qū)單元215內(nèi)的L2高速緩存,該L2高速緩存在所有GPC 208之間被共享并且可以用于在線程之間傳輸數(shù)據(jù)。最后,SPM310也可以訪問片夕卜“全局”存儲器,包括例如并行處理存儲器204和/或系統(tǒng)存儲器104。L2高速緩存可用于存儲寫入全局存儲器或從全局存儲器讀出的數(shù)據(jù)。應(yīng)該理解,PPU 202外部的任何存儲器都可以被用作全局存儲器。另外,如本技術(shù)領(lǐng)域所知,每個SPM 310有利地包括可被管線化的相同的一組功能單元(例如,算術(shù)邏輯單元),從而允許在前一個指令完成之前發(fā)送新的指令??梢蕴峁┕δ軉卧娜我饨M合。在一個實(shí)施例中,這些功能單元支持各種操作,包括整數(shù)和浮點(diǎn)算法(例如,加法和乘法)、比較操作、布爾操作(AND、OR、X0R)、移位(bit-shifting)以及各種代數(shù)函數(shù)計算(例如,平面插值、三角、指數(shù)和對數(shù)函數(shù)等);并且相同的功能單元硬件可均衡地用于(be leveraged to)執(zhí)行不同操作。每個GPC 208可包括被配置為將虛擬地址映射到物理地址的存儲器管理單元(MMU)328。在其他實(shí)施例中,MMU328可駐留在存儲器接口 214內(nèi)。MMU 328包括用于將虛擬地址映射到像素塊(tile)的物理地址的一組頁表條目(PTE),以及可選地包括高速緩存線索引(cache line index)。處理所述物理地址以分散表面數(shù)據(jù)訪問位置,從而允許在分區(qū)單元交錯的高效請求。所述高速緩存線索引可被用于確定對高速緩存線的請求是否命中或者未命中。在圖形應(yīng)用中,GPC 208可被配置為使得每個SPM 310耦合到紋理單元315,用于執(zhí)行紋理映射操作,例如確定紋理采樣位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)。紋理數(shù)據(jù)經(jīng)由存儲器接口 214讀取,以及當(dāng)需要的時候從L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104獲取。紋理單元315可被配置為在內(nèi)部高速緩存中存儲紋理數(shù)據(jù)。在一些實(shí)施例中,將紋理單元315耦合至LI高速緩存320,并且將紋理數(shù)據(jù)存儲在LI高速緩存320中。為了提供處理后的任務(wù)給另一個GPC 208用于進(jìn)一步的處理,或者為了經(jīng)由交叉開關(guān)單元210在L2高速緩存、并行處理存儲器204或系統(tǒng)存儲器104中存儲該處理后的任務(wù),每個SPM 310都將處理后的任務(wù)輸出給工作分布交叉開關(guān)330。preROP(pre-rasteroperations,預(yù)光柵操作)單元被配置為從SPM 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ù)量的處理引擎例如基元引擎、SPM310、紋理單元315、或preROP325。進(jìn)一步,雖然只示出了一個GPC 208,但PPU 202可以包括任意數(shù)量的GPC 208,這些GPC 208最好功能上彼此相似,從而執(zhí)行行為不依賴于哪個GPC 208接收到特定處理任務(wù)。進(jìn)一步地,有利地,每個GPC 208最好使用單獨(dú)的且各異的處理引擎、LI高速緩存320等,獨(dú)立于其他GPC 208操作。圖3B為根據(jù)本發(fā)明一個實(shí)施例的,圖2的一個PPU 202內(nèi)分區(qū)單元215的框 圖。如圖所示,分區(qū)單元215包括L2高速緩存350、幀緩沖區(qū)(FB) 355以及光柵操作單元(ROP) 360。L2高速緩存350是讀/寫高速緩存,其被配置為對從交叉開關(guān)單元210及ROP360接收的操作執(zhí) 行加載和存儲。讀缺失和緊急寫回請求由L2高速緩存350輸出到FB 355用于處理。臟更新也被發(fā)送到FB 355用于伺機(jī)處理。FB 355直接與DRAM 220交互,輸出讀和寫請求,并接收從DRAM 220讀取的數(shù)據(jù)。在圖形應(yīng)用中,ROP 360是執(zhí)行諸如模板、z測試、混合等等光柵操作的處理單元,并輸出像素數(shù)據(jù)作為處理后的圖形數(shù)據(jù)用于在圖形存儲器中存儲。在本發(fā)明的一些實(shí)施例中,將ROP 360包括在每個GPC 208中,而不是分區(qū)單元215中,并且通過交叉開關(guān)單元210傳送像素讀寫請求而不是像素片段數(shù)據(jù)。處理后的圖形數(shù)據(jù)可以在顯示設(shè)備110上顯示,或者被路由用于由CPU 102或由并行處理子系統(tǒng)112內(nèi)的處理實(shí)體之一來進(jìn)一步處理。為了分布光柵操作的處理,每個分區(qū)單元215均包括ROP 360。在一些實(shí)施例中,ROP 360可被配置為壓縮寫入存儲器的z數(shù)據(jù)或色彩數(shù)據(jù),以及解壓縮從存儲器中讀出的z數(shù)據(jù)或色彩數(shù)據(jù)。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,圖1、2、3A和3B中描述的架構(gòu)不以任何方式限制本發(fā)明的范圍,以及在此教導(dǎo)的技術(shù)可以在任意合適配置的處理單元上實(shí)現(xiàn),包括但不限于一個或多個CPU、一個或多個多內(nèi)核CPU、一個或多個PPU 202、一個或多個GPC 208、一個或多個圖形或特殊用途的處理單元等等,均不超出本發(fā)明的范圍。圖4為根據(jù)本發(fā)明一個實(shí)施例的,由圖2中一個或多個PPU 202經(jīng)配置以實(shí)現(xiàn)的圖形處理管線400的示意圖。例如,一個SPM 310可被配置為執(zhí)行一個或多個頂點(diǎn)處理單元415、幾何(geometry)處理單元425以及片段處理單元460的功能。數(shù)據(jù)匯編器410、基元匯編器420、光柵化器455以及光柵操作單元465的功能也可以由GPC 208和相應(yīng)的分區(qū)單元215中的其他處理引擎執(zhí)行??商娲?,可采用用于一個或多個功能的專用處理單元來實(shí)現(xiàn)圖形處理管線400。數(shù)據(jù)匯編器410處理單元針對高序位的表面、基元等采集頂點(diǎn)數(shù)據(jù),并輸出包括頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)到頂點(diǎn)處理單元415。頂點(diǎn)處理單元415是被配置為執(zhí)行頂點(diǎn)著色程序的可編程執(zhí)行單元,根據(jù)頂點(diǎn)著色程序的指定,光照(lighting)和轉(zhuǎn)換頂點(diǎn)數(shù)據(jù)。例如,頂點(diǎn)處理單元415可被編程為將頂點(diǎn)數(shù)據(jù)從基于對象的坐標(biāo)表示(對象空間)轉(zhuǎn)換到諸如世界空間或標(biāo)準(zhǔn)化設(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ù)?;獏R編器從頂點(diǎn)處理單元415接收頂點(diǎn)屬性,按需讀取存儲的頂點(diǎn)屬性,并且構(gòu)建用于通過幾何處理單元425處理的圖形基元。圖形基元包括三角形、線段、點(diǎn)等。幾何處理單元425是被配置為執(zhí)行幾何著色程序的可編程執(zhí)行單元,根據(jù)所述幾何著色程序的指定,轉(zhuǎn)換從基元匯編器420接收的圖形基元。例如,幾何處理單元425可經(jīng)編程以細(xì)分圖形基元為一個或多個新的圖形基元,并計算被用于光柵化所述新的圖形基元的參數(shù),例如平面方程系數(shù)。在一些實(shí)施例中,幾何處理單元425也可增加或刪除幾何流中的元素。幾何處理單元425輸出指定新的圖形基元的參數(shù)和頂點(diǎn)到視窗(viewport)縮放、剔除(cull)及裁剪(clip)單元450。幾何處理單元425可讀取存儲在并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù),用于處理幾何數(shù)據(jù)。視窗縮放、剔除及裁剪單元450執(zhí)行裁剪、剔除以及視窗縮放,并輸出處理后的圖形基元到光柵化器455。
光柵化器455掃描轉(zhuǎn)換新的圖形基元,并輸出片段和覆蓋數(shù)據(jù)到片段處理單元460。此外,光柵化器455可被配置為執(zhí)行z剔除和其他基于z的優(yōu)化。片段處理單元460是被配置為執(zhí)行片段著色程序的可編程執(zhí)行單元,根據(jù)片段著色程序的指定,轉(zhuǎn)換從光柵化器455接收的片段。例如,片段處理單元460可經(jīng)編程以執(zhí)行諸如透視校正、紋理映射、著色、混合等操作,以產(chǎn)生輸出到光柵操作單元465的著色片段。片段處理單元460可讀取存儲在并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù),用于處理片段數(shù)據(jù)??梢愿鶕?jù)編程的采樣率,來按像素、采樣或其他粒度來對片段進(jìn)行著色。光柵操作單元465是執(zhí)行諸如模板(stencil)、z測試、混合等光柵操作的處理單元,并輸出像素數(shù)據(jù)作為處理后的圖形數(shù)據(jù),用于存儲在圖形存儲器中。處理后的圖形數(shù)據(jù)可存儲在例如并行處理存儲器204和/或系統(tǒng)存儲器104的圖形存儲器中,用于在顯示設(shè)備110上顯示或用于由CPU 102或并行處理子系統(tǒng)112進(jìn)一步處理。在本發(fā)明的一些實(shí)施 例中,光柵操作單元465被配置為壓縮被寫入存儲器中的z數(shù)據(jù)或色彩數(shù)據(jù),以及解壓縮從存儲器中讀出的z數(shù)據(jù)或色彩數(shù)據(jù)。用于并行命令列表生成的硬件本發(fā)明的實(shí)施例涉及在多線程處理系統(tǒng)中將處理器狀態(tài)從一個命令列表延遞(carry over)到下一個命令列表。也就是說,諸如GPU或CPU的處理器的狀態(tài)可跨多個命令列表累積。這一特征也被稱作“跨命令列表的狀態(tài)繼承”。跨命令列表的狀態(tài)繼承給驅(qū)動器帶來嚴(yán)重的問題,因為選擇在命令列表中放入哪種方法依賴于在GPU中執(zhí)行該方法時GI3U的狀態(tài)。GPU狀態(tài)其實(shí)是之前被執(zhí)行的所有命令緩沖區(qū)中累積的狀態(tài)表現(xiàn)。然而,GPU狀態(tài)可以在由不同驅(qū)動線程所生成的上一個命令緩存區(qū)中設(shè)置,但所述不同驅(qū)動線程并未完成對該上一個命令緩沖區(qū)的創(chuàng)建。本發(fā)明的實(shí)施例或者移除對未知繼承關(guān)系的依賴,或者一旦繼承狀態(tài)已知則更新命令緩存區(qū)的狀態(tài)依賴部分。在一個實(shí)施例中,將處理狀態(tài)定義為與執(zhí)行命令的處理單元相關(guān)聯(lián)的參數(shù)集。在處理狀態(tài)中所包括的參數(shù)的示例尤其包括頂點(diǎn)著色器、幾何著色器、像素著色器等的選擇,對綁定到像素著色器的一組不同紋理進(jìn)行定義的一個或多個參數(shù),對如何執(zhí)行混合進(jìn)行定義的參數(shù),目標(biāo)渲染表面的列表。這里所使用的“方法”是發(fā)送到處理硬件的命令,所述處理硬件設(shè)置一個或多個定義處理器狀態(tài)的參數(shù)。在一個實(shí)施例中,設(shè)置處理器狀態(tài)定義了不同的處理階段如何執(zhí)行隨后的命令。本發(fā)明的實(shí)施例試圖消除這樣一種情況放入命令列表中的方法依賴于GPU所有命令列表的執(zhí)行順序中的當(dāng)前狀態(tài)。這一特征被稱作“使驅(qū)動器無狀態(tài)(stateless)”,因為當(dāng)生成命令列表時,驅(qū)動器不需要考慮當(dāng)前GPU狀態(tài)。本發(fā)明的實(shí)施例的另一個動機(jī)在于,減小CPU從應(yīng)用程序向硬件提交渲染命令的開銷,即,避免CPU成為瓶頸。這一開銷的原因在于,CPU花費(fèi)時間檢查當(dāng)前狀態(tài)以確定發(fā)送哪個方法。如果不需要檢查當(dāng)前狀態(tài)來寫入所述方法,需要的開銷更少。在一個實(shí)施例中,每個處理設(shè)備有一個主線程和多個輔助線程(worker thread)。例如,這種一主/N輔的布置可由應(yīng)用程序確定。每個輔助線程都“擁有”一個與將被處理設(shè)備所執(zhí)行的命令相關(guān)聯(lián)的命令列表。在一些實(shí)施例中,處理設(shè)備包括PPU 202或CPU內(nèi)核。輔助線程通過進(jìn)行API調(diào)用(例如,狀態(tài)變化、繪圖命令等)將它們的命令列表并發(fā)地填充到驅(qū)動器中。當(dāng)完成命令列表時,這些命令列表被傳給主線程,該主線程對它們進(jìn)行排序并提交到驅(qū)動器/硬件。在一些實(shí)施例中,可多次提交命令列表。至少初看起來,實(shí)現(xiàn)這一模型要求驅(qū)動器是“無狀態(tài)”的,意思是任意設(shè)備驅(qū)動器接口(DDI)入口點(diǎn)都可以被完全處理和轉(zhuǎn)換為方法,而無需參考“當(dāng)前”API或處理器狀態(tài)。在一個實(shí)施例中,每個DDI入口點(diǎn)可簡單地被編碼到命令令牌(token)和參數(shù)數(shù)據(jù)中,其可以被附加到與命令列表相關(guān)聯(lián)的緩沖區(qū)。當(dāng)調(diào)度命令列表以便執(zhí)行時,這些令牌可被解釋并轉(zhuǎn)換為入棧緩沖區(qū)中的方法/命令。然而,這種方式在多線程命令列表生成中遇到瓶頸問題,這是由于達(dá)到這一結(jié)果所需的大多處理工作仍然在單線程中連續(xù)發(fā)生。在一個實(shí)施例中,每個命令列表包括令牌化的命令隊列,以及一個或多個關(guān)聯(lián)的GPU可讀命令緩沖段。很多DDI入口點(diǎn)是無狀態(tài)的,并且正好附加到命令緩沖區(qū)。命令令牌之一可能是“附加接下來的N個命令緩沖區(qū)字節(jié)”。而可能需要其他命令用于依賴狀態(tài)(state-dependent)的處理。例如,當(dāng) 提交命令列表時,這一處理可發(fā)生在所述主線程,并且它的結(jié)果疊加到硬件可見的方法流中。在一個實(shí)施例中,每個命令列表都繼承當(dāng)前命令列表執(zhí)行前所執(zhí)行的命令列表留下的任意狀態(tài)。這意味著當(dāng)命令列表被生成時,可以不知道其初始狀態(tài),并且意味著每次命令列表被執(zhí)行時這一狀態(tài)甚至都可能不同,即,如果命令列表的排序改變。在這種情況下,驅(qū)動器在創(chuàng)建命令列表時,并不總是一直都知道當(dāng)前API狀態(tài)。在一個實(shí)施例中,在命令列表的資源參考(reference)與命令列表所使用的實(shí)際資源之間插入間接處理(indirection)。當(dāng)提交命令列表時,將該參考綁定到實(shí)際資源,并且可在提交之間改變。圖5示出根據(jù)本發(fā)明一個實(shí)施例的,使用并行命令列表的多線程處理的示意圖。如圖所示,由應(yīng)用程序開發(fā)人員所編寫的軟件應(yīng)用程序可被分為多個線程512-1、512_2、512-3。每個線程512-1、512-2、512-3分別與不同的驅(qū)動器504-1、504-2、504-3相關(guān)聯(lián)。每個驅(qū)動器504-1、504-2、504-3分別與不同的命令列表506-1、506-2、506_3相關(guān)聯(lián)。創(chuàng)建命令列表的線程執(zhí)行于由應(yīng)用程序和操作系統(tǒng)所確定的CPU內(nèi)核上。一旦這些線程完成其命令列表的創(chuàng)建,則提交或調(diào)度這些命令列表用于由諸如GPU的處理單元510進(jìn)行執(zhí)行。在應(yīng)用程序502經(jīng)由信號514的控制下,經(jīng)由軟件多路復(fù)用器508執(zhí)行命令列表提交步驟。圖6示出根據(jù)本發(fā)明一個實(shí)施例的,跨命令列表的狀態(tài)繼承的示意圖。如所描述的,實(shí)現(xiàn)跨命令列表的狀態(tài)繼承時,當(dāng)在臨近一個線程的執(zhí)行結(jié)束時設(shè)置狀態(tài)并且在臨近另一個命令列表開始時執(zhí)行依賴于該狀態(tài)的命令時,可能會出現(xiàn)問題。依賴于所述狀態(tài)的命令的示例是繪圖命令。在圖6所示的示例中,假設(shè)首先執(zhí)行命令列表506-1,接下來執(zhí)行命令列表506_2。如圖6所不,在臨近執(zhí)行命令列表506-1的結(jié)束時由一個或多個命令604設(shè)置處理單兀510的狀態(tài)。當(dāng)實(shí)現(xiàn)跨命令列表的狀態(tài)繼承時,處理單元510的狀態(tài)被延遞給命令列表506-2的執(zhí)行,由路徑602示出。繪圖命令606可被包括在命令列表506-2中且臨近命令列表506-2的開始處。因為分別與命令緩沖區(qū)506-1、506-2相關(guān)聯(lián)的線程512-1、512-2可以是不相關(guān)的線程,當(dāng)沒有校正措施來保證執(zhí)行所述畫圖命令606時正確地設(shè)置所述狀態(tài),則延遞所述狀態(tài)到線程512-2可能發(fā)生錯誤。如本文更詳細(xì)的描述,本發(fā)明實(shí)施例支持有效地、無誤地跨命令列表狀態(tài)繼承。圖7示出根據(jù)本發(fā)明一個實(shí)施例的,用于狀態(tài)繼承的命令列表706的示意圖。命令列表706可包括一系列令牌。在一個實(shí)施例中,每個令牌都與指向命令緩沖區(qū)的指針相關(guān)聯(lián)。在一些實(shí)施例中,所述命令列表706交替出現(xiàn)與應(yīng)用程序命令相關(guān)聯(lián)的令牌和與補(bǔ)丁方法相關(guān)聯(lián)的令牌,如本文所描述。在圖7所示的實(shí)施例中,命令列表706中的令牌包含指向緩沖區(qū)702、704的指針。每個緩沖區(qū)702、704存儲將由諸如PPU 202或CPU內(nèi)核這類執(zhí)行單元所執(zhí)行的命令,也稱作“方法”。在一個實(shí)施例中,緩沖區(qū)702包括被包含在線程中將被執(zhí)行的“常規(guī)”應(yīng)用程序命令,并且緩沖區(qū)704包括被用于針對由處理單元所執(zhí)行的后續(xù)命令將處理器狀態(tài)設(shè)置為合適狀態(tài)的“補(bǔ)丁”方法。在一些實(shí)施例中,驅(qū)動器被配置為設(shè)置包括于命令列表706中的指針,并且在緩沖區(qū)702、704中存儲命令。驅(qū)動器順序地遍歷線程中的命令,并使用當(dāng)前處理器狀態(tài)來將所執(zhí)行的命令存儲到緩沖區(qū)702的塊A中。一旦驅(qū)動器遇到依賴于不同處理器狀態(tài)的命令, 該驅(qū)動器停止在塊A中存儲命令。相反,驅(qū)動器在緩沖區(qū)704的塊Xtl中存儲一個或多個補(bǔ)丁方法,其中存儲在塊Xtl中的命令/方法被配置為將處理器狀態(tài)修改為該線程中隨后的命令所希望的形式。一旦將補(bǔ)丁方法存儲在緩沖區(qū)704中,驅(qū)動器繼續(xù)將包括在線程中的命令存儲在緩沖區(qū)702中下一個可用塊中,即塊B。重復(fù)這個過程,直到該線程中的所有命令都被存儲在緩沖區(qū)702中,并且所需的補(bǔ)丁方法被存儲在緩沖區(qū)704中。在執(zhí)行時,處理單元遇到補(bǔ)丁命令塊并生成補(bǔ)丁。然后將該補(bǔ)丁插入到命令隊列中。當(dāng)創(chuàng)建命令列表時,驅(qū)動器僅寫入到緩沖區(qū)702和706中。在706中的“補(bǔ)丁”表項描述了隨后的表項需要哪種狀態(tài)信息。當(dāng)提交用于執(zhí)行的命令列表,尤其在主線程上提交時,補(bǔ)丁表項用于將補(bǔ)丁方法寫入緩沖區(qū)704。在命令隊列中的插入是虛擬的命令隊列僅是指向包括方法的緩沖區(qū)段的指針序列,因此它將指向段{A,xO,B,xl,......}。如圖所示,命令列表706在指向?qū)⒈粓?zhí)行的命令的指針與指向補(bǔ)丁方法的指針之間交替變化。存儲在命令列表706中的指針或者指向緩沖區(qū)702中的線程命令塊,或者指向緩沖區(qū)704中的補(bǔ)丁方法塊。同樣如圖所示,緩沖區(qū)704和/或緩沖區(qū)702中的塊在后續(xù)通過命令列表時被重復(fù)使用。例如,如圖所示,在第一次通過時,命令列表706中的特定補(bǔ)丁方法指針可指向塊Xo,但在隨后的通過中,同一個指針可指向塊&。使用圖7所示的示例,將由處理單元所執(zhí)行的塊的序列可以是,例如> A, X0, B, X1, C.......A, x2,B......在一些實(shí)施例中,當(dāng)存在的補(bǔ)丁較少并且每個補(bǔ)丁盡可能小,即每個補(bǔ)丁的命令/方法較少時,將獲得更高的效率。本發(fā)明的一些實(shí)施例包括一個或多個命令,如下所述,其經(jīng)配置以更有效地執(zhí)行上述的狀態(tài)打補(bǔ)丁。相應(yīng)地,本發(fā)明的實(shí)施例與下述內(nèi)容相關(guān)聯(lián)對處理單元的“狀態(tài)”增加一個或多個附加參數(shù),并且提供基于硬件的技術(shù)用于修改所述一個或多個附加參數(shù)。I.索引緩沖區(qū)格式在一個實(shí)施例中,將索引緩沖區(qū)格式作為處理器狀態(tài)的參數(shù)添加在硬件中。例如,當(dāng)硬件繪制索引三角列表時,索引可以是16位或32位索引。在諸如DXlI的傳統(tǒng)方法中,較老的硬件要求將索引大小編碼在繪圖方法中,這是因為繪圖命令依賴于所述索引大小。相應(yīng)地,在DXll中,對于每個所遇到的繪圖命令都需要補(bǔ)丁。相反,本發(fā)明的實(shí)施例包括作為處理器狀態(tài)參數(shù)的索引緩沖區(qū)格式。因此,繪圖命令不需要與該索引命令一起包括索引大小。當(dāng)執(zhí)行繪圖命令時,處理單元可簡單地參考與索引緩沖區(qū)格式相關(guān)聯(lián)的狀態(tài)參數(shù)。為了修改與索引緩沖區(qū)格式相關(guān)聯(lián)的狀態(tài)參數(shù),可實(shí)施具有IndexSize字段的單個SetIndexBuffer ()方法。2.基元拓?fù)湓趥鹘y(tǒng)方法中,基元拓?fù)洳⑽幢蛔鳛樘幚砥鳡顟B(tài)的一部分而包括在硬件中。因此,對于每個繪圖命令來說,與該繪圖命令相關(guān)聯(lián)的基元拓?fù)?例如,三角形、三角形帶、線等等)將需要被包括在該繪圖命令中。根據(jù)本發(fā)明的實(shí)施例,基元拓?fù)浔蛔鳛闋顟B(tài)參數(shù)而添加,不需要將其作為繪圖命令的一部分來包括。然而,當(dāng)處理單元接收繪圖命令時,該處理單元可能不知道基元拓?fù)鋮?shù)的當(dāng)前設(shè)置。因此,本發(fā)明的實(shí)施例實(shí)施單個方法SetPrimitiveTopology()以設(shè)置基元拓?fù)?,而不需要?qū)動器將該基元拓?fù)渥鳛槔L圖命令的一部分(或Begin方法的一部分)來加以包括。3.用戶裁剪平面使能處理頂點(diǎn)的某些可編程著色單元支持用戶寫入高達(dá)N個不同的裁剪距離輸出。例如,N可以等于8。為了執(zhí)行裁剪,著色單元可估計頂點(diǎn)相對于特定裁剪平面的位置。每個裁剪平面都將屏幕分離為應(yīng)該繪制頂點(diǎn)的區(qū)域和應(yīng)該切除且不繪制頂點(diǎn)的區(qū)域。如果頂點(diǎn)相對于裁剪平面具有正值,那么頂點(diǎn)在平面的“正確的”一側(cè),并且應(yīng)該被繪制。如果頂點(diǎn)相對于裁剪平面具有負(fù)值,那么頂點(diǎn)在平面“錯誤的”一側(cè),并且不應(yīng)被繪制。如一個實(shí)施例所述,幾何處理管線中的一個或多個著色階段可以寫裁剪距離。將由最后被使能的著色階段所寫的裁剪距離用于裁剪;由之前階段所寫的裁剪距離被簡單輸出給它們的隨后階段。當(dāng)實(shí)現(xiàn)跨命令列表的狀態(tài)繼承時,不同的線程可“跨接(hook up)”或使用不同的著色器。相應(yīng)地,本發(fā)明的實(shí)施例提供用于自動確定哪一個是最后使用的著色器的技術(shù)?;谂c該著色器相關(guān)聯(lián)的裁剪信息,硬件可確定已經(jīng)寫入哪個裁剪距離(即,候選用于被裁剪為該距離)。使用跨命令列表的狀態(tài)繼承,當(dāng)驅(qū)動器正創(chuàng)建命令列表時,該驅(qū)動器不知道哪個階段被使能。這樣,驅(qū)動器不知道最后被使能的階段是什么。因此,該驅(qū)動器不能告知硬件哪個階段的裁剪距離用于剪切。此外,在一些實(shí)施例中,使能位可以與N個不同的裁剪距離輸出中的每一個相關(guān)聯(lián),所述N個不同的裁剪距離輸出與特定命令相關(guān)聯(lián)??蓪⑦@一組N個使能位和用于配置著色器的、與最后一個著色器相關(guān)聯(lián)的裁剪信息進(jìn)行邏輯與。例如,可編程處理管線可包括處理點(diǎn)并且確定頂點(diǎn)位置的頂點(diǎn)著色器,以及操作全部基元的幾何著色器。在第一配置中,可編程處理管線可被配置以使得在管線中幾何著色器在頂點(diǎn)著色器之后被調(diào)用。相應(yīng)地,由最后一個階段即幾何著色器來設(shè)置裁剪距離。在第二配置中,可編程處理管線可被配置為在管線中在頂點(diǎn)著色器之后不調(diào)用幾何著色器(即,空的幾何著色器)。在沒有幾何著色器的第二配置中,由頂點(diǎn)著色器設(shè)置裁剪距離。因此,本發(fā)明的實(shí)施例實(shí)施包括用于每個用戶裁剪平面的單獨(dú)使能位的單個方法SetUserClipEnable O。如所述的,這一組N個使能位可以和與最后被使用的著色器相關(guān)聯(lián)的裁剪信息進(jìn)行邏輯與。4.預(yù)測渲染重寫(override)有時驅(qū)動器需要入棧/出棧(push/pop)預(yù)測狀態(tài),用于諸如著色器/紋理數(shù)據(jù)頭(texheader) /采樣器上傳的“內(nèi)部”位塊,或者用于應(yīng)該忽略預(yù)測的操作。例如,驅(qū)動 器可能需要進(jìn)行內(nèi)部繪圖調(diào)用,以完成并非對應(yīng)于來自應(yīng)用程序繪圖命令的某些動作。相應(yīng)地,為了在內(nèi)部操作之后恢復(fù)當(dāng)前的預(yù)測狀態(tài),需要知道該狀態(tài)。本發(fā)明的實(shí)施例將SetRenderEnableOverride ()方法添加到API以重寫當(dāng)前預(yù)測狀態(tài),提供一級堆棧用于預(yù)測狀態(tài)的入棧/出棧。圖8為根據(jù)本發(fā)明一個實(shí)施例的,用于具有跨命令列表狀態(tài)繼承的多線程處理的方法步驟的流程圖。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,雖然與圖1-7中的系統(tǒng)結(jié)合來描述方法800,被配置為以任意順序執(zhí)行所述方法步驟的任意系統(tǒng)都包括在本發(fā)明實(shí)施例的范圍內(nèi)。如圖所示,方法800從步驟802開始,其中由處理器執(zhí)行的驅(qū)動器接收包括多個并行線程的應(yīng)用程序。如圖5中所示,應(yīng)用程序可以由程序開發(fā)人員編寫。在步驟804中,驅(qū)動器為每個線程生成一個命令列表。如上述圖7中的描述,每個命令列表都在指向應(yīng)用程 序命令的緩沖區(qū)的指針和指向補(bǔ)丁方法的緩沖區(qū)的指針之間交替變化。下面在圖9中詳細(xì)描述步驟804。在步驟806,處理單元執(zhí)行被包括在與第一線程相關(guān)聯(lián)的第一命令列表中的命令。在一些實(shí)施例中,處理單元利用包括在處理管線中的一個或多個處理階段來執(zhí)行這些命令。例如,如圖7所示,處理單元接收被包括在各緩沖區(qū)702、704中的命令。處理單元可首先執(zhí)行來自緩沖區(qū)702的塊A中的應(yīng)用程序命令,然后執(zhí)行來自緩沖區(qū)704的塊Xtl的補(bǔ)丁方法,然后執(zhí)行來自緩沖區(qū)702的塊B中的應(yīng)用程序命令,等等。在該命令列表結(jié)束時,處理單元停止執(zhí)行來自第一線程的命令列表的命令,并切換為執(zhí)行來自第二線程的命令列表的命令。在步驟808,當(dāng)處理單元停止執(zhí)行來自第一線程的命令列表的命令時,驅(qū)動器保持該處理器狀態(tài)。如所述的,將處理器狀態(tài)定義為與執(zhí)行命令的處理單元相關(guān)聯(lián)的參數(shù)集。被包括在處理器狀態(tài)中的參數(shù)的示例尤其包括頂點(diǎn)著色器、幾何著色器、像素著色器等的選擇、一組綁定到像素著色器的不同紋理,對如何執(zhí)行混合進(jìn)行定義的參數(shù),目標(biāo)渲染表面列表。在步驟810中,處理單元執(zhí)行被包括在與第二線程相關(guān)聯(lián)的第二命令列表中的命令。步驟810與上述步驟806基本上類似。從而,處理器實(shí)現(xiàn)跨命令列表的狀態(tài)繼承。圖9為根據(jù)本發(fā)明一個實(shí)施例的,用于生成命令列表的方法步驟的流程圖。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,雖然與圖1-7中的系統(tǒng)結(jié)合來描述方法900,被配置為以任意順序執(zhí)行所述方法步驟的任意系統(tǒng)都包括在本發(fā)明實(shí)施例的范圍內(nèi)。如圖所示,方法900從步驟902開始,其中驅(qū)動器接收被包括在應(yīng)用程序命令的線程中的命令。如圖5中所述,應(yīng)用程序可以由應(yīng)用程序開發(fā)人員編寫,并且可以包括多個并行線程。如圖8中所述,在步驟804,為每個并行線程生成命令列表。在步驟904,驅(qū)動器確定僅使用處理器的已知狀態(tài)是否能編碼命令。問題在于驅(qū)動器是否知道有關(guān)執(zhí)行時間(execution-time)處理器狀態(tài)的足夠信息來生成方法(即,命令的硬件表示)。一些方法可以在不知道任何其他的處理器狀態(tài)的情況下被寫得。其他方法依賴于其他的處理器狀態(tài),但該處理器狀態(tài)是在驅(qū)動器建立命令列表時被獲知的。在命令列表構(gòu)建期間,這兩種情況之一可被立即寫入到命令緩沖區(qū)中。如果方法的編碼依賴于其他狀態(tài),并且當(dāng)構(gòu)建命令列表時該狀態(tài)是未知的,那么此時該方法不能被寫到命令緩沖區(qū)——必須被延遲到命令列表被執(zhí)行并且執(zhí)行時間狀態(tài)已知。
如果驅(qū)動器確定僅使用處理器已知的狀態(tài)就可編碼命令,那么方法900進(jìn)入步驟906。在步驟906,驅(qū)動器將命令插入與應(yīng)用程序命令相關(guān)聯(lián)的第一命令緩沖區(qū)。如圖7所示,第一命令緩沖區(qū)即緩沖區(qū)702,可被分為應(yīng)用程序命令塊。隨后將指向適當(dāng)?shù)膽?yīng)用程序命令塊的指針增加到命令列表中。在步驟908,驅(qū)動器確定線程中是否包括其他的命令。如果線程中包括其他的命令,那么方法900轉(zhuǎn)回到步驟902,如上所述。當(dāng)生成命令列表時,方法900遍歷被包括在線程中的每個應(yīng)用程序命令。如果線程中不包括其他的命令,那么方法900結(jié)束。在步驟904中,如果驅(qū)動器確定僅使用處理器已知的狀態(tài)不能編碼命令,那么方法900進(jìn)入步驟910。在步驟910,驅(qū)動器將有關(guān)需要什么補(bǔ)丁方法的信息存儲到邊帶隊列中。之后,處理該隊列,并且當(dāng)執(zhí)行命令列表時寫入補(bǔ)丁方法。例如,將索引大小作為非獨(dú)立的狀態(tài)參數(shù)避免了對于補(bǔ)丁的需求。當(dāng)在繪圖方法中編碼索引大小時,則索引大小未知時所發(fā)送的任意繪圖命令隨后都將需要打補(bǔ)丁。其目的在于減小補(bǔ)丁的數(shù)量。 總而言之,本發(fā)明實(shí)施例提供用于實(shí)現(xiàn)跨命令列表的狀態(tài)繼承的技術(shù)。每個命令列表在指向應(yīng)用程序命令的指針和指向補(bǔ)丁方法的指針之間交替變化。在命令列表構(gòu)建期間,在任何遇到依賴于未知的處理器狀態(tài)的應(yīng)用程序命令的時候,將補(bǔ)丁方法插入命令列表。有利地,相對于不提供跨命令列表的狀態(tài)繼承的現(xiàn)有技術(shù),獲得了更高的處理效率。因為每次執(zhí)行不同的線程時,不需要重新設(shè)置處理器為“空白狀態(tài)”,所以需要的處理開銷更少。UnbindAll (全部釋放)方法如上所述,DXll不允許跨命令列表的狀態(tài)繼承。相反,處理器狀態(tài)在每個命令列表開始時被重置為所謂的“空白狀態(tài)”。也就是指,每個用戶模式驅(qū)動器線程在命令列表開始時在處理器中設(shè)置所有的狀態(tài)參數(shù)。在DXll中,使用幾十或幾百的命令來將處理器狀態(tài)重置為空白狀態(tài)所增加的處理開銷降低了系統(tǒng)的效率,因此,降低了整體性能。在一個實(shí)施例中,空白狀態(tài)實(shí)質(zhì)上是一組用于所有類方法狀態(tài)的初始條件,其中沒有資源被綁定,例如,沒有紋理數(shù)據(jù)頭、沒有紋理采樣器、沒有常量緩沖區(qū)以及沒有渲染目標(biāo)。在DXll中,在每個命令列表開始時,驅(qū)動器將插入所有的狀態(tài)設(shè)置方法以設(shè)置初始條件。在DXll中,采用819個單獨(dú)的方法將所有資源逐位置(slot-by-slot)地釋放(5種著色類型)*((每種著色類型的128個紋理數(shù)據(jù)頭綁定方法)+(每種著色類型16個采樣器綁定方法)+(每種著色類型18個常量緩沖區(qū)綁定方法))+(9個目標(biāo)“綁定”方法)=819 個方法每次執(zhí)行不同的命令列表時都執(zhí)行819個方法會占用大量的處理資源。相應(yīng)地,本發(fā)明實(shí)施例實(shí)施UnbindAlU )方法,其使用一種方法來釋放所有內(nèi)容。實(shí)施這一方法提高了驅(qū)動器的性能,并且減少了 GPU中方法所需的帶寬。在一個實(shí)施例中,將諸如紋理數(shù)據(jù)頭的每個狀態(tài)參數(shù)存儲在存儲器單元的不同行中。為了實(shí)現(xiàn)UnbindAlU )方法,有效位被附加到存儲單元的每一行。為了釋放所有的狀態(tài)參數(shù),將每個有效位設(shè)置為無效狀態(tài)。
在另一個實(shí)施例中,如果狀態(tài)參數(shù)被存儲在高速緩存存儲器中,則可通過歸零該高速緩存存儲器中的一個或多個高速緩存線來實(shí)現(xiàn)UnbindAlU )方法。而在另一個實(shí)施例中,如果狀態(tài)參數(shù)被存儲在存儲體存儲器(banked memory)中,通過立即清空一個或多個存儲體來實(shí)現(xiàn)UnbindAlU )方法。圖10為根據(jù)本發(fā)明一個實(shí)施例的,使用UnbindAlU )方法實(shí)現(xiàn)多線程處理的方法步驟的流程圖。本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,雖然與圖1-7中的系統(tǒng)結(jié)合來描述方法1000,被配置為以任意順序執(zhí)行所述方法步驟的任意系統(tǒng)都包括在本發(fā)明實(shí)施例的范圍內(nèi)。如圖所示,方法1000從步驟1002開始,其中驅(qū)動器接收包括多個并行線程的應(yīng)用程序。在步驟1004中,驅(qū)動器為每個線程生成命令列表。在步驟1006,處理器執(zhí)行與第一 命令列表相關(guān)聯(lián)的命令,所述第一命令列表與第一線程相關(guān)聯(lián)。步驟1002、1004、1006分別與如上所述的步驟802、804、806基本上相似。在步驟1008,處理器執(zhí)行被包括在與第二線程相關(guān)聯(lián)的第二命令列表中的UnbindAlK )方法。如上所述,UnbindAll ()方法采用一個方法來釋放所有狀態(tài)參數(shù)。在一個實(shí)施例中,UnbindAlU )方法可作為第一個方法來被插入每個命令列表中。在另一個實(shí)施例中,UnbindAlU )方法可作為最后一個方法來被插入每個命令列表中。在步驟1008中,處理器執(zhí)行與第二命令列表相關(guān)聯(lián)的其余命令。步驟1010可以與如上所述的步驟810基本上相似。本發(fā)明的一個實(shí)施例可以被實(shí)現(xiàn)為與計算機(jī)系統(tǒng)一同使用的程序產(chǎn)品。程序產(chǎn)品的程序?qū)?shí)施例的功能(包括在此描述的方法)進(jìn)行定義,并且可被包含在各種各樣的計算機(jī)可讀存儲介質(zhì)內(nèi)。說明性的計算機(jī)可讀存儲介質(zhì)包括但不限于(i)信息在其上永久保存的非可寫存儲介質(zhì)(例如,計算機(jī)內(nèi)的只讀存儲裝置,諸如對CD-ROM驅(qū)動器可讀的CD-ROM盤、閃存、ROM芯片或者任意類型的固態(tài)非易失性半導(dǎo)體存儲器);以及(ii)其上存儲有可改變的信息的可寫存儲介質(zhì)(例如,軟盤驅(qū)動器內(nèi)的軟盤,或硬盤驅(qū)動器,或任意類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器)。以上已經(jīng)參考具體實(shí)施例對本發(fā)明進(jìn)行了描述。然而,本技術(shù)領(lǐng)域的技術(shù)人員應(yīng)該理解,可以進(jìn)行各種修改和變化,而不脫離如所附權(quán)利要求所闡釋的本發(fā)明的較寬精神和范圍。相應(yīng)地,前面的描述和附圖應(yīng)被視為是示例性的而非限制性的。
權(quán)利要求
1.一種用于為多線程處理環(huán)境提供初始默認(rèn)狀態(tài)的方法,所述方法包括 接收包括多個并行線程的應(yīng)用程序; 為所述多個并行線程的每個線程生成命令列表; 將釋放方法插入到與所述多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表中以由處理單元執(zhí)行,其中所述釋放方法是將由所述處理單元所執(zhí)行的命令; 使所述釋放方法由所述處理單元執(zhí)行,使得處理單元的狀態(tài)的每個參數(shù)被重置;以及, 在執(zhí)行所述釋放方法之后,使包括在所述第一命令列表中的命令由所述處理單元執(zhí)行。
2.根據(jù)權(quán)利要求I所述的方法,其中所述處理單元包括圖形處理單元。
3.根據(jù)權(quán)利要求I所述的方法,其中所述處理單元包括中央處理單元的內(nèi)核。
4.根據(jù)權(quán)利要求I所述的方法,其中所述釋放方法按順序是在將由所述處理單元所執(zhí)行的第一命令列表中的第一個命令。
5.根據(jù)權(quán)利要求I所述的方法,其中存儲器單元的一個或多個行被配置為存儲所述處理單元的狀態(tài),并且進(jìn)一步包括,將與所述一個或多個行的每一者相關(guān)聯(lián)的一個或多個位設(shè)置為無效狀態(tài)。
6.根據(jù)權(quán)利要求I所述的方法,其中重置所述處理單元的所述狀態(tài)包括,清空與所述處理單元的所述狀態(tài)相關(guān)聯(lián)的高速緩存存儲器中的一個或多個高速緩存線。
7.根據(jù)權(quán)利要求I所述的方法,其中重置所述處理單元的所述狀態(tài)包括,清空與所述處理單元的所述狀態(tài)相關(guān)聯(lián)的存儲體存儲器的一個或多個存儲體。
8.一種用于在多線程處理環(huán)境中提供跨命令列表的狀態(tài)繼承的方法,所述方法包括 接收包括多個并行線程的應(yīng)用程序; 為所述多個并行線程的每個線程生成命令列表; 使與所述多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表由處理單元執(zhí)行;以及, 使與所述多個并行線程的第二線程相關(guān)聯(lián)的第二命令列表由所述處理單元執(zhí)行,其中所述第二命令列表從所述第一命令列表繼承與所述處理單元相關(guān)聯(lián)的狀態(tài)。
9.根據(jù)權(quán)利要求8所述的方法,其中所述第一命令列表包括在命令緩沖區(qū)中的方法和補(bǔ)丁方法緩沖區(qū)中的方法之間交替變化的令牌,所述命令緩沖區(qū)中的方法于命令列表構(gòu)建期間被寫入,所述補(bǔ)丁方法緩沖區(qū)中的方法于提交命令列表用于執(zhí)行期間被寫入。
10.根據(jù)權(quán)利要求9所述的方法,其中每個令牌包括指向存儲器單元的指針,所述存儲器單元被配置為存儲由所述處理單元所要執(zhí)行的命令。
11.根據(jù)權(quán)利要求9所述的方法,其中索引大小是與所述處理單元相關(guān)聯(lián)的狀態(tài)的參數(shù),并且將基于所述索引大小的繪圖命令包括在所述命令緩沖區(qū)中,而無需相應(yīng)的補(bǔ)丁方法。
12.根據(jù)權(quán)利要求9所述的方法,其中基元拓?fù)涫桥c所述處理單元相關(guān)聯(lián)的狀態(tài)的參數(shù),并且將基于所述基元拓?fù)涞睦L圖命令包括在所述命令緩沖區(qū)中,而無需相應(yīng)的補(bǔ)丁方法。
13.根據(jù)權(quán)利要求9所述的方法,其中在幾何處理管線中的每個著色階段都具有相關(guān)聯(lián)的一組裁剪平面使能位,并且所述處理單元被配置為使用與最后一個被使能的著色階段相關(guān)聯(lián)的所述裁剪平面使能位。
14.根據(jù)權(quán)利要求8所述的方法,其中所述處理單元包括圖形處理單元。
15.一種計算機(jī)系統(tǒng),包括 處理器,以及 存儲指令的存儲器,當(dāng)所述指令由所述處理器執(zhí)行時,使得所述處理器通過執(zhí)行以下步驟,在多線程處理環(huán)境中提供跨命令列表的狀態(tài)繼承 接收包括多個并行線程的應(yīng)用程序; 為所述多個并行線程的每個線程生成命令列表; 使與所述多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表由處理單元執(zhí)行;以及, 使與所述多個并行線程的第二線程相關(guān)聯(lián)的第二命令列表由所述處理單元執(zhí)行,其中所述第二命令列表從所述第一個命令列表繼承與所述處理單元相關(guān)聯(lián)的狀態(tài)。
全文摘要
本發(fā)明提供一種用于在多線程處理環(huán)境中提供跨命令列表的狀態(tài)繼承方法。所述方法包括接收包括多個并行線程的應(yīng)用程序;為多個并行線程的每個線程生成命令列表;使與多個并行線程的第一線程相關(guān)聯(lián)的第一命令列表由處理單元執(zhí)行;以及使與多個并行線程的第二線程相關(guān)聯(lián)的第二命令列表由處理單元執(zhí)行,其中第二命令列表從第一命令列表繼承與處理單元相關(guān)聯(lián)的狀態(tài)。
文檔編號G06F9/30GK102648450SQ201080053155
公開日2012年8月22日 申請日期2010年9月23日 優(yōu)先權(quán)日2009年9月23日
發(fā)明者亨利·帕爾德·莫頓, 帕特里克·R·布朗, 杰羅姆·F·小杜魯克, 杰西·大衛(wèi)·豪 申請人:輝達(dá)公司