專利名稱:圖像處理單元的并行引擎的同步方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)圖像的系統(tǒng),特別是涉及圖像處理單元內(nèi)多個(gè)并行引擎的同步方法與系統(tǒng)。
先前技術(shù)圖像處理單元(graphics processing unit,GPU)是計(jì)算機(jī)系統(tǒng)或游戲主機(jī)內(nèi)的專用圖像處理裝置。圖像處理單元內(nèi)部通常具有多個(gè)并行的處理結(jié)構(gòu)或引擎(engines)用以執(zhí)行特定的功能,以改善圖像處理單元的效能。例如,圖像處理單元包含3D引擎來提供實(shí)時(shí)3D的圖形轉(zhuǎn)譯(rendering),另外還包含其它2D引擎和主影像轉(zhuǎn)換(master-image-transfer,MIT)引擎等等。
即使這些引擎可以獨(dú)立運(yùn)作,傳統(tǒng)的計(jì)算機(jī)系統(tǒng)仍缺乏足夠的同步機(jī)制,亦即,在一引擎完成一任務(wù)之后,并沒有一個(gè)機(jī)制可用以通知該事件。為了從一個(gè)引擎切換到另一個(gè)引擎,中央處理單元(CPU)必須插入一等待引擎閑置(wait-engine-idle)命令,其擋住其它引擎的命令,因此阻礙引擎的并行運(yùn)作。
此問題會(huì)變成效能的瓶頸,尤其是在多重圖像處理單元(multi-GPU)和多重緩沖器(multi-buffer)的應(yīng)用上。例如,假設(shè)有一主圖像處理單元(masterGPU)和一個(gè)或多個(gè)從屬圖像處理單元(slave GPU)相互結(jié)合,并且在從圖像處理單元中,當(dāng)一3D引擎完成一幀轉(zhuǎn)譯(frame rendering)之后,其主影像轉(zhuǎn)換(MIT)引擎開始將幀進(jìn)行位阻隔轉(zhuǎn)換(bit-block-transfer,BLT)至一主圖像處理單元的緩沖器。理想上3D引擎應(yīng)能在目前幀轉(zhuǎn)譯后立即進(jìn)行下一幀的轉(zhuǎn)譯,但是在缺乏適當(dāng)?shù)耐綑C(jī)制下,3D引擎在開始下一個(gè)幀轉(zhuǎn)譯之前,必須等待主影像轉(zhuǎn)換(MIT)引擎完成其位阻隔轉(zhuǎn)換(BLT)。此處的“主圖像處理單元(master GPU)”是指直接連結(jié)至一顯示驅(qū)動(dòng)器的圖像處理單元;而“從屬圖像處理單元(slave GPU)”則指未直接連結(jié)至顯示驅(qū)動(dòng)器及必須將轉(zhuǎn)譯影像傳送給主圖像處理單元以進(jìn)行顯示的圖像處理單元。
因此極需一種具有同步裝置的計(jì)算機(jī)系統(tǒng),用以讓圖像處理單元的多個(gè)引擎可以并行運(yùn)作以改善效能。
發(fā)明內(nèi)容鑒于上面所述,本發(fā)明提出一種圖像處理單元(GPU)內(nèi)多個(gè)引擎的同步方法及系統(tǒng),使得各引擎可以并行運(yùn)作。
根據(jù)本發(fā)明的一實(shí)施例,當(dāng)發(fā)送命令至引擎時(shí),中央處理單元(CPU)寫入一代表該命令的事件值至事件存儲器的組件內(nèi)。于執(zhí)行完命令后,引擎修改事件存儲器的內(nèi)容,用以確認(rèn)該命令已執(zhí)行完成。中央處理單元檢視事件存儲器的經(jīng)修改內(nèi)容,以獲得命令的執(zhí)行狀態(tài)。中央處理單元根據(jù)執(zhí)行狀態(tài)以發(fā)送命令至各個(gè)引擎,因而使得各引擎可以并行運(yùn)作。
下面詳細(xì)的實(shí)施例及圖式說明可用以進(jìn)一步了解本發(fā)明的架構(gòu)、方法、目的及優(yōu)點(diǎn)。
圖1的框圖顯示一計(jì)算機(jī)系統(tǒng)的一部份,其配置有事件存儲器用以追蹤事件。
圖2的流程圖說明事件存儲器的更新操作及命令的發(fā)送。
附圖符號說明100計(jì)算機(jī)系統(tǒng)110圖像處理單元(GPU)120三維(3D)轉(zhuǎn)譯引擎130二維(2D)圖像引擎140影像(Video)處理引擎150主影像轉(zhuǎn)換(MIT)引擎160事件存儲器170、172、174、176存儲器組件180中央處理單元(CPU)210-260圖2流程圖的各步驟說明
具體實(shí)施方式一種同步方法及系統(tǒng),用以同步計(jì)算機(jī)系統(tǒng)內(nèi)圖像處理單元(graphicsprocessing unit,GPU)的多個(gè)引擎,使得圖像處理單元的效能提升。有關(guān)于圖像處理單元的詳細(xì)運(yùn)作說明,披露于本申請同一申請人的其它美國申請,其標(biāo)題分別為“METHOD AND SYSTEM FOR DEFERRED COMMANDISSUING IN A COMPUTER SYSTEM”、“TRANSPARENTMULTI-BUFFERING IN MULTI-GPU GRAPHICS SUBSYSTEM”、“EVENTMEMORY ASSISTED SYNCHRONIZATION IN MULTI-GPU GRAPHICSSUBSYSTEM”。
圖1的框圖顯示一計(jì)算機(jī)系統(tǒng)100的一部份,其具有一圖像處理單元(GPU)110。在圖像處理單元110中,有n個(gè)引擎用以執(zhí)行各種工作(task),例如三維(3D)轉(zhuǎn)譯(rendering)引擎120、二維(2D)圖像引擎130、影像(Video)處理引擎140及主影像轉(zhuǎn)換(master-image-transfer,MIT)引擎150。一組事件存儲器160,可從快速周邊零件連接界面(PCI Express)、影像存儲器或其它存儲器空間來配置,用以儲存圖像處理單元引擎事件的狀態(tài)。此事件存儲器160有n個(gè)存儲器170-176,每一個(gè)存儲器給一個(gè)特定的引擎使用。例如,事件存儲器170給3D引擎120使用,事件存儲器172給2D引擎130使用,事件存儲器174給影像引擎140使用,以及事件存儲器176給MIT引擎150使用。每一個(gè)事件存儲器中又包含多個(gè)組件。例如,如圖1所示,有m+1個(gè)組件,一特定的組件提供作為讀取組件(如事件存儲器170中的R1),及剩余的m個(gè)組件作為寫入組件(如事件存儲器170中的W1[0:m-1])。每一次當(dāng)一引擎命令需要被追蹤及發(fā)送命令至引擎時(shí),中央處理單元會(huì)將對應(yīng)至該命令的默認(rèn)值寫入事件存儲器的寫入組件,并讓此引擎復(fù)制此默認(rèn)值到相同事件存儲器的讀取組件。藉由查看讀取組件的內(nèi)容,中央處理單元可以得知命令執(zhí)行是否完成。值得注意的是,若引擎沒有COPY命令,則驅(qū)動(dòng)器需要負(fù)責(zé)讓每一個(gè)引擎做COPY的動(dòng)作。例如,驅(qū)動(dòng)器能讓MIT引擎執(zhí)行MIT命令來進(jìn)行COPY動(dòng)作;或讓2D引擎做一bitBlt命令來進(jìn)行COPY動(dòng)作;或讓3D引擎利用寫入存儲器作為一特征(texture)并使用讀取存儲器作為一轉(zhuǎn)譯(render)目標(biāo),執(zhí)行轉(zhuǎn)譯(render)命令以進(jìn)行COPY動(dòng)作。
圖2的流程圖說明圖1計(jì)算機(jī)系統(tǒng)的命令狀態(tài)如何進(jìn)行記錄和檢查操作。參閱圖1和圖2,中央處理單元180首先指向一事件存儲器,其對應(yīng)至圖像處理單元(GPU)內(nèi)一個(gè)即刻需要追蹤命令(/事件)的引擎(步驟210)。于步驟220,中央處理單元180藉由檢視目前寫入地址中儲存的事件值,以確認(rèn)該事件值所對應(yīng)的命令是否已經(jīng)執(zhí)行。例如,首先檢視W1[0:m-1]的儲存值是否相關(guān)于待追蹤的命令。下面是關(guān)于圖2的一段偽碼(pseudo code),將于下面篇幅作進(jìn)一步說明waiting for event(curEventValu+1-m)WriteElement[curWriteAddress]=curEventValu++curWriteAddress++curWriteAddress%=(m)根據(jù)本發(fā)明的一實(shí)施例,假設(shè)代表特定引擎命令的事件值被遞增地指派,且curEventValu代表目前事件值,而m是事件存儲器中寫入組件的數(shù)量,則event(curEventValu+1-m)即對應(yīng)至先前發(fā)送m個(gè)命令周期的命令。步驟220可以被表示成waiting for event(curEventValu+1-m)已完成。
由于事件存儲器中寫入組件的數(shù)量(m)是有限的,使用步驟220可以避免命令尚未執(zhí)行的事件值被覆寫。反過來說,若寫入組件的數(shù)量m夠大,致使事件值被覆寫的機(jī)率很小以致于可被忽略,則可以跳過步驟220。類似的情形,如果寫入組件的數(shù)量是可被動(dòng)態(tài)地指派以避免非預(yù)期的覆寫危險(xiǎn),則此步驟220也可省略。
于圖2的下一個(gè)步驟230中,將新命令所對應(yīng)的目前事件值(curEventValu)寫至事件存儲器的目前寫入地址(curWriteAddress);接著,于步驟234將事件值curEventValu加一。這些步驟可被表示成*WriteElement[curWriteAddress]=curEventValu++。
于步驟238,中央處理單元180發(fā)出新命令至一引擎,及命令此引擎改變所屬的事件存儲器內(nèi)容。例如,中央處理單元可以在完成步驟240的命令執(zhí)行時(shí),命令此引擎將地址curWriteAddress的寫入組件的值復(fù)制到所屬的讀取組件。在執(zhí)行此命令之后,此特定引擎可自行進(jìn)行復(fù)制動(dòng)作,不需要中央處理單元180的任何介入。另一種作法是,中央處理單元也可命令將指定的事件存儲器的內(nèi)容改變成特定的默認(rèn)值。
于步驟250,將特定引擎的目前寫入地址curWriteAddress的值加一。步驟250可以表示為curWriteAddress++。
于步驟260中,以寫入組件的數(shù)量(m)來除加值后的目前寫入地址,得到其余數(shù)。此步驟的目的在于當(dāng)curWriteAddress的值超過m時(shí),其將重設(shè)至初始值,因?yàn)橹挥衜個(gè)寫入地址。步驟260可被表示成curWriteAddress%=(m)。
中央處理單元可以快速地檢查指定的存儲器空間的讀取組件,藉此,每一次當(dāng)中央處理單元檢視一讀取組件的值時(shí),即可以準(zhǔn)確知道哪一個(gè)引擎已完成命令的執(zhí)行。
如上所示,為了同步圖像處理單元內(nèi)兩個(gè)或更多的引擎,代表發(fā)送至一引擎的命令的事件值被寫入事件存儲器的組件(例如寫入組件)內(nèi)。包含事件值的事件存儲器內(nèi)容可加以修改,用以確認(rèn)引擎內(nèi)的命令已執(zhí)行完畢。此經(jīng)修改的事件存儲器的內(nèi)容則可被中央處理單元讀取,以獲知命令執(zhí)行的狀態(tài),而中央處理單元?jiǎng)t根據(jù)這些執(zhí)行狀態(tài)來協(xié)調(diào)發(fā)送命令至各引擎。
本發(fā)明提供各種不同的實(shí)施例,用以實(shí)行本發(fā)明不同的特征。構(gòu)成要件和方法的特定例子的披露用以闡明本發(fā)明。這些僅作為例示,并非用以限定本發(fā)明的權(quán)利要求
的范圍。
權(quán)利要求
1.一種圖像處理單元內(nèi)多個(gè)引擎的同步方法,包含寫入一事件值至一事件存儲器的組件內(nèi),其中該事件值代表發(fā)送至一預(yù)設(shè)引擎的命令;修改包含該事件值的事件存儲器的內(nèi)容,用以確認(rèn)該命令已被該引擎執(zhí)行完成;以及由一中央處理單元讀取該事件存儲器的經(jīng)修改內(nèi)容,以獲得該命令的執(zhí)行狀態(tài),其中所述的中央處理單元根據(jù)每一引擎的該執(zhí)行狀態(tài),以協(xié)調(diào)發(fā)送命令至所有引擎。
2.如權(quán)利要求
1所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,其中所述的寫入步驟還包含如下之一動(dòng)態(tài)配置該事件存儲器的組件;以及于寫入該事件值之前,先檢查該事件存儲器,以避免將另一尚未完成執(zhí)行的命令所代表的另一事件值覆寫。
3.如權(quán)利要求
1所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,其中所述的修改步驟包含將一已執(zhí)行命令的事件值復(fù)制到一特定組件,用以使該中央處理單元讀取。
4.如權(quán)利要求
1所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,其中所述的修改步驟更包含以一新預(yù)設(shè)事件值來取代該事件值。
5.如權(quán)利要求
4所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,其中所述的修改步驟還包含將該新事件值寫入至一特定組件,用以使中央處理單元讀取。
6.如權(quán)利要求
1所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,還包含如下之一將該命令發(fā)送命令至該預(yù)設(shè)引擎;處理該事件存儲器以避免溢位。
7.一種圖像處理單元內(nèi)多個(gè)引擎的同步方法,包含寫入一事件值至一事件存儲器的至少一寫入組件內(nèi),其中該事件值代表發(fā)送至一預(yù)設(shè)引擎的命令;將該事件存儲器的事件值復(fù)制到一讀取組件,用以確認(rèn)該命令已被該引擎執(zhí)行完成;以及由一中央處理單元讀取該讀取組件的事件值,以獲得該命令的執(zhí)行狀態(tài),其中所述的中央處理單元根據(jù)每一引擎的該執(zhí)行狀態(tài),以協(xié)調(diào)發(fā)送命令至所有引擎。
8.如權(quán)利要求
7所述圖像處理單元內(nèi)多個(gè)引擎的同步方法,其中所述的寫入步驟還包含如下之一動(dòng)態(tài)配置該事件存儲器的寫入組件;于寫入該事件值之前,先檢查該事件存儲器,以避免將另一尚未完成執(zhí)行的命令所代表的另一事件值覆寫;于該命令執(zhí)行完成時(shí),以一新預(yù)設(shè)事件值來取代該事件值;于寫入目前命令的該事件值后,針對下一命令而遞增該事件值;將該命令發(fā)送命令至該預(yù)設(shè)引擎;以及處理該事件存儲器以避免溢位。
9.一種計(jì)算機(jī)系統(tǒng),包含至少一中央處理單元;至少一圖像處理單元,其具有兩個(gè)或更多的引擎;以及至少一事件存儲器,對應(yīng)于每一該引擎,其中所述的中央處理單元寫入一事件值至一事件存儲器內(nèi),其中該事件值代表發(fā)送至一預(yù)設(shè)引擎的命令,且該預(yù)設(shè)引擎修改包含該事件值的事件存儲器的內(nèi)容,用以確認(rèn)該命令已被該引擎執(zhí)行完成,以及其中所述的中央處理單元讀取該事件存儲器的經(jīng)修改內(nèi)容,以獲得該命令的執(zhí)行狀態(tài),且根據(jù)每一引擎的該執(zhí)行狀態(tài),以協(xié)調(diào)發(fā)送命令至所有引擎。
10.如權(quán)利要求
9所述的計(jì)算機(jī)系統(tǒng),其中所述的事件存儲器還包括如下之一一個(gè)或更多的寫入組件用以記錄該事件值;一個(gè)或更多的讀取組件,用以在命令執(zhí)行完成時(shí)以接收一事件值。
專利摘要
一種圖像處理單元(GPU)內(nèi)多個(gè)引擎的同步方法及系統(tǒng)。當(dāng)發(fā)送命令至引擎時(shí),中央處理單元(CPU)寫入一代表該命令的事件值至事件存儲器的組件內(nèi)。于執(zhí)行完命令后,引擎修改事件存儲器的內(nèi)容,用以確認(rèn)該命令已執(zhí)行完成。中央處理單元讀取事件存儲器的經(jīng)修改內(nèi)容,以獲得命令的執(zhí)行狀態(tài)。中央處理單元根據(jù)執(zhí)行狀態(tài)以發(fā)送命令至各個(gè)引擎,因而使得各引擎可以并行運(yùn)作。
文檔編號G06T1/20GK1991904SQ200610135595
公開日2007年7月4日 申請日期2006年10月18日
發(fā)明者張國峰 申請人:威盛電子股份有限公司導(dǎo)出引文BiBTeX, EndNote, RefMan