專利名稱:圖形流水線的有效狀態(tài)管理的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及執(zhí)行在計算機(jī)系統(tǒng)內(nèi)的計算操作。
背景技術(shù):
圖形處理單元(GPU)是一被專門設(shè)計成執(zhí)行圖形處理任務(wù)的專用集成電路 (ASIC)。GPU可例如執(zhí)行終端用戶應(yīng)用所要求的圖形處理任務(wù),該終端用戶應(yīng)用例如為視頻 游戲應(yīng)用。于此例中,該終端用戶應(yīng)用與該GPU之間有數(shù)個軟件層。該終端用戶應(yīng)用與應(yīng) 用程序接口(API)交流。API允許該終端用戶應(yīng)用以標(biāo)準(zhǔn)化格式輸出圖形數(shù)據(jù)及命令,而不 是以依賴該GPU的格式輸出圖形數(shù)據(jù)及命令。數(shù)個類型的API市面有售,包括微軟公司開 發(fā)的DirectX 以及硅谷圖形公司開發(fā)的OpenGL 。該API與驅(qū)動器(driver)交流。該 驅(qū)動器將接收自該API的標(biāo)準(zhǔn)碼翻譯成該GPU理解的指令的原始格式。該驅(qū)動器典型地由 該GPU制造商寫出。接著該GPU執(zhí)行來自該驅(qū)動器的指令。許多GPU包括執(zhí)行所述指令的圖形流水線。圖形流水線包括多個處理模塊,所述 處理模塊同時工作于一指令的不同階段。流水線操作能使GPU利用存在于執(zhí)行該指令所需 的所述階段中的并行性。因此,GPU可在更短的時間周期內(nèi)執(zhí)行更多的指令。該圖形流水線的輸出依賴該圖形流水線的狀態(tài)。該圖形流水線的狀態(tài)依據(jù)狀態(tài) 封包更新,所述狀態(tài)封包即特定背景常量(context-specific constant)(例如紋理句柄 (texture handle)、著色常量(shader constant)、變換矩陣(transform matrix)等等), 其被該圖形流水線局部存儲。由于所述特定背景常量是局部保存,所以可被該圖形流水線 快速存取。該圖形流水線保存的狀態(tài)封包的數(shù)量依賴于該GPU耦接(couple)的API。所述 狀態(tài)封包與普通的API有關(guān),所述狀態(tài)封包可儲存在相對小數(shù)量的寄存器內(nèi),例如8個寄存 器。然而,與普通的API不同,較新的API(例如DirectX 10)需要相對大數(shù)量的頻繁背景 切換,所述切換關(guān)于該流水線的某些方面。與這些頻繁背景切換有關(guān)的所述狀態(tài)封包的數(shù) 量不能被普通圖形流水線所保存的相對小數(shù)量寄存器所支持。處理與較新API有關(guān)的較大數(shù)量狀態(tài)封包的潛在解決方案是僅僅增加該圖形流 水線支持的狀態(tài)封包的數(shù)量。然而,由于需要額外的寄存器以處理額外的狀態(tài)封包,這種解 決方案將會顯著增加晶片面積。此外,如果所述狀態(tài)封包的數(shù)量超過該流水線的儲存能力, 該圖形流水線將會暫緩,因此,這種解決方案可能產(chǎn)生時間問題(timing issue)。另一潛在解決方案將嘗試使用軟件對增加的狀態(tài)封包數(shù)量進(jìn)行補(bǔ)償。例如該驅(qū)動 器或該終端用戶應(yīng)用可嘗試將發(fā)送給該GPU的工作重定序以減少狀態(tài)改變數(shù)量(增加每一 狀態(tài)改變所發(fā)送的工作)。然而這種解決方案具有至少兩個缺點。第一缺點為,這種解決方 案僅對一些工作負(fù)荷(workload)(—些固有太多狀態(tài)改變的工作負(fù)荷)起作用。第二缺點 為,這種解決方案顯著增加該CPU檢索及分類輸入事務(wù)(inputtransaction)的工作負(fù)荷。綜上所述,需要一種提供有效狀態(tài)管理系統(tǒng)的方法及系統(tǒng)。
發(fā)明內(nèi)容
透過提供一有效狀態(tài)管理系統(tǒng)及其應(yīng)用,本發(fā)明滿足上述確定的要求。根據(jù)本發(fā)明一實施例,提出一執(zhí)行狀態(tài)依賴進(jìn)程(state-cbpedentprocess)的基 于計算機(jī)的系統(tǒng)(computer-based system)。該基于計算機(jī)的系統(tǒng)包括命令處理器以及多 個處理模塊。該命令處理器接收命令流內(nèi)的命令,并管理響應(yīng)于該命令流內(nèi)的全局背景事 件的全局狀態(tài)。該多個處理模塊接收該命令流內(nèi)的所述命令,并管理響應(yīng)于該命令流內(nèi)的 模塊背景事件的各個模塊狀態(tài)。該多個處理模塊依據(jù)該全局狀態(tài)及所述各個處理模塊的模 塊狀態(tài)在一數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。根據(jù)本發(fā)明另一實施例,提出一在一ASIC內(nèi)執(zhí)行狀態(tài)依賴進(jìn)程的方法。該方法包 括管理響應(yīng)于一命令流內(nèi)的全局背景事件的該ASIC的全局狀態(tài)、以及分別管理響應(yīng)于該 命令流內(nèi)的模塊背景事件的多個處理模塊內(nèi)的每一處理模塊的模塊狀態(tài)。該多個處理模塊 依據(jù)該全局狀態(tài)及所述各個處理模塊的模塊狀態(tài)在一數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。根據(jù)本發(fā)明的再一實施例,提出一有形計算機(jī)可讀儲存媒介,包括具體表現(xiàn)在軟 件內(nèi)的ASIC,其中,該ASIC執(zhí)行狀態(tài)依賴進(jìn)程。該ASIC包括命令處理器以及多個處理模 塊。該命令處理器接收命令流內(nèi)的命令,并管理響應(yīng)于該命令流內(nèi)的全局背景事件的全局 狀態(tài)。該多個處理模塊接收該命令流內(nèi)的所述命令,并管理響應(yīng)于該命令流內(nèi)的模塊背景 事件的各個模塊狀態(tài)。該多個處理模塊依據(jù)該全局狀態(tài)及所述各個處理模塊的模塊狀態(tài)在 一數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。以下參考附圖詳細(xì)描述本發(fā)明更多的特征及優(yōu)點和本發(fā)明的各種實施例的結(jié)構(gòu) 及操作。注意本發(fā)明并非限制于本文描述的所述特定實施例。本文介紹的所述實施例僅作 說明目的。依據(jù)本文包含的所述教導(dǎo),本領(lǐng)域的技術(shù)人員將明了附加的實施例。
所述附圖包含在本文內(nèi)并形成該說明書的一部分,所述附圖與該描述一起闡述本 發(fā)明,進(jìn)一步擔(dān)任解釋本發(fā)明的原理并使本領(lǐng)域技術(shù)人員能制造及使用本發(fā)明。圖1描繪一闡述一范例系統(tǒng)的方塊圖,該范例系統(tǒng)包括根據(jù)本發(fā)明一實施例的 GPU ;圖2描繪一闡述圖1的GPU特征的方塊圖;圖3描繪一闡述包含在圖1的GPU內(nèi)的圖形流水線細(xì)節(jié)的方塊圖;以及圖4描繪一表,該表闡述根據(jù)本發(fā)明一實施例的全局狀態(tài)及模塊狀態(tài)的管理。從以下提出的結(jié)合附圖的實施方式中,本發(fā)明的特征及優(yōu)點將變得更明了。于所 述附圖中,相同的參考符號始終識別相關(guān)的元件。于所述圖式內(nèi),相同的參考數(shù)字大體標(biāo)示 相同的、功能相似及/或結(jié)構(gòu)相似的元件。對應(yīng)參考數(shù)字內(nèi)的該最左數(shù)位標(biāo)示元件首次出 現(xiàn)其中的該圖式。
具體實施例方式I.概述本發(fā)明提供一用于復(fù)雜ASIC的有效狀態(tài)管理系統(tǒng)及其應(yīng)用。在以下詳細(xì)描述中, 關(guān)于〃 一個實施例(one embodiment)",“ 一實施例(anembodiment)“,“ 一具體實施例
5(an example embodiment)“等等表明該所述實施例可包括特定特征、結(jié)構(gòu)或特色,但每一 實施例可不必然包括該特定特征、結(jié)構(gòu)或特色。而且,這樣的短語不必然涉及相同實施例。 此外,當(dāng)結(jié)合一實施例描述特定特征、結(jié)構(gòu)或特色時,我們認(rèn)為在本領(lǐng)域的技術(shù)人員的知識 內(nèi)能夠結(jié)合其他實施例以變更這樣的特征、結(jié)構(gòu)或特色,不論所述實施例是否被明確描述。為闡述目的而非做為限制,根據(jù)本發(fā)明實施例的有效狀態(tài)管理系統(tǒng)在本文中從 GPU的角度描述,該GPU根據(jù)該GPU的圖形流水線的全局狀態(tài)與模塊狀態(tài)執(zhí)行繪圖命令流 (steam of draw command)。然而,需明白的是這樣的有效狀態(tài)管理系統(tǒng)可應(yīng)用于其他類型 的系統(tǒng),所述其他類型的系統(tǒng)根據(jù)所述各個系統(tǒng)的狀態(tài)執(zhí)行命令流。根據(jù)本文所述,本領(lǐng)域 技術(shù)人員將了解如何在其他類型系統(tǒng)內(nèi)實施本發(fā)明的實施例。如上所述,根據(jù)本發(fā)明一實施例的有效狀態(tài)管理系統(tǒng)獨立管理一圖形流水線的 全局狀態(tài)及模塊狀態(tài)。該全局狀態(tài)包括預(yù)定數(shù)量的可能的全局狀態(tài)(possible global state),例如,8個可能的全局狀態(tài)。所述模塊狀態(tài)各自包括預(yù)定數(shù)量的可能的模塊狀態(tài),例 如2、4、8、16、32、64或一些其他數(shù)量的可能的模塊狀態(tài)。對于每一模塊,所述可能的模塊狀 態(tài)的數(shù)量可能不同。該全局狀態(tài)可相當(dāng)于與不能頻繁改變的場景內(nèi)所描繪的特征有關(guān)的繪 畫常量,例如該場景內(nèi)的光線方向。所述模塊狀態(tài)可相當(dāng)于與該頻繁改變的場景內(nèi)所描繪 的特征有關(guān)的繪畫常量,例如該場景所描繪的由于風(fēng)所導(dǎo)致的草吹動的方向。如本文所使用,該術(shù)語“模塊(block),,指包含在ASIC、CPU的執(zhí)行流水線、及/或 GPU的圖形流水線內(nèi)的處理模塊。這樣的處理模塊可包括但并非限制于算術(shù)邏輯單元、乘 法/除法單元、浮點單元、色彩緩沖器、頂點著色器(vertex shader)、像素著色器、限幅單 元(clippingimit)、Z緩沖器、或本領(lǐng)域技術(shù)人員明了的一些其他處理模塊。由于根據(jù)本發(fā)明的實施例的圖形流水線獨立管理全局狀態(tài)及模塊狀態(tài),這樣的圖 形流水線可執(zhí)行繪圖命令,該繪圖命令是以比普通圖形流水線更大數(shù)量的不同值為基礎(chǔ)。 例如普通圖形流水線可典型地執(zhí)行一基于多達(dá)8個不同值的繪圖命令。相反地,根據(jù)本發(fā) 明的一實施例的圖形流水線可執(zhí)行一基于多達(dá)例如256個不同值的繪圖命令。該全局狀態(tài)被一命令處理器(co_and processor,簡稱CP)管理。該CP保持一全 局狀態(tài)已使用位(globe-state dirty bit)及一全局狀態(tài)識別(ID)位。該全局狀態(tài)已使 用位標(biāo)示該圖形流水線的該全局狀態(tài)是否需要更新。該全局狀態(tài)ID位標(biāo)示該圖形流水線 的全局狀態(tài)。一全局背景事件(globe context event)后,該全局狀態(tài)ID位遞增。全局背 景事件是一輸入(數(shù)據(jù))流(例如數(shù)據(jù)封包)內(nèi)的事件,該輸入流標(biāo)示該全局狀態(tài)待被更 新(to be updated)。該全局狀態(tài)已使用位由于一繪圖呼叫(draw call)而被清除。所述模塊狀態(tài)被該圖形流水線的所述各個模塊管理。該圖形流水線內(nèi)的每一模 塊保存一模塊狀態(tài)已使用位及一模塊狀態(tài)ID位。該模塊狀態(tài)已使用位標(biāo)示一模塊的該模 塊狀態(tài)是否應(yīng)該更新。符合一模塊的該模塊狀態(tài)ID位標(biāo)示那個模塊的模塊狀態(tài)。在一模 塊背景事件上,若下一模塊狀態(tài)更新符合那個模塊,一模塊的模塊狀態(tài)ID位遞增。模塊背 景事件是該輸入(數(shù)據(jù))流(例如數(shù)據(jù)封包)內(nèi)的事件,該輸入流標(biāo)示一模塊狀態(tài)待被更 新。于一實施例中,該圖形流水線內(nèi)的模塊根據(jù)該下一模塊狀態(tài)更新(next block state update)的地址區(qū)間確定該下一模塊狀態(tài)更新符合該模塊。與該全局狀態(tài)已使用位相似,該 模塊狀態(tài)已使用位由于一繪圖呼叫而被清除。一有效狀態(tài)管理系統(tǒng)可表達(dá)在計算機(jī)系統(tǒng)內(nèi),該計算機(jī)系統(tǒng)包括GPU。以下更詳細(xì)描述這樣的有效狀態(tài)管理系統(tǒng)的一范例硬件實施及其操作。還描述這樣的有效狀態(tài)管理系 統(tǒng)的軟件實施。II.有效狀態(tài)管理系統(tǒng)的一范例硬件實施如上所述,根據(jù)本發(fā)明一實施例的有效狀態(tài)管理系統(tǒng)可實施在一 ASIC內(nèi),該ASIC 執(zhí)行一命令流。為闡述目的,并非限制,這樣的有效狀態(tài)管理系統(tǒng)是從一范例圖形流水線角 度描述,該圖形流水線包括在一計算機(jī)系統(tǒng)內(nèi),以下詳細(xì)描述該計算機(jī)系統(tǒng)。A.范例計算機(jī)系統(tǒng)概述圖1是根據(jù)一實施例的計算機(jī)系統(tǒng)100的方塊圖。系統(tǒng)100包括中央處理單元 (CPU) 102、圖形處理單元(GPU) 110,且可選擇地包括協(xié)同處理器(coprocessor) 112。此外, 計算機(jī)系統(tǒng)100包括系統(tǒng)存儲器104,該系統(tǒng)存儲器104可被CPU 102,GPU 110以及協(xié)同處 理器112存取。GPU 110以及協(xié)同處理器112通過總線114與CPU 102及系統(tǒng)存儲器104 交流。總線114可以是使用在計算機(jī)系統(tǒng)內(nèi)的任何類型總線,包括但并非限制于周邊元件 擴(kuò)展接口(PCI)總線、加速圖形接口(AGP)總線以及高速周邊元件擴(kuò)展接口(PCIE)總線。 GPU 110及協(xié)同處理器112透過執(zhí)行某些特殊功能幫助CPU 102,GPU 110及協(xié)同處理器 112執(zhí)行所述特殊功能通常比CPU 102以軟件形式執(zhí)行所述特殊功能快。協(xié)同處理器112 可包括但并非限制于浮點協(xié)同處理器、GPU、聯(lián)網(wǎng)協(xié)同處理器以及本領(lǐng)域技術(shù)人員明了的其 他類型的協(xié)同處理器及處理器。系統(tǒng)100還包括第一局部存儲器106及第二局部存儲器108。第一局部存儲器106 耦接至GPU 110以及也耦接至總線114。第二局部存儲器108耦接至協(xié)同處理器112并也 耦接至總線114。第一及第二局部存儲器106、108分別對GPU 110及協(xié)同處理器112有效 以便提供盡可能更快的存取某些數(shù)據(jù)(例如頻繁使用的數(shù)據(jù)),如果所述數(shù)據(jù)儲存在系統(tǒng) 存儲器104內(nèi)的話。于一實施例中,GPU 110及協(xié)同處理器112與CPU 102 一起并行解碼指令,并且僅 執(zhí)行那些為它們準(zhǔn)備的指令。于另一實施例中,CPU102將為GPU 110及協(xié)同處理器112準(zhǔn) 備的指令發(fā)送至各自的命令緩沖器。例如,圖2描繪一闡述一實施例的方塊圖,于該實施例中,CPU102將為GPU 110準(zhǔn) 備的指令發(fā)送至一命令緩沖器202。命令緩沖器202可位于例如系統(tǒng)存儲器104內(nèi)或可為 耦接至總線114的獨立存儲器。如圖2所示,GPU 110包括程序機(jī)204以及圖形流水線206。 程序機(jī)204從命令緩沖器202取回指令。程序機(jī)204轉(zhuǎn)送所述指令至圖形流水線206內(nèi)的 一命令處理器。以下詳細(xì)描述圖形流水線206。B.范例圖形流水線圖3描繪一方塊圖,該方塊圖闡述根據(jù)本發(fā)明一實施例的圖形流水線206的細(xì)節(jié)。 如圖3所示,圖形流水線206包括命令處理器(CP) 310、寄存器總線管理器(register bus manager,簡稱RBM) 320、數(shù)據(jù)總線傳送(data bus transfer,簡稱DBT)模塊330、模塊A 340a、模塊B 340b、模塊C 340c、以及模塊D 340d。以下詳細(xì)描述所述元件中的每一元件。CP 310接收例如來自程序機(jī)204的命令流內(nèi)的命令,所述命令包括繪圖命令、全 局狀態(tài)更新以及模塊狀態(tài)更新。于一實施例中,每一命令包括寄存器地址。于該實施例中, 可根據(jù)包括在該命令內(nèi)的該地址是否落在預(yù)定地址范圍內(nèi),將一命令解析(parse)為繪圖 命令、全局狀態(tài)更新或模塊狀態(tài)更新。然而,本發(fā)明并非限制于該實施例。本領(lǐng)域技術(shù)人員將明了在不悖離本發(fā)明的精神及范疇下可使用解析命令的其他機(jī)制。CP 310還保存二已使用位(1)全局管理已使用(GMD)位312以標(biāo)示全局狀態(tài)更 新是否已被接收;(2)模塊管理已使用(BMD)位314以標(biāo)示模塊狀態(tài)更新是否已被接收。透 過例如上電成(power up as)邏輯1,GMD位312及BMD位314將已使用(組(set))上電。 透過一繪圖命令清除該二位。CP 310還管理寫進(jìn)圖形流水線206的模塊340的寄存器的全局狀態(tài)數(shù)量。為管理 全局狀態(tài)數(shù)量,CP 310管理全局狀態(tài)識別(ID),該全局狀態(tài)識別(ID)標(biāo)示圖形流水線206 的該全局狀態(tài)。該全局狀態(tài)ID的范圍從0變化至圖形流水線206所承受的全局狀態(tài)最大 數(shù)量,例如8個全局狀態(tài)。當(dāng)GPU 110被上電,該全局狀態(tài)ID被設(shè)置處于0狀態(tài)。如下詳 細(xì)所述,一全局背景事件被接收以及一新的全局狀態(tài)寫進(jìn)圖形流水線206之后,該全局狀 態(tài)ID遞增。圖形流水線206(例如模塊D340d)內(nèi)的一最后的模塊發(fā)送一脈沖回至CP 310 之后,一全局狀態(tài)ID被釋放(且之后可被重新使用)。例如,CP 310可將該全局狀態(tài)ID從 0遞增至1,但全局狀態(tài)ID 0不能被重新使用直到該最后模塊發(fā)送一脈沖回至CP 310標(biāo)示 與全局狀態(tài)ID 0相對應(yīng)的該背景已結(jié)束。CP 310耦接至RBM 320。CP 310寫所述繪圖命令、所述全局狀態(tài)更新及所述模塊 狀態(tài)更新至RBM 320。如下詳細(xì)所述,分配給圖形流水線206的全局狀態(tài)數(shù)量由CP 310管理。RBM 320耦接至DBT模塊330。RBM 320寫所述繪圖命令、所述全局狀態(tài)更新及所 述模塊狀態(tài)更新至DBT模塊330。如下詳細(xì)所述,分配給圖形流水線206的模塊狀態(tài)數(shù)量由 RBM 320及所述各個模塊340共同管理。DBT模塊330透過數(shù)據(jù)總線380及寄存器總線(控制總線)390耦接至模塊A 340a、模塊B 340b、模塊C 340c以及模塊D 340d。數(shù)據(jù)總線380提供輸入(數(shù)據(jù))流至模 塊340。模塊A 340a到模塊D 340d以串接鏈方式(daisy chain manner)耦接至數(shù)據(jù)總線 380。也就是說模塊A 340a在該輸入流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程,接著將該數(shù)據(jù)發(fā)送至模塊B 340b;模塊B 340b在該輸入流內(nèi)的該數(shù)據(jù)上執(zhí)行進(jìn)程,接著將該數(shù)據(jù)發(fā)送至模塊C 340c; 模塊C 340c在該輸入流內(nèi)的該數(shù)據(jù)上執(zhí)行進(jìn)程,接著將該數(shù)據(jù)發(fā)送至模塊D 340d;以及模 塊D 340d在該輸入流內(nèi)的該數(shù)據(jù)上執(zhí)行進(jìn)程,接著將該數(shù)據(jù)輸出作為圖形流水線206的輸 出。模塊D 340d在一給定全局背景的該數(shù)據(jù)上執(zhí)行進(jìn)程之后,模塊D 340d發(fā)送一脈沖回至 CP 310以標(biāo)示與該給定全局背景相關(guān)的該全局狀態(tài)ID可被重新分配。除提供一輸入(數(shù) 據(jù))流之外,數(shù)據(jù)總線380提供全局背景事件及模塊背景事件給模塊340。于一實施例中, 數(shù)據(jù)總線380是一百位寬。寄存器總線390提供命令給模塊340,所述命令包括繪圖命令、全局狀態(tài)更新以及 模塊狀態(tài)更新。一繪圖命令根據(jù)分配給該繪圖命令的該全局狀態(tài)及該(所述)模塊狀態(tài)指 示模塊340在自數(shù)據(jù)總線380接收的該數(shù)據(jù)上執(zhí)行繪圖。全局狀態(tài)更新被寫進(jìn)所述各個模塊保持的局部寄存器。如圖3所述,模塊A 340a 寫所述全局狀態(tài)更新至寄存器文件A 342內(nèi)的寄存器;模塊B 340b寫所述全局狀態(tài)更新至 寄存器文件B 352內(nèi)的寄存器;模塊C 340c寫所述全局狀態(tài)更新至寄存器文件C 362內(nèi)的 寄存器;以及模塊D 340d寫所述全局狀態(tài)更新至寄存器文件D 372內(nèi)的寄存器。模塊狀態(tài)更新僅僅被寫至圖形流水線206內(nèi)特定模塊。例如寄存器總線390上的
8一模塊狀態(tài)更新可僅為模塊B 340b準(zhǔn)備。于該實施例中,僅模塊B 340b將會寫該模塊狀 態(tài)更新至寄存器文件B 352內(nèi)的一寄存器內(nèi)。所有其他模塊將不會寫該模塊狀態(tài)更新至它 們各自保持的局部寄存器文件內(nèi)的寄存器。于一實施例中,一模塊狀態(tài)更新包括地址。于 該實施例中,每一模塊340根據(jù)該模塊狀態(tài)更新的地址決定其是否應(yīng)該寫該模塊狀態(tài)更新 至它的局部寄存器文件。然而,本領(lǐng)域技術(shù)人員將明了在不悖離本發(fā)明的精神及范疇下,可 使用決定特定模塊是否應(yīng)該寫一模塊狀態(tài)更新至它的局部寄存器的其他機(jī)制。給定圖形流水線206結(jié)構(gòu),以下詳細(xì)描述其操作。III.有效狀態(tài)管理系統(tǒng)的范例操作如上所述,圖形流水線206獨立管理全局狀態(tài)更新及模塊狀態(tài)更新,因此,使圖形 流水線206能夠根據(jù)相對大數(shù)量的不同繪圖常量執(zhí)行繪圖命令。首先,介紹全局管理狀態(tài) 及模塊管理狀態(tài)的概述。接著,介紹一限制分配該圖形流水線206的全局狀態(tài)及模塊狀態(tài) 數(shù)量的范例方式。最后,介紹一系列范例事件以闡述根據(jù)本發(fā)明一實施例的有效狀態(tài)管理 系統(tǒng)的操作。A.全局及模塊管理狀態(tài)轉(zhuǎn)變CP 310管理全局狀態(tài)更新。如果CP 310檢測到該命令流內(nèi)的一全局狀態(tài)更新 以及如果圖形流水線206內(nèi)有可被寫的全局狀態(tài)寄存器,CP 310將執(zhí)行以下功能(i)設(shè) 置GMD位312 (如果GMD位312還未被設(shè)置);(ii)發(fā)送一全局背景事件(即“Global_ Context.Done")給RBM320,RBM 320在數(shù)據(jù)總線380上提供該全局背景事件;(iii)遞增 該全局狀態(tài)ID位;(iv)寫給在CP 310內(nèi)的GBL_C0PY_STATE寄存器;以及(ν)發(fā)送該全 局狀態(tài)更新給RBM 320,RBM 320在寄存器總線390上提供該全局狀態(tài)更新。然而,如果CP 310檢測到該命令流內(nèi)的一全局狀態(tài)更新,但圖形流水線206內(nèi)沒有可用的全局狀態(tài)寄存 器,前述寫給該GBL_C0PY_STATE寄存器暫緩直到一背景可用。GMD位312被用于標(biāo)示一背 景已為了這組狀態(tài)被滾動。如果BMD位314未被設(shè)置且CP 310檢測到該命令流內(nèi)的模塊狀態(tài)更新,CP310將 設(shè)置BMD位314,發(fā)送被所述模塊狀態(tài)更新跟隨的Bl0Ck_C0ntext_D0ne事件。由CP 310及 各個的模塊340保存的所述已使用位被設(shè)置成標(biāo)示一背景已為了這組狀態(tài)被滾動。如果沒 有可用的模塊狀態(tài)寄存器,該目標(biāo)模塊(例如模塊B 340b)若不再接收寄存器更新,則該目 標(biāo)模塊(例如模塊B 340b)為不能恢復(fù)空閑負(fù)責(zé)。藉由章節(jié)III. C所提供的一系列范例事件進(jìn)一步闡述該全局及模塊管理狀態(tài)轉(zhuǎn) 變的操作。B.管理分配給本發(fā)明一實施例的圖形流水線的全局狀態(tài)及模塊狀態(tài)的數(shù)量。分配給圖形流水線206的全局狀態(tài)數(shù)量由CP 310管理,但是,分配給圖形流水線 206的模塊狀態(tài)數(shù)量由RBM 320及所述各個模塊340共同管理。現(xiàn)在詳細(xì)描述管理全局狀 態(tài)及模塊狀態(tài)數(shù)量的機(jī)制。CP 310不斷地寫繪圖命令及模塊狀態(tài)更新給RBM 320。然而,如果所分配的全局 狀態(tài)數(shù)量小于圖形流水線206所承受的全局狀態(tài)最大數(shù)量,CP 310僅寫全局狀態(tài)更新給 RBM 320。即,分配給圖形流水線206的全局狀態(tài)數(shù)量由CP 310管理。RBM 320不斷地寫繪圖命令及全局狀態(tài)更新給DBT模塊330。然而,如果所分配的 模塊狀態(tài)數(shù)量小于圖形流水線206的模塊340所承受的模塊狀態(tài)的最大數(shù)量,RBM 320僅寫模塊狀態(tài)更新給DBT模塊330。DBT模塊330根據(jù)接收自模塊340的信號決定模塊狀態(tài)數(shù) 量是否小于該最大數(shù)量。即,RBM 320及所述各個模塊340管理分配給圖形流水線206的 模塊狀態(tài)更新數(shù)量。如上所述,RBM 320及模塊340共同起作用以調(diào)節(jié)(throttle)寫進(jìn)圖形流水線 206的模塊狀態(tài)更新數(shù)量。如圖3所述,模塊340分別透過跡線344、354、364及374連接至 RBM 320。只要分配給所述模塊的模塊狀態(tài)數(shù)量小于每一模塊的模塊狀態(tài)的最大數(shù)量,RBM 320寫模塊狀態(tài)更新給DBT模塊330,DBT模塊330依次(in turn)寫所述模塊狀態(tài)更新至 寄存器總線390。然而如果一個模塊340的模塊更新數(shù)量達(dá)到那個模塊的模塊狀態(tài)最大數(shù) 量,那個模塊不返回“空閑(free) ”信號給RBM 320。因此,RBM 320暫緩直到先前發(fā)布的繪 圖命令完成執(zhí)行以及分配給那個繪圖命令的該模塊狀態(tài)(或所述模塊狀態(tài))被解除分配。C. 一系列范例事件圖4描繪表400,表400闡述圖形流水線206如何響應(yīng)于一系列范例事件。如圖4 所示,表400包括8列。第一列410包括行號(linenumber),所述行號列舉所接收到的該一 系列事件。第二列420包括CP 310所接收的并被寫至寄存器總線390的范例事件。第三 列430包括該提供在數(shù)據(jù)總線380上的輸入(數(shù)據(jù))流。第四列440標(biāo)示CP 310的GMD 位312的狀態(tài)。第五列450包括CP 310的BMD位314的狀態(tài)。第六列460包括全局狀態(tài) ID,該全局狀態(tài)ID標(biāo)示圖形流水線206的全局狀態(tài)。第七列470標(biāo)示一模塊已使用位的狀 態(tài)及模塊A 340a的模塊背景標(biāo)志位。以及第八列480標(biāo)示模塊A 340a的一模塊狀態(tài)ID。 第七列470及第八列480闡述模塊A 340a如何響應(yīng)于該一系列范例事件。本領(lǐng)域技術(shù)人 員將了解模塊B 340b、模塊C 340c、模塊D 340d以與模塊A 340a相同的方式運行?,F(xiàn)詳 細(xì)描述由第一列410內(nèi)的行號所列舉的該一系列事件。參考表400第一列410,如第四列440及第五列450所分別描述,行1闡述GMD位 312及BMD位314是被上電已使用(power up dirty)(即邏輯1)。此外,第七列470闡述 模塊A 340a的已使用位也被上電已使用(及邏輯1)。于行2及3內(nèi),一模塊狀態(tài)及一全局 狀態(tài)被分別接收。所述狀態(tài)寫(state write)不能引起任何狀態(tài)改變。于行4 內(nèi),一 Draw_Initiator_in_Context_(Ctx)_0 命令被接收。如第四列 440、 第五列450及第七列470分別所述,這個繪圖命令清除GMD位312、BMD位314以及由模塊 A 340a管理的該已使用位。該繪圖命令被執(zhí)行在數(shù)據(jù)總線380上所提供的數(shù)據(jù)上。第三列 430標(biāo)示這個數(shù)據(jù)包括頂點/像素矢量(vertex/pixel vectors)。于行5內(nèi),Global_Context_Done命令被接收。這個命令標(biāo)示全局背景0已經(jīng)結(jié) 束。因此,該全局背景事件(Ctx Done Event)被提供在數(shù)據(jù)總線380上以指示圖形流水線 206內(nèi)的模塊340該全局背景0已經(jīng)結(jié)束。于一實施例內(nèi),該背景完成事件是一數(shù)據(jù)封包。于行6內(nèi),一寫GBL_C0PY_STATE命令被接收。這個命令標(biāo)示一個新全局狀態(tài)將被 寫進(jìn)圖形流水線206的所述寄存器。由于這個命令,如第四列440所標(biāo)示,GMD位312被設(shè) 置。此外,如第六列460所標(biāo)示,該全局狀態(tài)ID位被遞增至1以標(biāo)示圖形流水線206正進(jìn) 入一新的全局狀態(tài)。于行7內(nèi),與全局背景1相對應(yīng)的該全局狀態(tài)更新被接收且被寫進(jìn)圖形流水線206 的所述寄存器。于行8內(nèi),DraW_Initiat0r_in_CtX_l命令被接收。這個繪圖命令清除先前設(shè)置的
10唯一的已使用位,即第四列440所述的GMD位312。與行4所接收的Draw_Initiator_in_ Ctx_0相似,該Draw_Initiator_in_Ctx_l命令被執(zhí)行在數(shù)據(jù)總線380上攜帶(carry)的頂
點/像素矢量上。于行9內(nèi),一 Block_Context_Done事件被接收。這個命令標(biāo)示所述模塊背景中的 一個模塊背景已被完成。因此,BMD位314被設(shè)置(如第五列450所述)且一模塊背景事件 (Blk_Ctx_Done_Event)被提供在數(shù)據(jù)總線380上。如第七列470所標(biāo)示,模塊A 340a檢測 這個事件,但并不初始設(shè)置它的已使用位。模塊A 340a不初始設(shè)置其已使用位是因為仍然 未確定這個模塊事件是否與模塊A 340a相對應(yīng)。這個模塊事件可與圖形流水線206內(nèi)的 任一模塊340相對應(yīng)。于行10內(nèi),一模塊狀態(tài)(BloCk_State)(包括BlkA狀態(tài))命令被接收,該命令標(biāo) 示這個模塊事件與模塊A 340a相對應(yīng)。因此,分別如第七列470及第八列480所標(biāo)示,模 塊A 340a設(shè)置它的已使用位并遞增它的狀態(tài)ID。如上所述,于一實施例中,該命令流內(nèi)的 所述命令包括地址,且由于該BloCk_State的地址落入與模塊A 340a相對應(yīng)的預(yù)定地址范 圍,模塊A 340a決定該BloCk_State應(yīng)該被寫進(jìn)寄存器文件A 342內(nèi)的一寄存器。于行11內(nèi),Gl0bal_C0nteXt_D0ne命令被接收。這個命令標(biāo)示全局背景1已結(jié)束。 因此,一全局背景事件(Ctx_D0ne_Event)被提供在數(shù)據(jù)總線380上,以指示圖形流水線206 內(nèi)的模塊340全局背景1已結(jié)束。于行12內(nèi),寫GBL_C0PY_STATE命令被接收,與行6所接收的寫GBL_C0PY_STATE 命令相似,該接收在行12內(nèi)的命令標(biāo)示一新的全局狀態(tài)將被寫進(jìn)圖形流水線206的所述寄 存器。由于這個命令,如第四列440所標(biāo)示,GMD位312被設(shè)置。此外,如第六列460所標(biāo) 示,該全局狀態(tài)ID位被遞增至2,以標(biāo)示圖形流水線206正進(jìn)入一個新的全局狀態(tài)。于行13內(nèi),與全局背景2相對應(yīng)的該全局狀態(tài)更新被接收且寫進(jìn)圖形流水線206 的所述寄存器。于行14內(nèi),DraW_Initiat0r_in_CtX_2命令被接收,這個繪圖命令清除先前設(shè)置 的所述已使用位,所述已使用位即分別如第四列440、第五列450及第七列470所述的GMD 位312、BMD位314以及由模塊A 340a管理的該已使用位。與行4所接收的Draw_Initiator_ in_Ctx_0 及行 8 所接收的 Draw_Initiator_in_Ctx_l 相似,該 Draw_Initiator_in_Ctx_2 命令被執(zhí)行在提供于數(shù)據(jù)總線380上的頂點/像素矢量上。于行15內(nèi),Block_Context_Done事件被接收。這個命令標(biāo)示所述模塊背景中的 一個模塊背景已完成。因此,BMD位314被設(shè)置(如第五列450所述),且一模塊背景事件 (Blk_Ctx_Done_Event)被寫進(jìn)數(shù)據(jù)總線380。如第七列470所標(biāo)示,模塊A 340a檢測這個 事件,但并不初始設(shè)置它的已使用位。于行16內(nèi),模塊狀態(tài)(BloCk_State)(非BlkA狀態(tài))命令被接收,該命令標(biāo)示這 個模塊事件與模塊A 340a不對應(yīng)。因此,分別如第七列470及第八列480所標(biāo)示,模塊A 340a不設(shè)置其已使用位,也不遞增它的狀態(tài)ID。于一實施例中,因為這個BloCk_State的 地址沒有落入與模塊A 340a相對應(yīng)的預(yù)定地址范圍,模塊A 340a決定這個BloCk_State 不應(yīng)該被寫入寄存器文件A 342內(nèi)的一寄存器。于行17內(nèi),另一 DraW_Initiat0r_in_CtX_2命令被接收,這個繪圖命令清除先前 設(shè)置的所述已使用位,所述已使用位即分別如第四列440、第五列450及第七列470所述的
11GMD位312、BMD位314以及由模塊A 340a管理的該已使用位。與先前接收的其他Draw_ Initiator命令相似,這個Draw_Initiator_in_Ctx_2命令被執(zhí)行在于數(shù)據(jù)總線380上攜帶
的頂點/像素矢量上。以與上述相似方式接收及處理附加事件。需注意上面介紹的該一系列范例事件僅 作為說明目的,并非以此限制本發(fā)明。IV.有效狀態(tài)管理系統(tǒng)的范例軟件應(yīng)用除了 GPU 110的硬件應(yīng)用之外,GPU 110也可被具體表現(xiàn)在所處理的軟件內(nèi),例如 配置用以存儲該軟件的計算機(jī)可用(即可讀)媒介(例如計算機(jī)可讀程序代碼)內(nèi)。該 程序代碼促使本發(fā)明的實施例實現(xiàn),包括以下實施例(i)本文所揭示的所述系統(tǒng)及技術(shù) (例如管理全局狀態(tài)更新及模塊狀態(tài)更新)的所述功能;(ii)本文所揭示的所述系統(tǒng)及技 術(shù)的制造(例如GPU 110的制造);或(iii)本文所揭示的所述系統(tǒng)及技術(shù)的功能及制造 的組合。例如,這可透過使用一般的編程語言(例如C或C++)、包括Verilog HDL, VHDL, Altera HDL(AHDL)等的硬件描述語言(HDL)、或其他可獲得的編程及/或圖表捕捉工具 (schematiccapture tool)(例如電路捕捉工具)來完成。該程序代碼可被任何已知計算機(jī)可讀媒介處理,該任何已知計算機(jī)可讀媒介包括 半導(dǎo)體、磁碟、光碟(例如CD-ROM,DVD-ROM)并作為具體表現(xiàn)在一計算機(jī)可使用(即可讀) 傳播媒介(例如載波或包括數(shù)字的(digital)、光的或以模擬為基礎(chǔ)(analog-based)的媒 介的任何其他媒介)內(nèi)的一計算機(jī)數(shù)據(jù)信號。就這點而論,該代碼可通過通訊網(wǎng)絡(luò)傳播,所 述通訊網(wǎng)絡(luò)包括互連網(wǎng)(internet)。需了解所述實現(xiàn)的功能及/或上述系統(tǒng)及技術(shù)所提供 的結(jié)構(gòu)可被表現(xiàn)在一核心(例如GPU核心)內(nèi),該核心被具體表現(xiàn)在程序代碼內(nèi)并可被轉(zhuǎn) 變成硬件以作為集成電路產(chǎn)品一部分。V.結(jié)論需明白的是該實施方式章節(jié)(并非發(fā)明說明(Summary)及摘要(Abstract)章節(jié)) 意圖被使用以解釋權(quán)利要求。該發(fā)明說明及摘要章節(jié)可闡明如發(fā)明人所周密考慮的本發(fā)明 的一個或多個但并非全部具體實施例,因此,并非意圖以任何方式限制本發(fā)明及附加的權(quán) 利要求。
權(quán)利要求
一種用以執(zhí)行狀態(tài)依賴進(jìn)程的基于計算機(jī)的系統(tǒng),該系統(tǒng)包括命令處理器,該命令處理器接收命令流內(nèi)的命令,并管理響應(yīng)于該命令流內(nèi)的全局背景事件的全局狀態(tài);以及多個處理模塊,所述處理模塊接收該命令流內(nèi)的所述命令,并管理響應(yīng)于該命令流內(nèi)的模塊背景事件的各個模塊狀態(tài),其中,每一處理模塊分別依據(jù)該全局狀態(tài)及所述各個處理模塊的模塊狀態(tài)在數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。
2.如權(quán)利要求1所述的系統(tǒng),其中,第一處理模塊管理第一數(shù)量的模塊狀態(tài),第二處理 模塊管理第二數(shù)量的模塊狀態(tài),其中,該第一數(shù)量不等于該第二數(shù)量。
3.如權(quán)利要求1所述的系統(tǒng),還包括接口模塊,該接口模塊管理每一處理模塊的計數(shù)器,該計數(shù)器與所述各個處理模塊內(nèi) 儲存的若干狀態(tài)相對應(yīng),且如果任何處理模塊的計數(shù)器超過一閾值,該接口模塊暫緩該命 令流內(nèi)的所述命令。
4.如權(quán)利要求1所述的系統(tǒng),其中,該命令處理器管理與該全局狀態(tài)相對應(yīng)的全局狀 態(tài)計數(shù)器,且如果該全局狀態(tài)計數(shù)器超過一閾值,該命令處理器暫緩該命令流內(nèi)的所述命 令。
5.如權(quán)利要求1所述的系統(tǒng),其中,該命令處理器僅在接收到空閑信號后重新分配第 一全局狀態(tài),該空閑信號來自該多個處理模塊中最終的處理模塊。
6.如權(quán)利要求1所述的系統(tǒng),其中,該基于計算機(jī)的系統(tǒng)包括圖形處理單元。
7.一種在專用集成電路ASIC內(nèi)執(zhí)行狀態(tài)依賴進(jìn)程的方法,該方法包括管理該ASIC的全局狀態(tài),該全局狀態(tài)響應(yīng)于命令流內(nèi)的全局背景事件;分別管理多個處理模塊內(nèi)的每一處理模塊的模塊狀態(tài),該模塊狀態(tài)響應(yīng)于該命令流內(nèi) 的模塊背景事件;以及依據(jù)該全局狀態(tài)及該各個處理模塊的模塊狀態(tài),在該多個處理模塊的每一處理模塊內(nèi) 的數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。
8.如權(quán)利要求7所述的方法,其中,分別管理響應(yīng)于該命令流內(nèi)的模塊背景事件的多 個處理模塊內(nèi)的每一處理模塊的模塊狀態(tài)包括管理第一處理模塊內(nèi)的第一數(shù)量的模塊狀態(tài)以及第二處理模塊內(nèi)的第二數(shù)量的模塊 狀態(tài),其中,該第一數(shù)量不等于該第二數(shù)量。
9.如權(quán)利要求7所述的方法,還包括管理每一處理模塊的計數(shù)器,該計數(shù)器與所述各個處理模塊內(nèi)儲存的若干狀態(tài)相對 應(yīng);以及如果任何處理模塊的計數(shù)器超過一閾值,暫緩該命令流內(nèi)的所述命令。
10.如權(quán)利要求7所述的方法,其中,管理響應(yīng)于命令流內(nèi)的全局背景事件的該ASIC的 全局狀態(tài)包括管理與該全局狀態(tài)相對應(yīng)的全局狀態(tài)計數(shù)器;以及如果該全局計數(shù)器超過一閾值,暫緩該命令流內(nèi)的所述命令。
11.如權(quán)利要求7所述的方法,其中,管理響應(yīng)于命令流內(nèi)的全局背景事件的該ASIC的 全局狀態(tài)包括僅在接收到空閑信號后重新分配第一全局狀態(tài),該空閑信號來自該多個處理模塊內(nèi)的最終的處理模塊。
12.—種有形計算機(jī)可讀儲存媒介,包括具體表現(xiàn)在軟件內(nèi)的ASIC,其中該ASIC執(zhí)行 狀態(tài)依賴進(jìn)程,該ASIC包括命令處理器,該命令處理器接收命令流內(nèi)的命令,并管理響應(yīng)于該命令流內(nèi)的全局背 景事件的全局狀態(tài);以及多個處理模塊,所述處理模塊被配置以接收該命令流內(nèi)的所述命令并管理響應(yīng)于該命 令流內(nèi)的模塊背景事件的各個模塊狀態(tài),其中,每一處理模塊分別依據(jù)該全局狀態(tài)及該各 個處理模塊的模塊狀態(tài)在數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。
13.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,第一處理模塊管理第一數(shù) 量的模塊狀態(tài),第二處理模塊管理第二數(shù)量的模塊狀態(tài),其中,該第一數(shù)量不等于該第二數(shù) 量。
14.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該ASIC還包括接口模塊,該接口模塊管理每一處理模塊的計數(shù)器,該計數(shù)器與所述各個處理模塊內(nèi) 儲存的若干狀態(tài)相對應(yīng),且如果任何處理模塊的計數(shù)器超過一閾值,該接口模塊暫緩該命 令流內(nèi)的所述命令。
15.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該命令處理器管理與該全 局狀態(tài)相對應(yīng)的全局狀態(tài)計數(shù)器,且如果該全局狀態(tài)計數(shù)器超過一閾值,該命令處理器暫 緩該命令流內(nèi)的所述命令。
16.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該命令處理器僅在接收到 空閑信號后重新分配第一全局狀態(tài),該空閑信號來自該多個處理模塊內(nèi)最終的處理模塊。
17.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該ASIC包括圖形處理單元。
18.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該ASIC被具體表現(xiàn)在硬件 描述語言軟件內(nèi)。
19.如權(quán)利要求12所述的有形計算機(jī)可讀儲存媒介,其中,該ASIC被具體表現(xiàn)在 Verilog硬件描述語言軟件及VHDL硬件描述語言軟件其中之一內(nèi)。
全文摘要
本發(fā)明提供一種復(fù)雜ASIC的有效狀態(tài)管理系統(tǒng)及其應(yīng)用。在一實施例中,基于計算機(jī)的系統(tǒng)執(zhí)行依賴狀態(tài)進(jìn)程。該基于計算機(jī)的系統(tǒng)包括命令處理器(CP)以及多個處理模塊。該命令處理器接收命令流內(nèi)的命令,并管理響應(yīng)于該命令流內(nèi)的全局背景事件的全局狀態(tài)。該多個處理模塊接收該命令流內(nèi)的所述命令,并管理響應(yīng)于該命令流內(nèi)的模塊背景事件的各個模塊狀態(tài)。每一處理模塊分別依據(jù)該全局狀態(tài)及該各個處理模塊的模塊狀態(tài)在一數(shù)據(jù)流內(nèi)的數(shù)據(jù)上執(zhí)行進(jìn)程。
文檔編號G06T1/20GK101918982SQ200880122341
公開日2010年12月15日 申請日期2008年12月23日 優(yōu)先權(quán)日2007年12月26日
發(fā)明者M·曼特, R·E·麥克拉里 申請人:先進(jìn)微裝置公司