專利名稱:存儲(chǔ)和回存狀態(tài)上下文在圖形處理單元的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明有關(guān)于圖形處理,特別是有關(guān)于一種存儲(chǔ)和回存上下文(context)在圖形處理單元的方法和系統(tǒng)。
背景技術(shù):
目前所知的計(jì)算機(jī)系統(tǒng)一般包括多個(gè)處理器,例如計(jì)算機(jī)系統(tǒng)中除了中央處理器(Central Processing Unit,CPU)執(zhí)行處理程序以外,另外計(jì)算機(jī)系統(tǒng)還具有一圖形處理單元(Graphics Processing Unit,GPU)用以減少CPU的負(fù)擔(dān),使CPU減少處理程序的負(fù)荷。在一些應(yīng)用中,處理器(例如GPU)可設(shè)置在計(jì)算機(jī)系統(tǒng)主機(jī)板上并且在CPU旁。而在另一應(yīng)用中,GPU和/或其他相關(guān)裝置可設(shè)置在一分離但電連接的卡上,例如GPU在一顯示卡上,關(guān)于上述應(yīng)用,本領(lǐng)域技術(shù)人員皆熟知此應(yīng)用。
輔助處理器(coprocessor),例如GPU,可存取例如顯示卡存儲(chǔ)器的額外存儲(chǔ)器,以執(zhí)行處理程序。再者,輔助處理器可以被設(shè)計(jì)以及最佳化來執(zhí)行特殊處理程序。對(duì)于GPU來說,GPU可以被最佳化以執(zhí)行三維圖形計(jì)算,所以GPU可以應(yīng)用于復(fù)雜的圖形計(jì)算上。然而傳統(tǒng)計(jì)算機(jī)系統(tǒng)和輔助處理器只能勝任執(zhí)行單一復(fù)雜圖形的應(yīng)用,當(dāng)執(zhí)行多個(gè)復(fù)雜圖形的應(yīng)用時(shí),傳統(tǒng)計(jì)算機(jī)系統(tǒng)和輔助處理器可能會(huì)遭遇到一些問題。
對(duì)于一般輔助處理器而言,排序本身工作流程并未使用最有效率的方法。在一些操作系統(tǒng)中,GPU可以多路切換,其方法是將待處理的工作依序送至GPU,GPU會(huì)依序執(zhí)行所接收到的工作。然而,這方法有一個(gè)問題就是無法妥善處理使用同一資源的多個(gè)應(yīng)用程序的優(yōu)先順序。在一非限定的例子中,當(dāng)?shù)谝粦?yīng)用程序正在使用GPU輔助處理器時(shí)必須交出控制權(quán)給另一應(yīng)用程序以完成他們的共同處理目標(biāo)。假如當(dāng)?shù)谝粦?yīng)用程序完成相關(guān)計(jì)算程序,但如果第一應(yīng)用程序不交出控制權(quán)給另一個(gè)等待的應(yīng)用程序,GPU會(huì)被第一應(yīng)用程序給占住,而等待的應(yīng)用程序則會(huì)遇到無法使用GPU的問題。如之前所述,當(dāng)只有使用單一復(fù)雜圖形應(yīng)用程序時(shí),上述問題并不會(huì)太嚴(yán)重,然而,占住GPU或其他共同處理器資源的問題,在多個(gè)應(yīng)用程序同時(shí)都想使用GPU時(shí),這個(gè)問題就會(huì)被突顯出來。
關(guān)于分配處理不同應(yīng)用程序的構(gòu)想,可以通過使用中斷CPU的方式,也就是上下文內(nèi)容從一任務(wù)跳到另一任務(wù)來完成。更具體來說,利用較新型的GPU以執(zhí)行上下文內(nèi)容的存儲(chǔ)/回存的構(gòu)想,利用存儲(chǔ)相關(guān)寄存器和程序計(jì)數(shù)器數(shù)據(jù),以繼續(xù)執(zhí)行之前被中斷的處理程序。然而關(guān)于CPU如何分配處理程序的問題已經(jīng)被探討,但是關(guān)于輔助處理器如何分配處理程序之前并無完整探討。
關(guān)于上述分配處理程序的問題,至少有一理由認(rèn)為輔助微處理器(例如GPU)可使CPU避免執(zhí)行復(fù)雜計(jì)算和耗時(shí)的程序,使CPU可以執(zhí)行其他任務(wù)。圖形處理往往包括復(fù)雜的計(jì)算,因此會(huì)使用大量處理程序的資源,當(dāng)復(fù)雜圖形應(yīng)用程序增加時(shí),GPU會(huì)被設(shè)計(jì)成更大更復(fù)雜,以應(yīng)付復(fù)雜計(jì)算。
關(guān)于如何精確中斷CPU,具有并行處理功能單元以及排序執(zhí)行功能單元的巨大復(fù)雜結(jié)構(gòu)EPIC型(Explicitly Parallel Instruction Computing)CPU會(huì)有一些問題,因此CPU結(jié)構(gòu)中的寄存器必須被重新設(shè)計(jì),使得數(shù)十個(gè)指令可同時(shí)執(zhí)行在處理流水線(pipeline)的不同階段。為了使精確中斷成為可能,CPU必須具有一重新排序緩沖器和一額外執(zhí)行指令(instruction commit(retirement))在處理流水線中。
目前GPU是使用不同型指令(可稱為巨集指令),執(zhí)行各GPU指令需要數(shù)百到數(shù)千周期,目前利用GPU流水線來處理圖形的比重已經(jīng)超過CPU來處理圖形的比重,因此GPU往往會(huì)遇到因?yàn)椴痪哂凶銐蛱幚斫Y(jié)構(gòu)來處理大量數(shù)據(jù)于存儲(chǔ)和回存,所以目前大部分GPU朝著在任何時(shí)間點(diǎn)上皆可處理大量數(shù)據(jù)的方向在設(shè)計(jì),使得GPU在分配程序上變的復(fù)雜。更具體來說,GPU會(huì)采用具有長(zhǎng)序列數(shù)據(jù)的外來指令,例如圖形圖元(draw primitive),因而產(chǎn)生關(guān)于如何完成之前被中斷事件的問題。
因此,需要一新而有效的方法來克服上述缺點(diǎn)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種圖形處理器GPU可被中斷,因而可以在同一時(shí)間處理多個(gè)圖形程序,圖形處理器是一硬件設(shè)備可通過中斷程序以提供多個(gè)程序之間的切換。
當(dāng)圖形處理器接收第一上下文時(shí),圖形處理器接收來自中央處理器的一中斷指令,另外,一中斷事件可以在圖形處理器的內(nèi)部電路產(chǎn)生,猶如分頁(yè)出錯(cuò)(Page fault)在圖形處理器的虛擬存儲(chǔ)器中。圖形處理器存儲(chǔ)第一上下文至存儲(chǔ)器中,并存儲(chǔ)第一上下文的中斷點(diǎn)位置,之后,圖形處理器從存儲(chǔ)器載入第二上下文至圖形處理器,并執(zhí)行第二上下文,在第二上下文完成后,假如中斷指令指向回存第一上下文,圖形處理器從存儲(chǔ)器中提取第一上下文并回存至之前中斷點(diǎn),之后,圖形處理器處理第一上下文的剩余部分從中斷點(diǎn)到第一上下文的最后部分。
圖形處理器包括一個(gè)或多個(gè)處理器以接收中斷指令或內(nèi)部中斷事件,處理流水線(processing pipeline)完成一預(yù)先決定數(shù)量的第一上下文,并丟棄一些數(shù)據(jù)和終止進(jìn)一步處理第一上下文,處理流水線包括一些元件以溝通第一上下文的狀態(tài),當(dāng)中斷發(fā)生至一個(gè)或多個(gè)處理器時(shí),并存儲(chǔ)目前狀態(tài)以供未來使用,之后一個(gè)或多個(gè)處理器從存儲(chǔ)器中提取所存儲(chǔ)的狀態(tài),并傳回至處理流水線的之前中斷點(diǎn),利用這方法,圖形處理器可切換在多個(gè)上下文之間,是圖形處理器可以被多個(gè)程序同時(shí)使用。
本發(fā)明提供一種存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,包括當(dāng)一第一狀態(tài)上下文被圖形處理單元執(zhí)行時(shí),接收一中斷指令和事件的一者;存儲(chǔ)對(duì)應(yīng)于接收到的中斷指令的第一狀態(tài)上下文在包括第一狀態(tài)上下文的一精確處理位置的一存儲(chǔ)器中,以及;從一預(yù)先決定邏輯位置載入一第二狀態(tài)上下文以提供圖形處理單元處理,其中圖形處理單元執(zhí)行一個(gè)或多個(gè)與第二狀態(tài)上下文有關(guān)的命令。
本發(fā)明提供一種可中斷圖形處理單元,當(dāng)接收到一中斷指令時(shí),存儲(chǔ)一第一上下文,并依序執(zhí)行一第二上下文,以及回存第一上下文以供執(zhí)行,包括一指令處理器,用以傳送關(guān)于各上下文的信息至多個(gè)結(jié)構(gòu)處理單元,指令處理器具有一第一語法分析器以處理關(guān)于各上下文的一環(huán)緩沖區(qū)的指令,以及多個(gè)數(shù)據(jù)線,耦接于少于結(jié)構(gòu)處理單元的總數(shù)量的多個(gè)結(jié)構(gòu)處理單元和指令處理器的一第二語法分析器之間,當(dāng)一中斷指令被指令處理器接收時(shí),其中關(guān)于第一上下文的寄存數(shù)據(jù)通過多個(gè)數(shù)據(jù)途徑傳送至第二語法分析器,并且存儲(chǔ)至一存儲(chǔ)器中。
本發(fā)明提供一種可中斷圖形處理單元,用以執(zhí)行多個(gè)執(zhí)行程序,包括一串流處理器,具有一第一語法分析器和第二語法分析器以及;多個(gè)處理區(qū)塊,連續(xù)耦接在一起,一第一處理區(qū)塊接收來自第一語法分析器的指令和狀態(tài)數(shù)據(jù),第二語法分析器耦接少于所有處理區(qū)塊的總數(shù)量的處理區(qū)塊,其中第一語法分析器辨認(rèn)在一數(shù)據(jù)結(jié)構(gòu)串中的一回存指令,以致于關(guān)于一存儲(chǔ)上下文的狀態(tài)數(shù)據(jù)從存儲(chǔ)器中被提取,并通過第一語法分析器傳送至一個(gè)或多個(gè)處理區(qū)塊以執(zhí)行關(guān)于存儲(chǔ)上下文的指令和數(shù)據(jù)。
然而,本發(fā)明實(shí)施例的其他系統(tǒng)、方法、特征以及一些發(fā)明的優(yōu)點(diǎn)可以通過以下實(shí)施例的說明和附圖更加了解。
圖1表示一計(jì)算裝置,其中上下文切換在GPU中。
圖2表示GPU切換上下文的切換程序。
圖3表示用于圖2的一上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)。
圖4表示第一次存儲(chǔ)/回存前的環(huán)緩沖區(qū)的初始結(jié)構(gòu)。
圖5表示當(dāng)存儲(chǔ)/恢復(fù)上下文之后的環(huán)緩沖區(qū)。
圖6表示圖4和圖5環(huán)緩沖區(qū)結(jié)構(gòu)被GPU 84執(zhí)行的示意圖。
圖7表示GPU的部分結(jié)構(gòu)圖,可包括存儲(chǔ)和恢復(fù)狀態(tài),如圖6所述。
圖8表示圖7的3D流水線結(jié)構(gòu)區(qū)塊176的細(xì)部圖,并顯示存儲(chǔ)部分中斷上下文,以及繼續(xù)處理另一部份中斷上下文。
圖9表示流程圖,包括第7和圖8的存儲(chǔ)狀態(tài)和寫入狀態(tài)命令至CSP 190的流程。
圖10表示3D流水線結(jié)構(gòu)區(qū)塊176(圖7)和更詳細(xì)流水線圖(圖8)。
圖11表示圖10的3D流水線176執(zhí)行存儲(chǔ)和恢復(fù)狀態(tài)程序的流程圖。
圖12表示圖7的CSP可執(zhí)行多個(gè)上下文的運(yùn)轉(zhuǎn)流程圖。
圖13表示CSP處理一目前運(yùn)行表和環(huán)緩沖器的流程圖。
圖14表示圖7的CSP運(yùn)作的流程圖,當(dāng)CSP執(zhí)行一環(huán)緩沖區(qū)結(jié)構(gòu)和在一循環(huán)中尋找一環(huán)緩沖區(qū)的終結(jié)指令。
圖15表示圖12-14的數(shù)據(jù)結(jié)構(gòu)。
圖16表示當(dāng)回存一上下文時(shí),CSP執(zhí)行程序的流程圖。
圖17表示圖10的流水線的第一上下文的中斷和下一上下文的初始流程圖。
圖18表示圖10的三角建立單元輸入解碼器接收到一中斷終結(jié)信號(hào)的運(yùn)作流程圖。
圖19表示在3D流水線176中轉(zhuǎn)儲(chǔ)/重置/詢問狀態(tài)機(jī)制的執(zhí)行流程圖。
圖20表示當(dāng)接收到接線信號(hào)和之后中斷終結(jié)代符,圖10的屬性建立單元執(zhí)行程序的流程圖。
圖21表示圖10的范圍產(chǎn)生單元執(zhí)行程序的流程圖。
圖22表示圖10的瓦片產(chǎn)生器226接收到來自CSP的中斷指令以執(zhí)行程序的流程圖。
圖23表示圖10的Z單元位階一區(qū)塊在接收來自瓦片產(chǎn)生單元226的瓦片產(chǎn)生中斷代符的流程圖。
主要元件符號(hào)說明10~計(jì)算系統(tǒng)12~計(jì)算機(jī)16~處理單元18~系統(tǒng)存儲(chǔ)器21~系統(tǒng)總線24~只讀存儲(chǔ)器26~動(dòng)態(tài)存取存儲(chǔ)器27~基本輸入/輸出系統(tǒng)29~操作系統(tǒng)31~應(yīng)用程序33~其他程序模塊35~程序數(shù)據(jù)40~非易失性存儲(chǔ)器接口41、81~硬盤44~操作系統(tǒng)45~應(yīng)用程序46~其他程序模塊47~程序數(shù)據(jù)50~可移動(dòng)存儲(chǔ)器接口51~軟磁盤驅(qū)動(dòng)器52~可移動(dòng)的非易失性磁盤
55~光盤驅(qū)動(dòng)器56~非易失性光盤60~使用者輸入介面61~鼠標(biāo)62~鍵盤70~網(wǎng)絡(luò)介面71~局域網(wǎng)72~調(diào)制解調(diào)器73~廣域網(wǎng)絡(luò)80~遠(yuǎn)端計(jì)算機(jī)82~圖形介面85~遠(yuǎn)端應(yīng)用程序84~圖形處理單元86~顯示存儲(chǔ)器90~顯示接口91~顯示器95~其他外圍接口96~打印機(jī)97~揚(yáng)聲器111~上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)114~直接存儲(chǔ)器存取字偏移指針116~單元狀態(tài)118~圖元標(biāo)識(shí)符120~實(shí)體標(biāo)識(shí)符122~瓦片標(biāo)識(shí)符125~環(huán)緩沖區(qū)127~首部指針129~尾部指針131、135~DMA指令133、137~DMA指針141~跳躍欄
142~空白欄147、148~DMA緩沖區(qū)152~恢復(fù)指令154~上下文存儲(chǔ)地址162~環(huán)緩沖區(qū)164~前端語法分析器166~環(huán)緩沖區(qū)首部指針168~環(huán)緩沖區(qū)尾部指針170~跳躍或恢復(fù)指針172~剩余部分上下文175~前次操作狀態(tài)上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)176、176a、176b、176c、176d~3D流水線178~后端語法分析器181~目前操作狀態(tài)上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)190~指令串流處理器CSP192~DMA區(qū)塊194~狀態(tài)先進(jìn)先出存儲(chǔ)器(128*512)195~3D流水線結(jié)構(gòu)區(qū)塊176的前端部分196~3D流水線結(jié)構(gòu)區(qū)塊176的后端部分197、198、199~程序205~3D流水線結(jié)構(gòu)區(qū)塊176的細(xì)部圖206~瓦片首部指針207、209~數(shù)據(jù)途徑211~CSP先進(jìn)先出存儲(chǔ)器212~執(zhí)行單元池前端模塊214~三角建立單元215~TSU_FIFO存儲(chǔ)器218~屬性建立單元219~ASU/ZLI FIFO存儲(chǔ)器220~ASU FIFO存儲(chǔ)器222~范圍產(chǎn)生單元
223~AFIFO存儲(chǔ)器226~瓦片產(chǎn)生器227~TG FIFO存儲(chǔ)器230~Z單元位階一區(qū)塊231~ZFIFO存儲(chǔ)器232~Z單元位階一區(qū)塊FIFO存儲(chǔ)器234~Z單元位階二區(qū)塊263~奇運(yùn)行表264~偶運(yùn)行表265~存儲(chǔ)器的環(huán)緩沖區(qū)1的數(shù)據(jù)結(jié)構(gòu)266、271~瓦片首部指針268~環(huán)緩沖區(qū)尾部指針290~DMA指令指針291~CSP功能292~DMA緩沖結(jié)構(gòu)293~DMA位移295~多個(gè)實(shí)體296~圖元結(jié)構(gòu)298~三角結(jié)構(gòu)309~實(shí)體標(biāo)識(shí)符311~圖元標(biāo)識(shí)符313~鑲嵌三角素標(biāo)識(shí)符317~瓦片標(biāo)識(shí)符331~接線中斷線347~EUP FIFO存儲(chǔ)器具體實(shí)施方式
本發(fā)明提供一先進(jìn)排序以便虛擬一GPU,因此使不同程序?qū)ふ褿PU可用的時(shí)段來執(zhí)行,并使操作系統(tǒng)可以有限度控制上述排序,當(dāng)數(shù)個(gè)應(yīng)用程序共用一GPU時(shí),操作系統(tǒng)可以被設(shè)定依據(jù)不同的標(biāo)準(zhǔn)來排序各應(yīng)用程序,例如當(dāng)一程序的時(shí)間周期終止時(shí),GPU可在下一時(shí)間周期處理另一程序或甚至再重新執(zhí)行同一程序。
一程序可包括一些上下文內(nèi)容或運(yùn)算。如之前所述,一上下文可以在GPU的所有狀態(tài)上執(zhí)行,上述狀態(tài)包括狀態(tài)寄存器、快速緩沖寄存區(qū)和存儲(chǔ)器的目錄內(nèi)容,所有內(nèi)部先入先出緩沖器、內(nèi)部寄存器等等…,從一上下文切換至另一上下文,也可能是GPU在執(zhí)行不同程序。
當(dāng)一上下文切換時(shí),存儲(chǔ)所有GPU的狀態(tài)可能是不切實(shí)際,因?yàn)榍袚Q所需一至三毫秒,在這段期間內(nèi)并不是所有狀態(tài)都需要。因此GPU可只存儲(chǔ)(wrap up)部分程序,以減少存儲(chǔ)狀態(tài)的量。
GPU可具有多層流水線,因此可以在任何時(shí)間在不同位置取得三角素(triangles)和像素(pixels),另外GPU可經(jīng)由不同層流水線以讀取、修正和/或?qū)懭霐?shù)據(jù)至存儲(chǔ)器中。在一非限定例子中,GPU可具有Z層以讀取、比較和有條件更新數(shù)據(jù)。另外,GPU的寫回單元可以設(shè)計(jì)為圖形元件的目的讀取/修正/寫入元件,因此存儲(chǔ)器可以是被追蹤狀態(tài)的一部份。假如上下文被停止并重新開始,GPU不應(yīng)再一次讀取/修正/寫入同一像素在同一存儲(chǔ)器中,再一次讀取/修正/寫入會(huì)造成不同結(jié)果,因此GPU必須不能追蹤所有在上下文切換之前寫入存儲(chǔ)器的數(shù)據(jù)(猶如存儲(chǔ)狀態(tài)的一部分),以避免上述情況發(fā)生。
圖1表示一計(jì)算裝置,其中上下文切換在一GPU中,圖1和以下敘述將提供一計(jì)算系統(tǒng)和外部連接環(huán)境的概述。然而,無論是手持、可攜式、其他計(jì)算裝置和所有種類計(jì)算機(jī)也都可以使用本發(fā)明所公開的方法。因此本領(lǐng)域技術(shù)人員皆了解,本發(fā)明并不限定只能使用于本發(fā)明所公開的一般計(jì)算機(jī),另外本發(fā)明也可以執(zhí)行在其他應(yīng)用上。例如本發(fā)明所公開可以存儲(chǔ)數(shù)據(jù)、傳送數(shù)據(jù)至另一計(jì)算機(jī)以及接收來自另一計(jì)算機(jī)的數(shù)據(jù)的系統(tǒng)。
本發(fā)明可應(yīng)用于一操作系統(tǒng)執(zhí)行程序,以供裝置或物件的服務(wù)的開發(fā)者使用,本發(fā)明也包括與此討論的相關(guān)應(yīng)用軟件。軟件可以是一般計(jì)算機(jī)可執(zhí)行指令的上下文,例如被一個(gè)或是多個(gè)計(jì)算機(jī)執(zhí)行的程序模塊,上述計(jì)算機(jī)可以是工作站、服務(wù)器或其他裝置。程序模塊可包括計(jì)算機(jī)程序、程序、物件、元件、數(shù)據(jù)結(jié)構(gòu)和類似程序執(zhí)行一特定任務(wù)或特定抽象數(shù)據(jù)類型,此為本領(lǐng)域技術(shù)人員皆了解。程序模塊的功能可結(jié)合或分解成不同的組態(tài)。
其他廣為人知的計(jì)算機(jī)系統(tǒng)、計(jì)算環(huán)境(中央處理機(jī)模式和系統(tǒng)程序)和/或計(jì)算機(jī)裝置,包括個(gè)人計(jì)算機(jī)(Personal Computer,PC)、自動(dòng)柜員機(jī)(Automated Teller Machine,ATM)、服務(wù)計(jì)算機(jī)、手持裝置計(jì)算機(jī)、筆記型計(jì)算機(jī)、多處理器系統(tǒng)、微處理器系統(tǒng)、可程序客制化電子設(shè)備、上網(wǎng)型個(gè)人計(jì)算機(jī)、各種設(shè)備、發(fā)光系統(tǒng),控制環(huán)境裝置、微計(jì)算機(jī)、大型計(jì)算機(jī)以及類似設(shè)備。本發(fā)明可應(yīng)用于通過遠(yuǎn)端處理裝置經(jīng)由通信網(wǎng)絡(luò)/總線或其他數(shù)據(jù)傳輸接口的計(jì)算應(yīng)用以及分配計(jì)算應(yīng)用上,在分散式計(jì)算環(huán)境中,程序模塊可同時(shí)在本地計(jì)算機(jī)和遠(yuǎn)端計(jì)算機(jī)的存儲(chǔ)介面里,此存儲(chǔ)介面包括存儲(chǔ)器裝置,并且客戶端和服務(wù)端可以互換。
圖1的計(jì)算系統(tǒng)10包括一計(jì)算機(jī)12,計(jì)算機(jī)12包括一處理單元16、一系統(tǒng)存儲(chǔ)器18和一系統(tǒng)總線21,系統(tǒng)總線21耦接許多系統(tǒng)裝置,包括耦接系統(tǒng)存儲(chǔ)器18至處理單元16,系統(tǒng)總線21可以是任何類型的總線,如本領(lǐng)域技術(shù)人員熟悉的存儲(chǔ)器總線或存儲(chǔ)器控制器、周邊總線以及本地總線等等的不同總線結(jié)構(gòu)。例如外圍部件連接接口(Peripheral ComponentInterconnect,PCI)、加速圖形端口(Accelerated Graphics Port,AGP)和/或外圍部件連接快速接口PCI Express。
計(jì)算機(jī)12可包括不同的計(jì)算機(jī)可讀取媒體,計(jì)算機(jī)可讀取媒體可以是通過計(jì)算機(jī)12存取的易失性和非易失性存儲(chǔ)器,可移動(dòng)式和不可移動(dòng)式存儲(chǔ)器,計(jì)算機(jī)可讀取媒體可包括計(jì)算機(jī)存儲(chǔ)媒體和通信媒體。計(jì)算機(jī)存儲(chǔ)媒體可包括易失性和非易失性存儲(chǔ)器、可移動(dòng)式和不可移動(dòng)式存儲(chǔ)器,采用任何方法和技術(shù)以存儲(chǔ),例如本領(lǐng)域技術(shù)人員熟悉的計(jì)算機(jī)可讀取媒體、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)。計(jì)算機(jī)存儲(chǔ)媒體包括動(dòng)態(tài)存取存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、電子抹除式可編程只讀存儲(chǔ)器EEPROM、閃速存儲(chǔ)器Flash或其他存儲(chǔ)器、只讀光盤CDROM、數(shù)字音像光盤DVD或其他光學(xué)存儲(chǔ)盤、卡式磁帶、磁帶、磁盤或其他磁性存儲(chǔ)裝置、或其他媒體,以用來存儲(chǔ)數(shù)據(jù)并提供給計(jì)算機(jī)12存取使用。
系統(tǒng)存儲(chǔ)器18可包括計(jì)算機(jī)存儲(chǔ)媒體,計(jì)算機(jī)存儲(chǔ)媒體可以是易失/非易失存儲(chǔ)器,例如只讀存儲(chǔ)器(Read Only Memory,ROM)24和動(dòng)態(tài)存取存儲(chǔ)器(Random Access Memory,RAM)26。一基本輸入/輸出系統(tǒng)(BasicInput/Output System,BIOS)27包含基本程序可以傳送存儲(chǔ)在只讀存儲(chǔ)器24的數(shù)據(jù)在計(jì)算機(jī)系統(tǒng)12的各元件間,例如在計(jì)算機(jī)啟動(dòng)時(shí),動(dòng)態(tài)存取存儲(chǔ)器26則存儲(chǔ)可以被處理單元16存取和處理的數(shù)據(jù)和/或程序模塊。操作系統(tǒng)29、應(yīng)用程序31、其他程序模塊33和程序數(shù)據(jù)35也可從動(dòng)態(tài)存取存儲(chǔ)器26中取得。
計(jì)算機(jī)12也可包括其他可移動(dòng)/不可移動(dòng)的易失和非易失計(jì)算機(jī)存儲(chǔ)媒介,一硬盤41可讀取或?qū)懭氩豢梢苿?dòng)非易失性磁性存儲(chǔ)媒體,一軟磁盤驅(qū)動(dòng)器51可讀取或?qū)懭肟梢苿?dòng)的非易失性磁盤52,一光盤驅(qū)動(dòng)器55可讀取或?qū)懭肟梢苿?dòng)的非易失性光盤56,例如CDROM或其他光學(xué)媒體,另外可以用在系統(tǒng)10的可移動(dòng)/不可移動(dòng)的易失和非易失計(jì)算機(jī)存儲(chǔ)媒體包括磁帶、閃速存儲(chǔ)器、數(shù)字音像光盤、數(shù)字音像帶、固態(tài)動(dòng)態(tài)存取存儲(chǔ)器、固態(tài)只讀存儲(chǔ)器以及其他媒體,但不限制以上所列的存儲(chǔ)媒體。
硬盤41一般經(jīng)由非易失性存儲(chǔ)器接口40連接至系統(tǒng)總線21,同樣,軟磁盤驅(qū)動(dòng)器51和光盤驅(qū)動(dòng)器55也通過可移動(dòng)存儲(chǔ)器接口50連接至系統(tǒng)總線21,圖1所顯示和以上所述存儲(chǔ)媒體和裝置可存儲(chǔ)計(jì)算機(jī)可讀取媒體、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)。硬盤41存儲(chǔ)操作系統(tǒng)44、應(yīng)用程序45、其他程序模塊46和程序數(shù)據(jù)47。上述元件有可能相同或來自于不同的操作系統(tǒng)29、應(yīng)用程序31、其他程序模塊33和/或程序數(shù)據(jù)35。圖1也本領(lǐng)域技術(shù)人員所熟知的顯示廣域網(wǎng)絡(luò)(wide area network,WAN)73元件(有可能包括其他網(wǎng)絡(luò)/總線)。
在圖1中,遠(yuǎn)端計(jì)算機(jī)80可通過局域網(wǎng)(local area network,LAN)71和網(wǎng)絡(luò)介面70耦接計(jì)算機(jī)12,同樣也可通過調(diào)制解調(diào)器72,經(jīng)由使用者輸入介面60,和WAN耦接遠(yuǎn)端計(jì)算機(jī)80。
如之前所述當(dāng)GPU 84在處理另一上下文時(shí),可以切換程序或上下文,在中斷那一刻,GPU 84存儲(chǔ)一中斷上下文并開始另一上下文(此一上下文也有可能是上一次被中斷而存儲(chǔ)的上下文)。
關(guān)于存儲(chǔ)和恢復(fù)狀態(tài)上下文的狀態(tài),圖2表示GPU 84切換上下文的切換程序。在階段101,GPU 84執(zhí)行一目前GPU狀態(tài)上下文,然而在第一步驟(interrupt)1,處理單元16發(fā)初一中斷指令或事件,GPU 84于是開始存儲(chǔ)GPU狀態(tài)上下文,如階段103所示,(關(guān)于如何實(shí)行中斷指令和事件,之后會(huì)詳細(xì)解釋),之后GPU狀態(tài)上下文存儲(chǔ)(save)2,如步驟2,當(dāng)GPU 84切換GPU狀態(tài)上下文時(shí),如階段105,GPU 84執(zhí)行第3步驟(new context)載入一新GPU狀態(tài)上下文,如階段107,之后GPU 84執(zhí)行第4步驟回至階段101,以執(zhí)行新的GPU狀態(tài)上下文。
當(dāng)GPU 84完成新載入的GPU狀態(tài)上下文后,執(zhí)行第5步驟(END OFCONTEXT),GPU 84跳回階段105,切換GPU狀態(tài)上下文至上一個(gè)上下文,如第6步驟(PREVIOUSLY EXECUTED CONTEXT),于是GPU 84跳到階段109并恢復(fù)之前在步驟2所存儲(chǔ)的GPU狀態(tài)上下文,因此GPU 84回到階段101(步驟7)執(zhí)行所恢復(fù)的GPU狀態(tài)上下文。
根據(jù)圖2,配置GPU 84依序執(zhí)行多個(gè)屬于同一上下文(或稱為環(huán)緩沖區(qū)Ring Buffer)的GPU程序(指令),其中環(huán)緩沖區(qū)包括處理器功能和命令直接存儲(chǔ)器存取緩沖區(qū)指針(Command DMA buffer pointer)在存儲(chǔ)器中。如之前所述,當(dāng)GPU 84接收到中斷命令時(shí),切換一上下文至另一上下文,并在環(huán)緩沖區(qū)的末端(分別如步驟1至步驟5),當(dāng)中斷命令下達(dá)時(shí),GPU 84存儲(chǔ)狀態(tài)上下文,并在存儲(chǔ)完后立刻繼續(xù)執(zhí)行下一上下文。
圖3表示用于圖2的一上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111,這些在上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111的結(jié)構(gòu)單元狀態(tài)可定義在中斷時(shí)的單元狀態(tài)。上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111包括數(shù)種欄,包括一直接存儲(chǔ)器存取字偏移指針(DMA word offsetpointer)114、原始標(biāo)識(shí)符(Primitive ID)118、實(shí)體標(biāo)識(shí)符(Instance ID)120和一中斷DRAW命令的瓦片標(biāo)識(shí)符122。上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111也可包括指令串流處理器(Command of a stream processor,CSP)、執(zhí)行單元EU(Execution Unit)、瓦片陰影單元(Tile Shader Unit,TSU)和其他處理程序單元狀態(tài)于116中,當(dāng)中斷時(shí),這些存儲(chǔ)在上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111的結(jié)構(gòu)單元狀態(tài)可定義單元的狀態(tài)。假如GPU 84將一些信息保存為準(zhǔn)備存儲(chǔ)的格式(ready-to-Save form)并稍后在重新啟動(dòng)上下文之前恢復(fù)所有狀態(tài),GPU 84可視為可完全中斷。
以下為在上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111的單元表typedef struct context_save_area{DMA_DW_OffsetCSP_Registers CSP[551];Command Stream Processor RegistersC2D_Registers C2D[13];Block1 registersMXU_Registers MXU[19]:Block2 registersTSU_Registers TSU[163]:Block3 registers……………………………………SG_TG_Registers SG_TG[3];
ZL1_Registers ZL1[17];
ZL2_registers ZL1[21];
Primitive_ID Primitive_ID;
Instance_ID Instance_ID;
Tile_ID Tile_ID;
}context_save_area圖4表示第一次存儲(chǔ)/回存(和圖2上下文切換程序有關(guān))前的環(huán)緩沖區(qū)125的初始結(jié)構(gòu),一環(huán)緩沖區(qū),例如環(huán)緩沖區(qū)125可包括一串指令和關(guān)于上下文執(zhí)行的存儲(chǔ)器指針,環(huán)緩沖區(qū)125包含一首部指針(headpointer)127和一尾部指針(tail pointer)129,首部指針127包含有關(guān)處理指令的邏輯位置和環(huán)緩沖區(qū)125的指針,尾部指針129存儲(chǔ)數(shù)據(jù)是有關(guān)環(huán)緩沖區(qū)125的邏輯尾部端位置,當(dāng)更多指令加入上下文時(shí),尾部指針129在上下文執(zhí)行(圖2的階段101)時(shí)會(huì)更新。
環(huán)緩沖區(qū)125也包含DMA存儲(chǔ)器指令131和DMA指針133(指向DMA緩沖區(qū)147,DMA緩沖區(qū)147包含指令和數(shù)據(jù)是有關(guān)于環(huán)緩沖區(qū)125的上下文)。另外環(huán)緩沖區(qū)125可包含DMA指令,例如DMA指令135,和DMA指針,例如指針137,指針137指向DMA緩沖區(qū)148,DMA緩沖區(qū)148包含指令和數(shù)據(jù),圖4的環(huán)緩沖區(qū)125也包括跳躍欄(skip 1 DWORD)141和空白欄142的兩位置保留欄,在一存儲(chǔ)/恢復(fù)之后(稍后討論),跳躍欄141和空白欄142分別存儲(chǔ)上下文存儲(chǔ)指令和指針地址。
當(dāng)GPU 84開始執(zhí)行環(huán)緩沖區(qū)125時(shí),GPU 84接收首部指針127和尾部指針129,并且檢查一存儲(chǔ)上下文。跳躍欄(位置保留欄)141可使GPU 84跳過或是忽略空白欄142而跳到下一DMA指令欄131,此時(shí),環(huán)緩沖區(qū)125不會(huì)被中斷,GPU 84另外繼續(xù)執(zhí)行圖4中環(huán)緩沖區(qū)125的指令以及執(zhí)行DMA緩沖區(qū)147和148的內(nèi)容(例如圖形指令draw command、圖元primitives、實(shí)體instances和瓦片tiles)。
圖5為當(dāng)存儲(chǔ)/恢復(fù)上下文之后(如圖2所示)的環(huán)緩沖區(qū)150,圖4環(huán)緩沖區(qū)125的位置保留欄141和142被恢復(fù)指令(restore command)152和上下文存儲(chǔ)地址(context save address)154所取代,上下文存儲(chǔ)地址154指向狀態(tài)上下文存儲(chǔ)緩沖區(qū)111,如圖3所示。
當(dāng)圖5GPU 84處理環(huán)緩沖區(qū)150時(shí),識(shí)別完恢復(fù)指令152,GPU 84通過上下文存儲(chǔ)地址154即得知應(yīng)提取狀態(tài)上下文存儲(chǔ)緩沖區(qū)111的數(shù)據(jù),從狀態(tài)上下文存儲(chǔ)緩沖區(qū)111取得的數(shù)據(jù)也可提供DMA緩沖區(qū)147的DMA移位146數(shù)據(jù),因此可以在正確中斷點(diǎn)開始處理。
圖6表示環(huán)緩沖區(qū)結(jié)構(gòu)162被GPU 84執(zhí)行的示意圖160,稍后會(huì)詳加敘述,環(huán)緩沖區(qū)162(可能類似圖4的環(huán)緩沖區(qū)125或圖5的環(huán)緩沖區(qū)150),包括一環(huán)緩沖區(qū)首部指針(ring buffer head)166和環(huán)緩沖區(qū)尾部指針(ringbuffer tail)168,一跳躍或恢復(fù)指針(skip or restore)170可在環(huán)緩沖區(qū)尾部指針168之后(類似圖4的跳躍欄141和圖5的識(shí)別完恢復(fù)指令152),一剩余部分上下文(rest of context in ring buffer)172也在環(huán)緩沖區(qū)162里,剩余部分上下文172也包括一個(gè)或多個(gè)DMA指令和指針,如之前所述。
GPU 84也包括一指令串流處理器(Command Stream Processor,CSP)190,如圖7所示。CSP 190也包括和3D流水線(3D pipeline)176連接的一前端語法分析器(Front-end parser)164和一后端語法分析器(Back-endparser)178。
當(dāng)接收到環(huán)緩沖區(qū)首部指針166和環(huán)緩沖區(qū)尾部指針168時(shí),前端語法分析器164開始分析環(huán)緩沖區(qū)162,之后,前端語法分析器164根據(jù)指令指針170是否為一跳躍或恢復(fù)指令來檢查一存儲(chǔ)上下文,假如指令170是一跳躍指令,這表示環(huán)緩沖區(qū)162之前不被中斷過,因此CSP 190執(zhí)行剩余部分上下文172(可包括一個(gè)或多個(gè)DMA指令和指針),假如前端語法分析器164辨識(shí)出指令170為一恢復(fù)指令(如圖5的恢復(fù)指令152),即執(zhí)行恢復(fù)指令Restore CMD,而前次操作狀態(tài)上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)(Previous run statecontext save data structure)175被提取(如圖6所示)且恢復(fù)Restorestates至前端語法分析器164中,之后這恢復(fù)上下文被3D流水線176處理并傳送至CSP后端語法分析器178,其操作如同目前操作狀態(tài)上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)(current run state context save data structure)181。
圖7表示GPU 84的部分結(jié)構(gòu)圖,可包括存儲(chǔ)和恢復(fù)狀態(tài)(如圖6所述),GPU 84可包括CSP 190,CSP 190包括一前端語法分析器164和一后端語法分析器178(如之前所述),這些裝置通過3D流水線176來協(xié)調(diào)指令的處理,一DMA區(qū)塊192可存取存儲(chǔ)器86,以提取前端語法分析器的狀態(tài)和指令。CSP190包括一存儲(chǔ)器194(一128*512狀態(tài)先進(jìn)先出存儲(chǔ)器)以提取從后端語法分析器178的狀態(tài)和指令。
圖6的3D流水線176可還包括3D流水線結(jié)構(gòu)區(qū)塊(3D pipeline archblock)176a-176d,如圖7所顯示,3D流水線結(jié)構(gòu)區(qū)塊176可以是瓦片陰影單元、陰影產(chǎn)生器單元和瓦片產(chǎn)生器等等…,本領(lǐng)域技術(shù)人員皆熟悉此技術(shù),如圖10所示。
為了存儲(chǔ)所有狀態(tài),當(dāng)接收到一中斷指令時(shí),各3D流水線結(jié)構(gòu)區(qū)塊176可以傳送本身狀態(tài)指令State commands的復(fù)制本至CSP 190,當(dāng)接收各結(jié)構(gòu)區(qū)塊176的狀態(tài)指令時(shí),CSP 190可寫信息至一存儲(chǔ)器(128*512狀態(tài)先進(jìn)先出存儲(chǔ)器)194,之后存入存儲(chǔ)器86中(如之前所述)。在一非限定的例子中,3D流水線結(jié)構(gòu)區(qū)塊(176b和176d)通過數(shù)據(jù)途徑(207和209)連至CSP 190的后端語法分析器178。盡管以下會(huì)有更細(xì)節(jié)討論,并不是每一個(gè)3D流水線結(jié)構(gòu)區(qū)塊176具有一數(shù)據(jù)途徑至后端語法分析器178,然而數(shù)據(jù)途徑(207和209)可以存儲(chǔ)GPU 84正在處理中的數(shù)據(jù),以致于一上下文可以被中斷和再開始。
數(shù)據(jù)途徑(207和209)介于3D流水線結(jié)構(gòu)區(qū)塊(176b和176d)中,另一種說法,就是各3D流水線結(jié)構(gòu)區(qū)塊并不具有一專用數(shù)據(jù)途徑至后端語法分析器178,因此復(fù)制各3D流水線結(jié)構(gòu)區(qū)塊176的狀態(tài)至一狀態(tài)先進(jìn)先出存儲(chǔ)器194的數(shù)據(jù)途徑可以是專用的或是共用的,因?yàn)闋顟B(tài)改變不常發(fā)生,所以3D流水線結(jié)構(gòu)區(qū)塊176共用數(shù)據(jù)途徑(207和209)可以減少3D流水線結(jié)構(gòu)區(qū)塊176和CSP后端語法分析器178之間的數(shù)據(jù)途徑數(shù),換句話說,減少數(shù)據(jù)途徑,可以供晶片其他模塊和/或結(jié)構(gòu)使用。
圖8表示圖7的3D流水線結(jié)構(gòu)區(qū)塊176的細(xì)部圖205,和中斷一上下文操作以致于保留一瓦片首部指針206、DMA移位293(參見圖15)、實(shí)體標(biāo)識(shí)符309(參見圖15)和圖元標(biāo)識(shí)符311(參見圖15)。一3D流水線結(jié)構(gòu)區(qū)塊176的前端部分195包括三角建立單元214和屬性建立單元218,根據(jù)程序(在新上下文開始之前,丟棄舊上下文數(shù)據(jù))197丟棄一中斷上下文的數(shù)據(jù),因此圖形指令(Draw command)、頂點(diǎn)(Vertices)、狀態(tài)指令(State command)和圖元指令(primitive assembled)等等…被丟棄于到達(dá)瓦片產(chǎn)生器226之前(可參考圖17的步驟334)。
瓦片產(chǎn)生器226可存儲(chǔ)瓦片標(biāo)識(shí)符(tile ID)在中斷那一刻,其他如目前首部指針(current head pointer)206、DMA位移293、實(shí)體標(biāo)識(shí)符(instanceID)309和圖元標(biāo)識(shí)符311也會(huì)被存儲(chǔ),這個(gè)流程位在步驟(準(zhǔn)確GPU中斷以協(xié)調(diào)上下文的存儲(chǔ))198,稍后也會(huì)有更詳細(xì)說明。
在圖8的步驟(舊上下文在新上下文開始之前被輸出)199中,3D流水線結(jié)構(gòu)區(qū)塊176繼續(xù)處理舊上下文數(shù)據(jù),因?yàn)椴糠峙f上下文已經(jīng)由3D流水線結(jié)構(gòu)區(qū)塊176被拿出來處理,因此至少一部份舊上下文在收到中斷程序時(shí)已經(jīng)完成。
圖9表示流程圖200,流程圖200包括圖7和8的存儲(chǔ)狀態(tài)流程和寫入狀態(tài)命令至CSP 190流程,在一般程序中,3D流水線結(jié)構(gòu)區(qū)塊176操作在步驟201,根據(jù)寄存區(qū)ID引導(dǎo)3D流水線結(jié)構(gòu)區(qū)塊176寫入狀態(tài)至寄存器中,在無中斷模式下(NON-INT MODE),各3D流水線結(jié)構(gòu)區(qū)塊176操作從步驟201至步驟203,去檢查下一登錄程序,當(dāng)接收到一區(qū)塊狀態(tài)登錄時(shí),假如無接收到中斷指令,3D流水線結(jié)構(gòu)區(qū)塊176可再執(zhí)行步驟201。
然而,假如CSP 190接收到一指令指示切換至中斷模式,3D流水線結(jié)構(gòu)區(qū)塊176移至步驟204,以便存儲(chǔ)被GPU 84目前執(zhí)行的狀態(tài)上下文(請(qǐng)參考圖2的步驟103),之后3D流水線結(jié)構(gòu)區(qū)塊176跳至步驟203以檢查下一登錄程序并繼續(xù)操作,如之前所述。
當(dāng)事件發(fā)生時(shí),3D流水線結(jié)構(gòu)區(qū)塊176建立一上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111(圖3)通過經(jīng)由數(shù)據(jù)途徑(207和209)傳送狀態(tài)數(shù)據(jù)至CSP 190,區(qū)塊176a和區(qū)塊176c也可分別傳送數(shù)據(jù)至區(qū)塊176b和區(qū)塊176d,并且傳送至區(qū)塊176b和區(qū)塊176d的數(shù)據(jù)可經(jīng)由數(shù)據(jù)途徑(207和209)傳送至后端語法分析器178。
圖10表示3D流水線結(jié)構(gòu)區(qū)塊176(圖7)和更詳細(xì)流水線圖(圖8),圖10為本領(lǐng)域技術(shù)人員熟悉的圖,并且不限定于此一圖形流水線,這些區(qū)塊在不離此發(fā)明概念下重新排列,也可達(dá)成類似結(jié)果,如之前所述,CSP 190可與3D流水線結(jié)構(gòu)區(qū)塊176耦接與溝通,其中包括三角建立單元(Triangle setupunit,TSU)214以接收從指令串流處理器的先進(jìn)先出存儲(chǔ)器(CSP FIFO)211的指令,三角建立單元214通過TSU FIFO存儲(chǔ)器215傳送處理過的數(shù)據(jù)至屬性建立單元(Attribute setup unit,ASU)218,ASU 218傳送處理過的數(shù)據(jù)至ASU/ZL1 FIFO 219、范圍產(chǎn)生單元(Span generator unit,SG)222和屬性先進(jìn)先出存儲(chǔ)器(Attribute FIFO,AFIFO)223。
SG 222傳送處理過的數(shù)據(jù)至瓦片產(chǎn)生單元(Tile generator unit,TG)226。Z單元位階一區(qū)塊(ZL1)230接收來自ASU/ZL1 FIFO存儲(chǔ)器219、AFIFO223和TG FIFO 227的數(shù)據(jù),其中TG 226耦接TG FIFO 227,ZL1 230將接收到的處理數(shù)據(jù)通過ZFIFO 231和ZL1 FIFO 232傳送至Z單元位階二區(qū)塊(ZL2)234。
本領(lǐng)域技術(shù)人員皆熟悉圖10的3D流水線結(jié)構(gòu)區(qū)塊176(之后稱為3D流水線)只是一圖形流水線的一部分,另外,寫回單元、像素包區(qū)塊和其他區(qū)塊可以是3D流水線176中其他部分,為了簡(jiǎn)單起見,所以不在這里贅述。
上述上下文存儲(chǔ)和恢復(fù)狀態(tài)程序可以被圖10的3D流水線176執(zhí)行,圖11表示流程圖240,流程圖240顯示圖10的3D流水線176執(zhí)行存儲(chǔ)和恢復(fù)狀態(tài)程序的流程。
關(guān)于上下文的存儲(chǔ)程序,當(dāng)GPU 84處理一上下文時(shí)可能會(huì)接收到來自CPU(圖1的處理單元)的一中斷指令(如步驟242),關(guān)于步驟244,3D流水線176等待瓦片產(chǎn)生器226或一寫回單元(圖10中并未顯示)的清除指令被執(zhí)行,CSP 190可辨識(shí)瓦片產(chǎn)生器226是否清除,因?yàn)楫?dāng)首部指針改變時(shí),CSP 190每次會(huì)傳送一符記通過流水線,當(dāng)瓦片產(chǎn)生器226接收到符記以及處理符記,并且會(huì)告知CSP 190收到。
當(dāng)CSP 190初始一圖形指令或開始狀態(tài)時(shí),CSP 190更會(huì)傳送DMA DWORDOFFSET至流水線176,瓦片產(chǎn)生器226也傳送DMA DWORD OFFSET至CSP 190,當(dāng)狀態(tài)傳送至瓦片產(chǎn)生器(如圖7所示)和數(shù)據(jù)途徑(207和209)時(shí),瓦片產(chǎn)生器226也會(huì)傳送狀態(tài)回去。
圖11的區(qū)塊247表示,當(dāng)接收到來自CPU 16的中斷指令時(shí)(步驟242),狀態(tài)和指針會(huì)被存儲(chǔ)。當(dāng)瓦片產(chǎn)生器226接收到中斷指令時(shí),瓦片產(chǎn)生器226會(huì)傳送ID(設(shè)所有ID為0)至CSP 190(假如瓦片產(chǎn)生器226在處理狀態(tài)時(shí)遇到中斷),另外,在步驟247時(shí),瓦片產(chǎn)生器226可存儲(chǔ)指針和狀態(tài),包括瓦片首部指針、DMA移位(DMA OFFSET)、實(shí)體標(biāo)識(shí)符(instance ID)、圖元標(biāo)識(shí)符(primitive ID)、瓦片標(biāo)識(shí)符(tile ID)和所有寄存狀態(tài),因此被存儲(chǔ)的上下文可以快速回存,數(shù)據(jù)可包括以及存儲(chǔ)成圖3的上下文存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)111。
之后GPU 84可以切換至另一運(yùn)行表(run list)(步驟249),這些程序可以被切換并可包括一個(gè)或多個(gè)被3D流水線176執(zhí)行的上下文(如圖12所示)。
關(guān)于流水線176的回存一狀態(tài)的流程程序,當(dāng)目前執(zhí)行程序已經(jīng)完成或當(dāng)一指令已接收并執(zhí)行時(shí),GPU 84可切換回之前但只部分執(zhí)行過的程序(如步驟251),之后GPU 84可回存之前所有存儲(chǔ)狀態(tài)(在步驟247中所存儲(chǔ)的狀態(tài))(步驟253),CSP 190(步驟256)略過圖形指令直到移位之前所存儲(chǔ)DMA移位量后遇到的所存儲(chǔ)的圖形指令(稍后有更詳細(xì)的說明),之后瓦片產(chǎn)生器226(步驟258)略過圖形指令直到接收到所有在步驟247存儲(chǔ)的實(shí)體標(biāo)識(shí)符(instance ID)、圖元標(biāo)識(shí)符(Primitive ID)和瓦片標(biāo)識(shí)符(tile ID),之后流水線執(zhí)行任一未完成的程序(步驟260)(稍后有更詳細(xì)的說明)。
關(guān)于一上下文回存程序的開始,CSP 190需要處理所有元件的狀態(tài),包括目前首部指針、DMA移位量、實(shí)體標(biāo)識(shí)符、圖元標(biāo)識(shí)符和瓦片標(biāo)識(shí)符(可能在之前步驟247時(shí)存儲(chǔ)),因此CSP 190從環(huán)緩沖區(qū)取回環(huán)緩沖區(qū)首部指針(ring buffer head pointer,經(jīng)由存儲(chǔ)程序存儲(chǔ),如之前所述),并且處理被首部指針指向的DMA指令,然后略過所有指令直到DMA地址等于直接存儲(chǔ)器存取位移量(DMA OFFSET),使得CSP 190重新開始執(zhí)行之前被中斷地址的指令,可能是在三角形(triangle)中間,但不限定。
CSP 190可在回存狀態(tài)程序時(shí)略過實(shí)體(instance)直到實(shí)體ID(instanceID)符合,也可略過圖元(primitives)直到圖元I D符合,實(shí)體ID和圖元ID皆存儲(chǔ)在狀態(tài)先進(jìn)先出寄存器194,所以CSP 190可以比較被回存至實(shí)體ID的實(shí)體,另一程序區(qū)塊(為GPU84計(jì)算核心一部份)略過三角形直到關(guān)于一特別三角形的圖元ID符合,例如三角形ID可被存儲(chǔ)至分離執(zhí)行區(qū)塊寄存區(qū)(并未顯示),瓦片產(chǎn)生器226在回存程序可略過瓦片(tile)直到瓦片符合瓦片ID(在一存儲(chǔ)程序,存儲(chǔ)步驟247),一旦ID符合,CSP 190切換3D流水線從一略過狀態(tài)至一正常狀態(tài)。
CSP 190產(chǎn)生一個(gè)或多個(gè)符記和3D流水線176溝通,符記包括寄存器地址,并且和一位移量一起代表上一中斷的處理程序點(diǎn),為了彈性改變狀態(tài)上下文存儲(chǔ)結(jié)構(gòu),CSP 190操作的結(jié)構(gòu)包括密集包裹所有區(qū)塊狀態(tài)至存儲(chǔ)器86,因此CSP 190可執(zhí)行一彈性包裹寄存移位(Flexible pack register offset),當(dāng)接收到一中斷上下文(Context)時(shí),寄存器移位會(huì)告訴各3D流水線176一位置點(diǎn)以恢復(fù)或回存操作,通過增加移位量至中斷上下文的寄存地址,中斷上下文地址可以被快速找得。關(guān)于圖10的各3D流水線結(jié)構(gòu)區(qū)塊176,各3D流水線結(jié)構(gòu)區(qū)塊176關(guān)連的區(qū)塊ID和相關(guān)位移量可用于恢復(fù)時(shí)計(jì)算其地址,以這方法,GPU 84可通過狀態(tài)上下文存儲(chǔ)和回存,以執(zhí)行一中斷在應(yīng)用程序中,因此3D流水線結(jié)構(gòu)區(qū)塊176可以同時(shí)使用一個(gè)或多個(gè)應(yīng)用程序分享其功能和運(yùn)作。
關(guān)于圖11上下文存儲(chǔ)程序240,可提供彈性變化于狀態(tài)上下文存儲(chǔ)結(jié)構(gòu)中,因此一程序包括密集包所有區(qū)段狀態(tài)數(shù)據(jù)在存儲(chǔ)器86中,在GPU次設(shè)計(jì)流程中,3D流水線結(jié)構(gòu)區(qū)176的各區(qū)塊可經(jīng)常改變寄存器規(guī)格。在一非限定的例子中,假如系統(tǒng)超過20個(gè)處理區(qū)塊(176a、176b、…176n,n大于20),會(huì)造成花費(fèi)大量時(shí)間在改變寄存器數(shù)據(jù)包硬件。
因此,使用一可調(diào)包寄存器位移量可以解決上述問題,以下表格提供一組寄存器,使?fàn)顟B(tài)數(shù)據(jù)存儲(chǔ)在一上下文存儲(chǔ)結(jié)構(gòu)中,關(guān)于各狀態(tài)數(shù)據(jù)的區(qū)塊,提供各自位移量,包括一位移寄存內(nèi)容和一寄存ID的組合。CSP 190可發(fā)出一組專門針對(duì)流水線176的區(qū)塊的寄存指令,在一非限定的例子中,移位量為128位,以下為一非限定例子的寄存器組的表格移位寄存0區(qū)塊ID 1 區(qū)塊ID 0移位寄存1區(qū)塊ID 3 區(qū)塊ID 2移位寄存2區(qū)塊ID 5 區(qū)塊ID 4移位寄存3區(qū)塊ID 7 區(qū)塊ID 6移位寄存4區(qū)塊ID 9 區(qū)塊ID 8移位寄存5區(qū)塊ID 11區(qū)塊ID 10移位寄存6區(qū)塊ID 13區(qū)塊ID 12移位寄存7區(qū)塊ID 15區(qū)塊ID 14移位寄存8區(qū)塊ID 17區(qū)塊ID 16移位寄存9區(qū)塊ID 19區(qū)塊ID 18移位寄存10 區(qū)塊ID 21區(qū)塊ID 20以下為一長(zhǎng)度寄存器的表格,敘述關(guān)于各區(qū)塊的狀態(tài)數(shù)據(jù)長(zhǎng)度,并對(duì)于各區(qū)塊的運(yùn)算碼雙字(opcode double word)定義數(shù)據(jù)的上限,長(zhǎng)度寄存器可被CSP 190拿來作內(nèi)部測(cè)試,不像上述敘述的移位寄存,長(zhǎng)度寄存器可格式為長(zhǎng)度32位,以下表格(并不限定)為長(zhǎng)度寄存表格長(zhǎng)度寄存0區(qū)塊ID 3 區(qū)塊ID 2 區(qū)塊ID 1 區(qū)塊ID 0長(zhǎng)度寄存1區(qū)塊ID 7 區(qū)塊ID 6 區(qū)塊ID 5 區(qū)塊ID 4長(zhǎng)度寄存2區(qū)塊ID 11區(qū)塊ID 10區(qū)塊ID 9 區(qū)塊ID 8長(zhǎng)度寄存3區(qū)塊ID 15區(qū)塊ID 14區(qū)塊ID 13區(qū)塊ID 12長(zhǎng)度寄存4區(qū)塊ID 19區(qū)塊ID 18區(qū)塊ID 17區(qū)塊ID 16長(zhǎng)度寄存5 空 區(qū)塊ID 20根據(jù)上述信息,CSP 190可決定各區(qū)塊寄存器存儲(chǔ)器的長(zhǎng)度和位移量,也就是關(guān)于存儲(chǔ)器的地址位置(block_id)和寄存器(n),利用基本地址加上移位寄存量(block_id(n))<<4(12位為一寄存區(qū)),利用這方法,狀態(tài)上下文存儲(chǔ)結(jié)構(gòu)可以具有彈性,并可以提供GPU設(shè)計(jì)上的彈性。
圖12表示圖7的CSP 190可執(zhí)行多個(gè)上下文的運(yùn)轉(zhuǎn)流程圖,各上下文具有自己環(huán)緩沖區(qū),例如環(huán)緩沖區(qū)125、150或162。如圖12所示,CSP 190可切換在兩運(yùn)行表(run list)之間,包括奇運(yùn)行表(Run list odd)和偶運(yùn)行表(Run list even)264,本發(fā)明并不限定于此例,各運(yùn)行表包括,(context0)上下文0、(context 1)上下文1、(context 2)上下文2和(context 3)上下文3的四個(gè)分別的上下文,在各運(yùn)行表的上下文0-3指向各環(huán)緩沖區(qū),并被CSP 190執(zhí)行,如之前所述。
在圖12中,環(huán)緩沖區(qū)1可以是偶運(yùn)行表264的上下文1的參考,環(huán)緩沖區(qū)1包括各種GPU指令和/或DMA緩沖指針指向的DMA指令,例如上述環(huán)緩沖區(qū)125、150和162,請(qǐng)同時(shí)參考圖12和圖13,圖13表示CSP 190處理一目前運(yùn)行表和環(huán)緩沖器的流程圖275。
GPU 84可接收運(yùn)行表指令,之后如圖12所示排序地址格從0到3,如同圖13的步驟279,以建立一運(yùn)行表,如圖12所示,CSP 190開始執(zhí)行偶運(yùn)行表或奇運(yùn)行表的上下文0。
在圖13中,CSP 190取得首部和尾部指針并且檢查用以跳躍或存儲(chǔ)指令的一代符(token)(步驟282),假如CSP 190決定下一代符是一回存指令(由步驟285決定),(如圖5的存儲(chǔ)指令152),CSP 190執(zhí)行回存指令并取得所有GPU狀態(tài)信息(步驟288),假設(shè)步驟285決定不執(zhí)行回存指令,CSP 190可取得圖12的環(huán)緩沖區(qū)1,并且執(zhí)行DMA指令(例如圖4的DMA指令)和相關(guān)DMA緩沖區(qū)數(shù)據(jù)(例如圖4的DMA緩沖區(qū))。
在圖12中,CSP 190和3D流水線176可存取DMA指針290,當(dāng)首部指針(head pointer)讀到DMA指針290時(shí),并進(jìn)而存取DMA緩沖區(qū)292,DMA緩沖區(qū)292包括圖元指令0和圖元指令1。當(dāng)首部指針(head pointer)在環(huán)緩沖區(qū)1上從左至右移動(dòng)時(shí),首部指針在DMA指針區(qū)290之前可能會(huì)讀到一跳略或回存指令,當(dāng)回存指令不存在時(shí)會(huì)使CSP 190開始存取DMA緩沖區(qū),并進(jìn)而存取DMA緩沖區(qū)292和處理在緩沖區(qū)相關(guān)數(shù)據(jù)的圖形。
在圖13中,在取得環(huán)緩沖區(qū)數(shù)據(jù)后,CSP 190和3D流水線176開始處理目前環(huán)緩沖區(qū)(步驟289),在圖12中,CSP 190開始處理偶運(yùn)行表的包含緩沖區(qū)0的上下文0,假如上下文是空的(步驟294),切換至下一上下文(步驟297),CSP 190會(huì)切換從上下文0至上下文1,因此環(huán)緩沖區(qū)1會(huì)被載入并且執(zhí)行,在切換至環(huán)緩沖區(qū)1時(shí),會(huì)檢測(cè)是否有來自CPU 16的中斷信號(hào)(步驟299),假如沒有中斷信號(hào),CSP 190會(huì)回到步驟282以執(zhí)行圖12的環(huán)緩沖區(qū)1,然而假如在步驟299檢測(cè)到中斷信號(hào),會(huì)跳到步驟301,處理中斷程序,并且回到步驟282,之后執(zhí)行圖11的上下文存儲(chǔ)程序。
假如在步驟294檢測(cè)上下文不是空的,CSP 190之前端語法分析器164會(huì)之后傳送目前環(huán)緩沖指針、DMA移位和ID以及寄存狀態(tài)至圖10的TSU 214,前端語法分析器164也傳送實(shí)體ID、圖元ID、頂點(diǎn)ID(vertex ID)和索引(indices)至適當(dāng)位置以執(zhí)行,另外,前端語法分析器164可執(zhí)行任何所需初始CSP的指令。
并繼續(xù)執(zhí)行圖12的環(huán)緩沖區(qū)1,進(jìn)入下一步流程(步驟306),其中3D流水線的邏輯區(qū)塊與后端語法分析器178溝通,因此意味已經(jīng)執(zhí)行到環(huán)緩沖區(qū)的后端部分,最后,CSP 190執(zhí)行之前處理程序的所有存儲(chǔ)狀態(tài)的后端部分指令(步驟308)。
關(guān)于圖13的流程取得環(huán)緩沖區(qū)的首部和尾部指針以及處理程序會(huì)一直繼續(xù)直到環(huán)緩沖區(qū)的終結(jié)端或是被中斷才會(huì)停止。圖14表示圖7的CSP 190運(yùn)作的流程圖,當(dāng)CSP 190執(zhí)行一環(huán)緩沖區(qū)結(jié)構(gòu)和尋找一環(huán)緩沖區(qū)的終結(jié)指令。關(guān)于圖14的步驟310,CSP 190處于閑置狀態(tài)并等待一環(huán)緩沖區(qū)數(shù)據(jù)以執(zhí)行。在步驟312,相對(duì)應(yīng)于圖13的步驟282,CSP 190取得環(huán)緩沖區(qū)的首部和尾部指針,例如在圖12中,偶運(yùn)行表264的上下文1的環(huán)緩沖區(qū),和等待首部和尾部指針(步驟313),最后參考首部和尾部指針并作填入動(dòng)作(步驟314)。關(guān)于圖13的步驟285,假如遇到一回存上下文指令,會(huì)跳至圖14的步驟316載入回存數(shù)據(jù)(對(duì)應(yīng)于圖13的步驟288),一旦完成載入回存狀態(tài),會(huì)跳至步驟318取得環(huán)緩沖區(qū)并繼續(xù)運(yùn)作(相對(duì)應(yīng)于圖13的步驟289)。
假如在步驟314并不具有一有效回存指令時(shí),會(huì)判斷頭指針是否等于尾部指針,也就是上下文是否為空的,根據(jù)圖13的步驟294,假如頭指針不等于尾部指針,環(huán)緩沖區(qū)具有待處理的程序,因此從步驟314跳至步驟318,在步驟318,現(xiàn)在指針從初始位置移至尾部指針,并且計(jì)算每一次判斷是否現(xiàn)在指針(可能是頭指針)等于尾部指針,隨著不斷處理程序,頭指針或現(xiàn)在指針會(huì)往尾部指針移動(dòng),最后頭指針等于尾部指針,步驟318可以重復(fù)循環(huán)數(shù)次直到現(xiàn)在指針(CUR_PTR)變成尾部指針(TAIL_PTR)。
當(dāng)現(xiàn)在指針或頭指針等于尾部指針時(shí),跳至步驟322,使CSP 190等待尾部指針更新,如圖12所示,假如額外指令或是指針被加入至環(huán)緩沖區(qū),尾部指針是可以被移動(dòng)地,然而,假如尾部指針不被移動(dòng),程序跳到步驟324,這意味到達(dá)環(huán)緩沖區(qū)的終端,CSP 190返回閑置狀態(tài)310并準(zhǔn)備重復(fù)上述的程序。
圖15表示上述第12-14圖的數(shù)據(jù)結(jié)構(gòu),并可應(yīng)用于圖1的GPU 84以回存之前中斷上下文,運(yùn)行表264(出現(xiàn)于圖12)可執(zhí)行如之前所述,因此一上下文切換可從上下文0至上下文1。
在存儲(chǔ)器的環(huán)緩沖區(qū)1的數(shù)據(jù)結(jié)構(gòu)265可被存取以回存特定上下文1,類似于上述所述,環(huán)緩沖區(qū)1數(shù)據(jù)結(jié)構(gòu)265包括一瓦片首部指針(tile headpointer)266,在處理上下文時(shí),GPU 84會(huì)更新瓦片首部指針266,同樣得,環(huán)緩沖區(qū)1的數(shù)據(jù)結(jié)構(gòu)265也可包括一環(huán)緩沖區(qū)尾部指針(Ring buffer tailpointer)268,此環(huán)緩沖區(qū)尾部指針268也會(huì)被更新(如圖12),假如在圖15中,將指令和指針加入至環(huán)緩沖區(qū)1數(shù)據(jù)結(jié)構(gòu)里,然后環(huán)緩沖區(qū)尾部指針也會(huì)被調(diào)整。
環(huán)緩沖數(shù)據(jù)取得順序可限定CSP功能只能行使DMA指令指針290的執(zhí)行(請(qǐng)參考圖12所示),CSP 190取得在環(huán)緩沖區(qū)1數(shù)據(jù)結(jié)構(gòu)中的瓦片首部指針,(表示于圖15的環(huán)緩沖區(qū)1的數(shù)據(jù)結(jié)構(gòu)),當(dāng)運(yùn)行表264的上下文1在之前被中斷時(shí),CSP 190載入所有跟DMA指令指針290相關(guān)的數(shù)據(jù)至CSP首部指針(CSP HEAD PTR),上述CSP首部指針指向CSP功能291,并輸入至3D流水線176。
DMA指令指針290是由DMA緩沖結(jié)構(gòu)292組成(并不限訂于此),包含圖形指令0至圖形指令5,在回存上下文時(shí),CSP 190也處理DMA移位(DMAOFFSET)293(類似之前圖5所述),因而可回到之前被中斷時(shí)的正確位置點(diǎn),DMA移位293是一邏輯距離,上述邏輯距離在DMA緩沖結(jié)構(gòu)292中,并介于DMA緩沖首部指針和目前指令指針(Current Command POINTER)之間。
在圖15中的例子,CSP 190可得知DMA移位293至圖形指令4的重新開始的位置,圖形指令4可包括多個(gè)實(shí)體(instance),更具體來說,圖形指令4還包括實(shí)體標(biāo)識(shí)符(Instance ID)0-5,并且依序執(zhí)行,在執(zhí)行完實(shí)體5后,會(huì)跳到圖形指令5,圖形指令5和其他圖形指令也都包括多個(gè)實(shí)體。
從運(yùn)行表264重新建立上下文時(shí),CSP 190會(huì)忽略之前執(zhí)行實(shí)體直到上一次中斷的實(shí)體標(biāo)識(shí)符(Instance ID),在本發(fā)明實(shí)施例中(并不限定于此),實(shí)體標(biāo)識(shí)符309指向多個(gè)體295的實(shí)體4,因此CSP 190會(huì)忽略所有實(shí)體0-3直到實(shí)體4,因?yàn)閷?shí)體標(biāo)識(shí)符309符合邏輯位置。
各實(shí)體包含一個(gè)或多個(gè)圖元(primitive),如圖元結(jié)構(gòu)296所示依序排列,在不限制的本發(fā)明實(shí)施例中,圖元0-M組成一實(shí)體(M為整數(shù)),直到圖元標(biāo)識(shí)符(Primitive ID)311符合之前中斷位置點(diǎn)時(shí),DMA緩沖結(jié)構(gòu)292的中斷圖形指令4才會(huì)被CSP 190執(zhí)行(和之前所述一樣),在不限制的本發(fā)明實(shí)施例中,圖元標(biāo)識(shí)符311指向圖元1,這意味著圖元0在之前中斷時(shí)已經(jīng)被處理過,所以CSP 190略過圖元0。
各圖元0-M是由一個(gè)或多個(gè)瓦片(Tile)組成的,可以形成一三角結(jié)構(gòu)298,在不限制的本發(fā)明實(shí)施例中,圖元2可包含瓦片0-8以構(gòu)成三角結(jié)構(gòu)298,瓦片產(chǎn)生器TG 226會(huì)略過瓦片0-3直到瓦片標(biāo)識(shí)符(Tile ID)參考的瓦片4,瓦片4也就是之前中斷位置點(diǎn)。
使用上述方法,圖15的數(shù)據(jù)結(jié)構(gòu)表示至少一方法回存一圖形處理至之前被中斷的位置點(diǎn),通過CSP 190略過圖形指令、實(shí)體、圖元和TG 226所略過的瓦片,直到上次上下文被中斷所存儲(chǔ)的標(biāo)識(shí)符ID,并正確快速地回到上次被中斷的點(diǎn),以避免重復(fù)處理之前處理過的數(shù)據(jù)。
圖16表示當(dāng)回存一上下文時(shí),CSP 190執(zhí)行程序的流程圖252,圖16的流程圖252包括圖11的步驟253、256和258,并也著重在精確上下文回存的程序上。
在圖16的步驟300中,CSP 190從環(huán)緩沖區(qū)取得回存上下文,上述環(huán)緩沖區(qū)可以是第12和圖15的環(huán)緩沖區(qū)265,存取環(huán)緩沖區(qū)265的瓦片首部指針206以便得知正確上下文的從新開始地址或環(huán)緩沖區(qū)265的邏輯位置,在不限制圖15的本發(fā)明實(shí)施例中,瓦片首部指針指向DMA指令指針290。
步驟304,CSP 190處理DMA指令,類似之前所述,利用DMA移位293移動(dòng)至DMA緩沖結(jié)構(gòu)的正確圖形指令(如圖15所示),一旦確定正確圖形指令(如圖15的圖形指令4),CSP 190采取下一步驟307,配對(duì)實(shí)體標(biāo)識(shí)符(InstanceID)和圖元標(biāo)識(shí)符(Primitive ID),配對(duì)后,CSP 190辨識(shí)到之前所中斷的地址,也就是之前中斷的三角形(triangle)位置。
此時(shí)CSP 190可辨識(shí)之前程序被中斷的瓦片ID 317,因此瓦片產(chǎn)生器226(圖10)可完成處理三角素區(qū)(如步驟315顯示),在確認(rèn)辨識(shí)DMA指令、圖形指令、實(shí)體ID、圖元ID和瓦片ID之后,上下文可被完全回存至3D流水線176中,猶如之前沒有被中斷情形。
由于之前中斷而上下文被改變,在一實(shí)體中的部分三角素已經(jīng)被執(zhí)行,三角素標(biāo)識(shí)符(triangle ID)可能被傳送至TSU 214,一圖形圖元的各三角素各具有一獨(dú)一無二的三角素標(biāo)識(shí)符,當(dāng)上下文被中斷時(shí),有可能其中部分三角素或是全部三角素被執(zhí)行,在這個(gè)實(shí)體中,一鑲嵌三角素標(biāo)識(shí)符(Tessellated Triangle ID)313(可能是從別的單元產(chǎn)生出來)可傳送至TSU214以恢復(fù)部分被執(zhí)行的圖元并加以處理(圖16的步驟319),因而正確三角素(triangle)傳送至瓦片產(chǎn)生器226,并可和相關(guān)瓦片標(biāo)識(shí)符(tile ID)作匹配(如之前所述),無論圖元已經(jīng)被鑲鉗與否,之前中斷上下文動(dòng)作可以變成好像之前無中斷的情形。
因此本發(fā)明主要著重在上下文的結(jié)構(gòu)和切換,當(dāng)接收到來自圖1處理單元16的中斷指令時(shí),包括可提供精準(zhǔn)恢復(fù)的數(shù)據(jù)結(jié)構(gòu),然而當(dāng)一上下文被中斷時(shí),GPU 84或者更明確是圖10的3D流水線176,應(yīng)該可在一邏輯點(diǎn)上,終結(jié)中斷程序,因此下一程序(無論是否回存)根據(jù)上述程序,可以被3D流水線176執(zhí)行。
根據(jù)本發(fā)明實(shí)施例,一上下文可以被存儲(chǔ)以及一新上下文在約一或兩百萬周期后開始,因?yàn)楸仨毺峁┳銐蜉喸儠r(shí)間(wrap-up time)給一些程序,以便減少追蹤狀態(tài)和減少當(dāng)一存儲(chǔ)狀態(tài)被重新開始時(shí)的復(fù)雜度,因此,一邏輯位置會(huì)中斷在圖103D流水線176的瓦片產(chǎn)生器226上,然而,另一位置可能不是在瓦片產(chǎn)生器226上而是在ZL1單元230上,也可以應(yīng)用同樣的方法和標(biāo)識(shí)符,并將存儲(chǔ)的瓦片標(biāo)識(shí)符在ZL1單元230上作比較。
然而,根據(jù)不限定的本發(fā)明實(shí)施例,中斷點(diǎn)可以在瓦片產(chǎn)生器226上,任何被瓦片產(chǎn)生器226所接收的瓦片(tile),要到處理單元16告知上下文切換時(shí),才會(huì)可被允許傳送至其他流水線單元(包括ZL1單元230和隨后的單元),以穿過整個(gè)3D流水線176。然而,任一還未到達(dá)瓦片產(chǎn)生器226的三角素(triangle)和瓦片(tile),當(dāng)GPU 84接收到中斷指令時(shí),當(dāng)上下文被回存時(shí),會(huì)丟棄現(xiàn)有程序并重新產(chǎn)生回存的程序。換句話說,當(dāng)上下文被回存時(shí),在3D流水線176單元中,在瓦片產(chǎn)生器226之前元件,會(huì)丟棄所有現(xiàn)有處理程序,并重新產(chǎn)生回存的程序(請(qǐng)參考圖8)。
當(dāng)中斷發(fā)生時(shí)(在瓦片產(chǎn)生器226上),除了非常長(zhǎng)的像素著色器程序(pixel shader program),3D流水線176可以繼續(xù)處理所有在瓦片產(chǎn)生器226之后的瓦片(tile)(因?yàn)槟茉谝换騼砂僦芷趦?nèi)完成)。但如果中斷在圖10的三角建立單元TSU 214,3D流水線176可能不能在一至三百萬毫秒內(nèi)處理完數(shù)據(jù)。假如中斷程序的大小比瓦片(tile)還小,并不會(huì)對(duì)流水線很快處理數(shù)據(jù)造成很大的影響。通過中斷在流水線的瓦片產(chǎn)生器上,一部份處理程序仍然可以繼續(xù),一部份處理程序可能要被廢除,并且被中斷點(diǎn)會(huì)被存儲(chǔ),以供下一次重新開始時(shí)使用,根據(jù)非限定的本發(fā)明實(shí)施例,使得一些數(shù)據(jù)被語法分析以及重復(fù),使得3D流水線176可以正確回存至上次中斷點(diǎn)。
根據(jù)本發(fā)明不限定的實(shí)施例,無論何時(shí)DMA緩沖器(context)切換,CSP190可通過傳送一代符(token)(internal fence)穿過3D流水線176,至瓦片產(chǎn)生器226,并回到CSP 190以得知那里指令分析以重新啟動(dòng)一上下文。根據(jù)本發(fā)明非限定的實(shí)施例,CSP 190知道什么時(shí)候可以安全地忽略一DMA緩沖區(qū)292。本發(fā)明非限定的實(shí)施例也提供紀(jì)錄對(duì)應(yīng)于瓦片產(chǎn)生器226上DMA緩沖區(qū)的位置,并提供新圖形指令,如圖12所示。因此當(dāng)一上下文,例如在圖12偶運(yùn)行表的上下文1,被依序回存,語法分析可從被中斷的圖形指令開始,例如在緩沖區(qū)292的圖形指令0。
圖17表示325流程圖,圖10的CSP 190可到步驟329并中斷一上下文并重新另一上下文在圖10的3D流水線176中,在步驟326中,也和圖2的步驟101相同,一目前上下文被處理到完,如之前所述,例如圖13的步驟294。當(dāng)上下文被處理至步驟326時(shí),會(huì)檢測(cè)是否有中斷事件發(fā)生(步驟327),假如沒有中斷事件發(fā)生,上下文會(huì)繼續(xù)執(zhí)行到完(步驟326)。
假如一中斷事件發(fā)生并且被檢測(cè)到(步驟327),CSP 190進(jìn)入步驟329并電性傳送一中斷信號(hào)至一個(gè)或多個(gè)3D流水線176的處理區(qū)塊。如之前所述,由于清除流水線上半部區(qū)塊的延遲時(shí)間,可能導(dǎo)致不完整的上下文切換時(shí)間,所以流水線的特定上半部區(qū)塊的數(shù)據(jù)可以被忽略,而流水線下半部區(qū)塊則繼續(xù)處理程序。步驟329提供一預(yù)先決定3D流水線176的區(qū)塊數(shù)量以接收來自CSP的一中斷信號(hào)。
另外產(chǎn)生一中斷信號(hào)在步驟329上,CSP 190也會(huì)產(chǎn)生一中斷代符(token)至3D流水線176的先進(jìn)先出存儲(chǔ)器,步驟331,上述代符(token)功能像是一柵欄在一中斷上下文和下一中斷上下文或回存上下文之間,例如圖15的運(yùn)行表264,中斷代符/柵欄會(huì)傳送至3D流水線176的各區(qū)塊,使切換下一上下文的可以順利完成。
如之前所述,目前DMA移位293、實(shí)體標(biāo)識(shí)符309、圖元標(biāo)識(shí)符311和瓦片標(biāo)識(shí)符317可傳送至CSP上下文存儲(chǔ)緩沖區(qū)111(圖3),也可以是圖7的狀態(tài)先進(jìn)先出存儲(chǔ)器194,更具體來說,3D流水線176使用途徑207、209等等…,以傳送信息至CSP 190,如之前所述。
之后,在步驟334中,各3D流水線結(jié)構(gòu)區(qū)塊176,例如一個(gè)或多個(gè)圖10的區(qū)塊,仍讓舊上下文進(jìn)入3D流水線176,直到中斷代符產(chǎn)生(步驟331)并且到達(dá)以及確認(rèn)后,舊上下文才會(huì)被中斷,換句話說,當(dāng)一接收到來自步驟329所產(chǎn)生的中斷信號(hào)后,直到接收到中斷代符(步驟334)才丟棄相關(guān)先進(jìn)先出存儲(chǔ)器的數(shù)據(jù),上述中斷代符通知所有之后指令屬于下一狀態(tài)或回存狀態(tài)(步驟336)。
根據(jù)圖10和圖18-23,并參考3D流水線176的各元件,以下會(huì)詳細(xì)說明圖17的流程圖。從圖10開始,當(dāng)GPU 84接收到來自處理單元16的中斷指令以中斷一已經(jīng)在處理的程序時(shí),CSP 190通過接線中斷線331傳送接線信號(hào)(hardwired signal)至執(zhí)行單元池前端模塊(Execution Unit Pool FrontModule,EUP_FRONT)212,如圖10所示,接線中斷線331也電連接瓦片產(chǎn)生器226,如圖10所示,另外,接線中斷線331也耦接三角建立單元TSU 214和屬性建立單元ASU 218,并對(duì)應(yīng)于圖17的步驟329。
瓦片產(chǎn)生器226可利用一記數(shù)器以得知瓦片的數(shù)量,和流水線寄存器以得知上一次瓦片被丟棄的三角素?cái)?shù)量和圖元數(shù)量,并將信息通過數(shù)據(jù)途徑207傳送回CSP 190,并存儲(chǔ)為一部分的中斷上下文狀態(tài),此信息存儲(chǔ)包括GPU在下一次上下文回存時(shí)的位置信息。
在接線中斷線331上的接線中斷信號(hào)也傳送至三角建立單元TSU 214和屬性建立單元ASU 218,一旦接收到接線中斷信號(hào),各三角建立單元214、屬性建立單元218和瓦片產(chǎn)生器TG 226會(huì)立即丟棄所有在處理的數(shù)據(jù),并進(jìn)一步停止特定上下文,如圖17步驟334所示,CSP 190,另外發(fā)出一中斷信號(hào)在接線中斷線331上,并傳送一中斷終結(jié)代符(INT_END Token)穿過3D流水線176以清除所有數(shù)據(jù)線上的數(shù)據(jù)流,如圖17步驟331所示,上述中斷終結(jié)代符(INT_END Token)從CSP 190先傳送至三角建立單元214、再到屬性建立單元218以及3D流水線176的其他部分。
圖18表示三角建立單元輸入解碼器214接收到一中斷終結(jié)信號(hào)的運(yùn)作流程圖340,CSP 190發(fā)出一中斷終結(jié)代符通過接線中斷線331至執(zhí)行單元池前端模塊EUP_FRONT 212,然而,同時(shí)CSP 190傳送一中斷信號(hào)終結(jié)代符穿過CSP先進(jìn)先出存儲(chǔ)器211,上述CSP先進(jìn)先出存儲(chǔ)器211耦接三角建立單元TSU 214,因此三角建立單元214進(jìn)行步驟342從接線中斷線331接收接線中斷信號(hào)以檢查CSP先進(jìn)先出存儲(chǔ)器211的輸入數(shù)據(jù)類型(Entry Type)。
當(dāng)接收到接線中斷線331上的中斷線號(hào)時(shí)(如圖18的CSP_TSU_INT信號(hào)),三角建立單元214進(jìn)入步驟346,三角建立單元214讀取read、檢查check和丟棄discard EUP FIFO存儲(chǔ)器347的數(shù)據(jù),EUP FIFO存儲(chǔ)器347是將存儲(chǔ)在EUP_FRONT執(zhí)行單元池前端模塊212的數(shù)據(jù)傳送至三角建立單元214,三角建立單元212執(zhí)行一丟棄循環(huán)DISCARD LOOP,如圖18所示丟棄EUPFIFO存儲(chǔ)器347的上下文直到中斷終結(jié)代符到達(dá),上述中斷終結(jié)代符到達(dá)代表所有關(guān)于上下文的數(shù)據(jù)被存儲(chǔ)起來。
當(dāng)中斷終結(jié)代符CSP_TSU_INT END TOKEN到達(dá)EUP_FIFO存儲(chǔ)器347,三角建立單元214去讀取read、檢查check和丟棄discard CSP FIFO存儲(chǔ)器211的內(nèi)容,如同上述EUP_FIFO存儲(chǔ)器347運(yùn)作方式(圖18的步驟348),三角建立單元214執(zhí)行一丟棄循環(huán)以丟棄所有在CSP FIFO存儲(chǔ)器211的數(shù)據(jù)直到代表所有關(guān)于上下文的數(shù)據(jù)被存儲(chǔ)起來的中斷終結(jié)代符到達(dá),總的,本領(lǐng)域技術(shù)人員皆熟悉關(guān)于上下文被中斷的數(shù)據(jù)如何在3D流水線176中被丟棄,三角建立單元214可回到正常運(yùn)作模式(步驟343)以處理下一上下文。
關(guān)于轉(zhuǎn)儲(chǔ)/重置/詢問(dump/reset/query)狀態(tài)機(jī)階段350,圖19表示在3D流水線176中轉(zhuǎn)儲(chǔ)/重置/詢問(dump/reset/query)狀態(tài)機(jī)制(DRQ statemachine)的執(zhí)行,DRQ狀態(tài)機(jī)制開始于正常操作模式352,一旦指令一執(zhí)行,DRQ狀態(tài)機(jī)制進(jìn)入步驟354,步驟354是關(guān)于CSP指令解碼操作,告知DRQ狀態(tài)機(jī)制(例如TSU 214)下一個(gè)作什么,當(dāng)中斷終結(jié)代符被接收,例如三角建立單元214接收到中斷終結(jié)代符INT_END TOKEN(步驟356),即傳送中斷終結(jié)代符至3D流水線176,之后三角建立單元214回到正常操作模式352,視為新上下文。
關(guān)于圖18和三角建立單元214,在中斷終結(jié)代符處理完后,將注意力轉(zhuǎn)移到圖10屬性建立單元218上。如之前所述,屬性建立單元218也接收在接線中斷線331上的中斷線號(hào),并通知屬性建立單元218立刻丟棄所有關(guān)于目前上下文的內(nèi)容。
圖20表示流程圖360,當(dāng)接收到接線中斷線331上的中斷線號(hào),屬性建立單元ASU 218執(zhí)行程序,屬性建立單元218一旦接收到中斷信號(hào),屬性建立單元218讀取(read)、檢查(check)和丟棄(discard)圖10的TSU_FIFO存儲(chǔ)器215的數(shù)據(jù)(步驟364),更具體來說,屬性建立單元218執(zhí)行一丟棄循環(huán)DISCARD LOOP,以丟棄TSU_FIFO存儲(chǔ)器215的內(nèi)容,直到三角建立單元214的中斷終結(jié)代符到達(dá)。如之前所述,當(dāng)屬性建立單元的DRQ狀態(tài)機(jī)制接收到中斷終結(jié)代符INT_ENDTOKEN,執(zhí)行步驟366,其中中斷終結(jié)代符傳送至各ASU_FIFO存儲(chǔ)器220、ASU/ZLI FIFO存儲(chǔ)器219和AFIFO存儲(chǔ)器223,之后屬性建立單元218回到步驟362以檢查在TSU FIFO存儲(chǔ)器215的下一指令類型(可能是和新上下文執(zhí)行有關(guān)),之后回到正常程序368。
如之前所述,屬性建立單元218傳送中斷終結(jié)代符至ASU FIFO存儲(chǔ)器220,最后傳送至范圍產(chǎn)生單元(Span generator unit,SG)222,圖21表示范圍產(chǎn)生單元222執(zhí)行程序的流程圖370,是有關(guān)于處理圖103D流水線176的中斷終結(jié)代符,當(dāng)范圍產(chǎn)生單元222操作在正常模式372時(shí),一旦檢查到輸入類型(步驟374)并且辨識(shí)出來自ASU FIFO存儲(chǔ)器220的指令為中斷終結(jié)代符時(shí),范圍產(chǎn)生單元222進(jìn)入步驟376,在步驟376中,中斷終結(jié)代符傳送至瓦片產(chǎn)生器TG 226,之后導(dǎo)致范圍產(chǎn)生單元222回到步驟374檢查下一指令的類型,下一上下文指令會(huì)在終端終結(jié)代符之后,范圍產(chǎn)生單元222回到正常模式372。
如之前所述,在處理單元16發(fā)出指令之后,瓦片產(chǎn)生器226接收來自CSP 190在接線中斷線331上的接線中斷信號(hào),圖22表示瓦片產(chǎn)生器226接收到來自圖10的CSP 190的中斷指令以執(zhí)行程序的流程圖380,當(dāng)接線中斷信號(hào)通過接線中斷線331傳送至瓦片產(chǎn)生器226時(shí),瓦片產(chǎn)生器226進(jìn)入步驟382以檢查首部類型和檢查關(guān)于來自CSP 190的中斷指令。
一旦檢查出接收到一中斷信號(hào)CSP_TG_INT WIRE SIGNAL,瓦片產(chǎn)生器226進(jìn)入步驟384并立刻傳送一瓦片產(chǎn)生中斷代符TG_INT TOKEN至圖10的Z單元位階一區(qū)塊(ZL1)230,本領(lǐng)域技術(shù)人員皆熟悉傳送至Z單元位階一區(qū)塊230的瓦片產(chǎn)生中斷代符是來自于之前3D流水線176內(nèi)傳送的中斷終結(jié)代符,瓦片產(chǎn)生中斷代符會(huì)導(dǎo)致清除所有耦接瓦片產(chǎn)生器226的FIFO存儲(chǔ)器和寄存存儲(chǔ)器,但也容許存儲(chǔ)相關(guān)上下文在處理瓦片產(chǎn)生中斷代符之前。
在步驟386中,瓦片產(chǎn)生器226執(zhí)行一丟棄循環(huán)DISCARD LOOP以丟棄輸入數(shù)據(jù)并檢查是否有中斷終結(jié)代符,最后執(zhí)行步驟386,中斷終結(jié)代符INT_END TOKEN經(jīng)由圖10的3D流水線176到達(dá)瓦片產(chǎn)生器226,此時(shí)瓦片產(chǎn)生器226進(jìn)入步驟388,運(yùn)作方式和之前所述類似,之后瓦片產(chǎn)生器226檢查下一指令的首部類型并可回到正常模式389(有可能是回存新上下文執(zhí)行)。
在圖10的3D流水線176的下一模塊是Z單元位階一區(qū)塊(ZL1)230。圖23表示Z單元位階一區(qū)塊230的流程圖390,有關(guān)于接收來自瓦片產(chǎn)生單元226的瓦片產(chǎn)生中斷代符。
在步驟392(讀取和解碼),Z單元位階一區(qū)塊ZL1 230讀取來自瓦片產(chǎn)生單元226的數(shù)據(jù)并處理所接收的指令,然而,當(dāng)接收來自瓦片產(chǎn)生器226的指令為一瓦片產(chǎn)生中斷代符TG_INT TOKEN時(shí),Z單元位階一區(qū)塊ZL1 230進(jìn)入步驟394。
在步驟394中,Z單元位階一區(qū)塊ZL1 230切換至ASU/ZL1 FIFO存儲(chǔ)器219,之后執(zhí)行一丟棄循環(huán)DISCARD LOOP,如步驟396所示,在步驟396中,Z單元位階一區(qū)塊230檢查并丟棄所有來自ASU/ZL1 FIFO存儲(chǔ)器219的數(shù)據(jù)直到3D流水線176的中斷終結(jié)代符到達(dá)。當(dāng)接收到中斷終結(jié)代符后,Z單元位階一區(qū)塊ZL1 230進(jìn)入步驟398,切換至AFIFO存儲(chǔ)器223,之后執(zhí)行一丟棄循環(huán)401。
Z單元位階一區(qū)塊230檢查并丟棄所有在AFIFO存儲(chǔ)器230的數(shù)據(jù)直到AFIFO存儲(chǔ)器230的中斷終結(jié)代符到達(dá)(步驟401),在清除兩FIFO存儲(chǔ)器219和223后,Z單元位階一區(qū)塊230切換至TG FIFO存儲(chǔ)器227(步驟403),并執(zhí)行另一丟棄循環(huán)(步驟405),在步驟405中,Z單元位階一區(qū)塊230檢查和丟棄所有來自TG FIFO的數(shù)據(jù)直到中斷終結(jié)代符到達(dá)(和之前所述類似),之后,DRQ狀態(tài)機(jī)制(步驟407)執(zhí)行(和之前所述類似),因此Z單元位階一區(qū)塊230回到步驟392以執(zhí)行中斷終結(jié)代符后的下一指令,之后,Z單元位階一區(qū)塊230在正常模式下執(zhí)行下一上下文(步驟409)。
如之前所述,在Z單元位階一區(qū)塊ZL1 230接收中斷終結(jié)代符后,傳送至ZL1 FIFO存儲(chǔ)器232,并傳送至Z單元位階二區(qū)塊ZL2 234,和之前所述不同,Z單元位階二區(qū)塊234不會(huì)丟棄所有FIFO存儲(chǔ)器數(shù)據(jù),反而會(huì)繼續(xù)處理存儲(chǔ)的上下文(一至兩百萬周期內(nèi)的程序),然而來自Z單元位階二區(qū)塊234的中斷終結(jié)代符代表存儲(chǔ)上下文的終點(diǎn),并且是一新和/或回存上下文的開始。
本領(lǐng)域技術(shù)人員皆了解中斷終結(jié)代符更傳送至3D流水線176的其他部分,如之前所述,中斷終結(jié)代符可傳送至另一個(gè)3D流水線176元件以清除所有相關(guān)數(shù)據(jù)線。
因此,如之前所述,圖形處理器的圖形流水線可改變狀態(tài)或處理程序,以增加處理圖形程序的效率,并且當(dāng)一處理程序必須等待另一數(shù)據(jù)的處理時(shí)間,圖形流水線可以中斷并切換至另一上下文,以避免流水線閑置,因此通過解決圖形流水線運(yùn)作的瓶頸,圖形流水線可以更有效率運(yùn)作,另外本發(fā)明非限定的實(shí)施例可在不同上下文之間快速切換,以避免瓶頸情況的發(fā)生。
本發(fā)明雖以優(yōu)選實(shí)施例公開如上,然其并非用以限定本發(fā)明,任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,可進(jìn)行更動(dòng)與修改,因此本發(fā)明的保護(hù)范圍以所提出的權(quán)利要求所限定的范圍為準(zhǔn)。
權(quán)利要求
1.一種存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,包括當(dāng)一第一狀態(tài)上下文被所述圖形處理單元執(zhí)行時(shí),接收一中斷指令和事件的一者;存儲(chǔ)對(duì)應(yīng)于接收到的所述中斷指令的所述第一狀態(tài)上下文在包括所述第一狀態(tài)上下文的一精確處理位置的一存儲(chǔ)器中,以及;從一預(yù)先決定邏輯位置載入一第二狀態(tài)上下文以提供所述圖形處理單元處理,其中所述圖形處理單元執(zhí)行一個(gè)或多個(gè)與所述第二狀態(tài)上下文有關(guān)的命令。
2.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括到達(dá)所述第二狀態(tài)上下文的一終端位置,所述終端位置對(duì)應(yīng)于所述第二狀態(tài)上下文在所述圖形處理單元的一處理結(jié)果切換至所述第一狀態(tài)上下文以供所述圖形處理單元處理,所述第一狀態(tài)上下文是從存儲(chǔ)器中提取出來并回存至所述精確處理位置,所述精確處理位置是根據(jù)接收到所述中斷指令或事件;以及由一精確處理點(diǎn)到所述第一狀態(tài)上下文的一終點(diǎn)來處理所述第一狀態(tài)上下文的一剩余部分。
3.如權(quán)利要求2所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括插入一回存指令在一數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)被所述圖形處理單元執(zhí)行,使所述圖形處理單元去存取一狀態(tài)上下文存儲(chǔ)緩沖區(qū),所述狀態(tài)上下文存儲(chǔ)緩沖區(qū)具有關(guān)于所述第一狀態(tài)上下文的信息,其中所述圖形處理單元具有回存執(zhí)行命令的能力,所述回存位置是在所述第一狀態(tài)上下文接收到的所述中斷指令時(shí)的一點(diǎn)。
4.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括建立具有一移位值的一上下文存儲(chǔ)緩沖區(qū),所述移位值是根據(jù)處理所述第一狀態(tài)上下文時(shí),在所述圖形處理單元的一處理流水線的各結(jié)構(gòu)單元中接收到所述中斷指令時(shí)的一邏輯位置。
5.如權(quán)利要求4所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括根據(jù)接收所述中斷指令時(shí)的一處理狀態(tài),建立一圖元標(biāo)識(shí)符、一瓦片標(biāo)識(shí)符和一實(shí)體標(biāo)識(shí)符在所述上下文存儲(chǔ)緩沖區(qū)內(nèi)。
6.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括在接收所述中斷指令之前,處理所述第一狀態(tài)上下文,所述狀態(tài)上下文的一數(shù)據(jù)結(jié)構(gòu)包括一首部和尾部指針和一保留位,所述保留位包括在一中斷指令前的一跳躍指令以及包括在所述中斷指令后的一回存指令。
7.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括傳送有關(guān)于所述第一上下文狀態(tài)的狀態(tài)寄存數(shù)據(jù)從圖形處理單元的各處理單元至圖形處理單元的一處理器,以致于所述狀態(tài)寄存數(shù)據(jù)存儲(chǔ)在所述存儲(chǔ)器中以提供之后取回,其中至少一處理單元傳送所述狀態(tài)寄存數(shù)據(jù)至另一具有一通信途徑至所述處理器的處理單元。
8.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,其中所述圖形處理器接收來自一處理器的所述中斷指令。
9.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,其中所述中斷事件是被所述圖形產(chǎn)生單元的一電路所產(chǎn)生的。
10.如權(quán)利要求1所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,還包括建立具有一獨(dú)立位移值的一第一寄存區(qū),以提供在圖形處理器的各處理區(qū)塊使用,所述獨(dú)立位移值是由一位移寄存上下文和一寄存標(biāo)識(shí)符所組成的,以及;建立一第二寄存區(qū),所述第二寄存區(qū)具有對(duì)應(yīng)于各處理區(qū)塊狀態(tài)數(shù)據(jù)的一長(zhǎng)度以及各處理區(qū)塊的一數(shù)據(jù)上限的數(shù)據(jù)。
11.如權(quán)利要求10所述的存儲(chǔ)和回存一狀態(tài)上下文在一圖形處理單元的方法,其中所述獨(dú)立移位值是128位,所述數(shù)據(jù)上限對(duì)于各處理區(qū)塊是一運(yùn)算碼雙字(opcode double word)。
12.一種可中斷圖形處理單元,當(dāng)接收到一中斷指令時(shí),存儲(chǔ)一第一上下文,并依序執(zhí)行一第二上下文,以及回存所述第一上下文以供執(zhí)行,包括一指令處理器,用以傳送關(guān)于各上下文的信息至多個(gè)結(jié)構(gòu)處理單元,所述指令處理器具有一第一語法分析器以處理關(guān)于所述各上下文的一環(huán)緩沖區(qū)的指令,以及;多個(gè)數(shù)據(jù)線,耦接于少于結(jié)構(gòu)處理單元的總數(shù)量的多個(gè)結(jié)構(gòu)處理單元和所述指令處理器的一第二語法分析器之間,當(dāng)一中斷指令被所述指令處理器接收時(shí),其中關(guān)于所述第一上下文的寄存數(shù)據(jù)通過多個(gè)數(shù)據(jù)途徑傳送至所述第二語法分析器,并且存儲(chǔ)至一存儲(chǔ)器中。
13.如權(quán)利要求12所述的可中斷圖形處理單元,還包括一先進(jìn)先出存儲(chǔ)器,設(shè)置在所述指令處理器中,用以接收所述第二語法分析器所接收的所述寄存數(shù)據(jù),其中所述寄存數(shù)據(jù)之后被存儲(chǔ)在耦接于所述圖形處理單元的一存儲(chǔ)器中。
14.如權(quán)利要求12所述的可中斷圖形處理單元,其中來自一第一結(jié)構(gòu)處理單元的所述寄存數(shù)據(jù)被傳送至一個(gè)或多個(gè)額外結(jié)構(gòu)處理單元,直到至少一所述結(jié)構(gòu)處理單元具有耦接至所述第二語法分析器的一數(shù)據(jù)途徑線。
15.如權(quán)利要求12所述的可中斷圖形處理單元,其中所述第一語法分析器檢測(cè)一跳躍指令是否存在于一特定上下文有關(guān)的一數(shù)據(jù)結(jié)構(gòu)中,以致于所述第一語法分析器移動(dòng)至關(guān)于在所述結(jié)構(gòu)處理單元的處理數(shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)器存取指令和指針。
16.如權(quán)利要求12所述的可中斷圖形處理單元,其中所述第一語法分析器在接收所述中斷指令之后,檢測(cè)一回存指令是否在與所述第一上下文有關(guān)的一數(shù)據(jù)結(jié)構(gòu)中,以致于當(dāng)接收到所述中斷上下文時(shí),所述第一語法分析器存取所述存儲(chǔ)器,以提取一個(gè)或多個(gè)對(duì)應(yīng)于所述第一上下文的一處理位置的存儲(chǔ)寄存狀態(tài),其中所述第一語法分析器傳送所述存儲(chǔ)寄存狀態(tài)至所述結(jié)構(gòu)處理程序單元以供所述第一上下文回存。
17.如權(quán)利要求12所述的可中斷圖形處理單元,其中傳送所述數(shù)據(jù)途徑線的信息至所述第二語法分析,是根據(jù)所述第一上下文的一瓦片首部指針器,一中斷圖形指令有關(guān)的一圖形指令標(biāo)識(shí)符、用以定義在中斷圖形指令的一中斷位置的一實(shí)體標(biāo)識(shí)符、用以定義一中斷圖元的一圖元標(biāo)識(shí)符、以及用以定義一中斷瓦片的一瓦片標(biāo)識(shí)符。
18.如權(quán)利要求12所述的可中斷圖形處理單元,其中所述第一語法分析器是一前端語法分析器,所述第二語法分析器是一后端語法分析器。
19.一種可中斷圖形處理單元,用以執(zhí)行多個(gè)執(zhí)行程序,包括一串流處理器,具有一第一語法分析器和第二語法分析器,以及;多個(gè)處理區(qū)塊,連續(xù)耦接在一起,一第一處理區(qū)塊接收來自所述第一語法分析器的指令和狀態(tài)數(shù)據(jù),所述第二語法分析器耦接少于所有所述處理區(qū)塊的總數(shù)量的處理區(qū)塊,其中所述第一語法分析器辨認(rèn)在一數(shù)據(jù)結(jié)構(gòu)串中的一回存指令,以致于關(guān)于一存儲(chǔ)上下文的狀態(tài)數(shù)據(jù)從存儲(chǔ)器中被提取,并通過所述第一語法分析器傳送至一個(gè)或多個(gè)處理區(qū)塊以執(zhí)行關(guān)于所述存儲(chǔ)上下文的指令和數(shù)據(jù)。
20.如權(quán)利要求19所述的可中斷圖形處理單元,其中所述串流處理器從一上下文回存中提取一首部指針,并處理一參考所述首部指針的指令,以及所述串流處理器跳躍一個(gè)或多個(gè)圖形指令,直到所述串流處理器接收到因?yàn)橹爸袛喽赐瓿傻囊粓D形指令,此時(shí)回存上下文完成。
21.如權(quán)利要求19所述的可中斷圖形處理單元,其中所述串流處理器直到之前中斷存儲(chǔ)上下文的一中斷位置點(diǎn),所述串流處理器丟棄所述存儲(chǔ)上下文的輸入信號(hào),所述中斷位置點(diǎn)與一圖形指令辨識(shí)符、實(shí)體辨識(shí)符、和圖元辨識(shí)符有關(guān),以及直到之前中斷存儲(chǔ)上下文的一瓦片辨識(shí)符中斷位置點(diǎn),一瓦片產(chǎn)生處理區(qū)塊丟棄瓦片。
22.如權(quán)利要求21所述的可中斷圖形處理單元,其中直到所述存儲(chǔ)上下文被完成和所述串流處理器接收一額外中斷指令的一者,完成所述存儲(chǔ)上下文。
23.如權(quán)利要求19所述的可中斷圖形處理單元,其中所述第一語法分析器辨認(rèn)出一數(shù)據(jù)結(jié)構(gòu)串中的一跳躍指令,根據(jù)一個(gè)或多個(gè)存儲(chǔ)器存取指令和包含于所述數(shù)據(jù)結(jié)構(gòu)串流的指針,一被圖形處理單元執(zhí)行的上下文的狀態(tài)數(shù)據(jù)更可被執(zhí)行,所述各指針指向一包含有關(guān)圖形數(shù)據(jù)的緩沖區(qū),所述圖形數(shù)據(jù)會(huì)被所述處理區(qū)塊處理。
24.如權(quán)利要求19所述的可中斷圖形處理單元,其中所述第一語法分析器是一前端語法分析器,所述第二語法分析器是一后端語法分析器。
全文摘要
當(dāng)圖形處理單元GPU處理一上下文時(shí),圖形處理單元接收來自中央處理器CPU的一中斷指令或內(nèi)部中斷事件,GPU存儲(chǔ)第一上下文至存儲(chǔ)器并記錄第一上下文的中斷點(diǎn),之后,圖形處理器從存儲(chǔ)器載入第二上下文至圖形處理器,并執(zhí)行第二上下文,在第二上下文完成后,假如中斷指令指向回存第一上下文,圖形處理器從存儲(chǔ)器中提取第一上下文并回存至之前中斷點(diǎn),之后,圖形處理器處理第一上下文的剩余部分從中斷點(diǎn)到第一上下文的最后部分。
文檔編號(hào)G06T15/00GK1916962SQ200610121550
公開日2007年2月21日 申請(qǐng)日期2006年8月22日 優(yōu)先權(quán)日2005年11月10日
發(fā)明者黃錫霖, 提莫·佩塔西, 約翰·柏拉勒斯 申請(qǐng)人:威盛電子股份有限公司