圖形處理單元中的指令剔除的制作方法
【專(zhuān)利摘要】本發(fā)明的方面是針對(duì)一種用圖形處理單元GPU處理數(shù)據(jù)的方法。根據(jù)一些方面,所述方法包含用所述GPU的著色器處理器執(zhí)行第一工作項(xiàng),其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令。所述方法還包含基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性。所述方法還包含基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng),其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)的所述一個(gè)或一個(gè)以上指令相異的一個(gè)或一個(gè)以上指令。
【專(zhuān)利說(shuō)明】圖形處理單元中的指令剔除
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的方面涉及用圖形處理單元(GPU)處理數(shù)據(jù)。
【背景技術(shù)】
[0002]圖形處理裝置可經(jīng)實(shí)施以進(jìn)行多種圖像處理或其它通用處理應(yīng)用程序。舉例來(lái)說(shuō),有時(shí)稱(chēng)為通用圖形處理單元(GPGPU)的圖形處理單元(GPU)可執(zhí)行受益于高并行度的應(yīng)用(例如色彩校正算法、面部檢測(cè)算法、圖案辨識(shí)算法、擴(kuò)增實(shí)境應(yīng)用)、多種算法應(yīng)用(例如,小波變換、傅立葉變換,及其類(lèi)似者),或多種其它應(yīng)用。
[0003]一股來(lái)說(shuō),GPU經(jīng)設(shè)計(jì)以使用駐留在GPU中的一個(gè)或一個(gè)以上著色器處理器處理可被稱(chēng)為著色器指令的一系列指令。在實(shí)例圖像處理應(yīng)用程序中,著色器指令可界定待由著色器處理器對(duì)構(gòu)成圖像的像素執(zhí)行的一個(gè)或一個(gè)以上數(shù)學(xué)運(yùn)算。通過(guò)將著色器指令應(yīng)用于像素,根據(jù)由所述著色器指令界定的數(shù)學(xué)運(yùn)算而改變或評(píng)估像素值。
[0004]著色器指令可組織成被稱(chēng)為核心(kernel)的程序代碼。核心可界定由GPU執(zhí)行的功能或任務(wù)。為了執(zhí)行核心,將程序代碼劃分成工作項(xiàng)(例如,GPU中的基本工作單元),所述工作項(xiàng)組織成一個(gè)或一個(gè)以上工作組(例如,一組工作項(xiàng))。
【發(fā)明內(nèi)容】
[0005]一股來(lái)說(shuō),本發(fā)明的方面涉及識(shí)別用于由GPU執(zhí)行的無(wú)關(guān)著色器指令,以及防止所述無(wú)關(guān)指令被執(zhí)行。為防止無(wú)關(guān)指令被執(zhí)行,可在所述無(wú)關(guān)指令被執(zhí)行之前從一組指令“剔除”或移除無(wú)關(guān)指令。根據(jù)一些方面,GPU可實(shí)施剔除緩沖器以進(jìn)行指令剔除。舉例來(lái)說(shuō),在執(zhí)行指令之后,GPU可存儲(chǔ)表示后續(xù)指令的一個(gè)或一個(gè)以上特性(例如,相關(guān)性特性)的一個(gè)或一個(gè)以上值。GPU可使用所存儲(chǔ)值來(lái)在執(zhí)行所述后續(xù)指令之前確定是否移除所述指令。
[0006]在一個(gè)實(shí)例中,本發(fā)明的方面是針對(duì)一種用圖形處理單元(GPU)處理數(shù)據(jù)的方法。根據(jù)一些方面,所述方法包含用所述GPU的著色器處理器執(zhí)行第一工作項(xiàng),其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令。所述方法還包含基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性。所述方法還包含基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng),其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)的所述一個(gè)或一個(gè)以上指令相異的一個(gè)或一個(gè)以上指令。
[0007]在另一實(shí)例中,本發(fā)明的方面是針對(duì)一種用于用圖形處理單元(GPU)處理數(shù)據(jù)的設(shè)備。所述設(shè)備包含著色器處理器,所述著色器處理器經(jīng)配置以執(zhí)行包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令的第一工作項(xiàng),且基于第一指令的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性。所述設(shè)備還包含剔除模塊,所述剔除模塊經(jīng)配置以基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行包含與所述第一工作項(xiàng)的所述一個(gè)或一個(gè)以上指令相異的一個(gè)或一個(gè)以上指令的第二工作項(xiàng)。[0008]在另一實(shí)例中,本發(fā)明的方面是針對(duì)一種計(jì)算機(jī)可讀存儲(chǔ)媒體,所述計(jì)算機(jī)可讀存儲(chǔ)媒體編碼有用于致使計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器進(jìn)行以下操作的指令:執(zhí)行第一工作項(xiàng),其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令;以及基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性。所述計(jì)算機(jī)可讀存儲(chǔ)媒體還編碼有用于致使所述計(jì)算裝置的所述一個(gè)或一個(gè)以上可編程處理器進(jìn)行以下操作的指令:基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng),其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)相異的一個(gè)或一個(gè)以上指令。
[0009]在另一實(shí)例中,本發(fā)明的方面是針對(duì)一種用于用圖形處理單元(GPU)處理數(shù)據(jù)的設(shè)備。所述設(shè)備包含用于執(zhí)行第一工作項(xiàng)的裝置,其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令。所述設(shè)備還包含用于基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值的裝置,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性。所述設(shè)備還包含用于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng)的裝置,其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)相異的一個(gè)或一個(gè)以上指令。
[0010]在附圖和下文描述中闡述本發(fā)明的一個(gè)或一個(gè)以上實(shí)例的細(xì)節(jié)。本發(fā)明的其它特征、目標(biāo)和優(yōu)點(diǎn)將從所述描述和圖式以及權(quán)利要求書(shū)而顯而易見(jiàn)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0011]圖1是說(shuō)明可實(shí)施根據(jù)本發(fā)明的方面的用于識(shí)別并剔除無(wú)關(guān)指令的技術(shù)的計(jì)算裝置的框圖。
[0012]圖2是更詳細(xì)地說(shuō)明圖1中所示的GPU的框圖,所述GPU可經(jīng)配置以進(jìn)行根據(jù)本發(fā)明的方面的用于指令剔除的技術(shù)。
[0013]圖3是說(shuō)明根據(jù)本發(fā)明的方面的與工作組相關(guān)聯(lián)的工作項(xiàng)網(wǎng)格的框圖。
[0014]圖4是說(shuō)明根據(jù)本發(fā)明的方面的成三核心布置的工作組網(wǎng)格的框圖。
[0015]圖5A是說(shuō)明根據(jù)本發(fā)明的方面的用于處理圖像的第一核心的框圖。
[0016]圖5B是說(shuō)明根據(jù)本發(fā)明的方面的在用于處理圖5A中所示的圖像的第二核心上的指令剔除的框圖。
[0017]圖5C是說(shuō)明根據(jù)本發(fā)明的方面的在用于處理圖5A中所示的圖像的第三核心上的指令剔除的框圖。
[0018]圖6是說(shuō)明根據(jù)本發(fā)明的方面的剔除指令的方法的流程圖。
[0019]圖7是說(shuō)明根據(jù)本發(fā)明的方面的可經(jīng)實(shí)施以剔除指令的指令流的流程圖。
【具體實(shí)施方式】
[0020]本發(fā)明的方面大體上涉及提高圖形處理單元(“GPU”)(其可實(shí)施為通用圖形處理單元(“GPGPU”))的效率。一股來(lái)說(shuō),GPU包含多個(gè)著色器處理器(“SP”)用于執(zhí)行計(jì)算。所述計(jì)算可結(jié)構(gòu)化于包含一個(gè)或一個(gè)以上著色器程序(在本文中稱(chēng)為“核心”)的GPGPU應(yīng)用中。核心界定可經(jīng)實(shí)施以分析或修改多種輸入數(shù)據(jù)的功能。實(shí)例包含用于并行地處理相對(duì)大數(shù)目的數(shù)據(jù)組的功能。在圖像處理上下文中,功能可包含例如色彩校正算法、面部檢測(cè)算法,或用于進(jìn)行擴(kuò)增實(shí)境應(yīng)用的功能。其它實(shí)例包含變換功能、用于射線(xiàn)跟蹤的功能,或多種其它功能。
[0021]核心由可集群成工作組的個(gè)別工作項(xiàng)(例如,GPU中的基本工作單元)組成。在其中GPU經(jīng)實(shí)施以處理圖像(例如,視頻數(shù)據(jù)的幀、計(jì)算機(jī)產(chǎn)生的圖形圖像、靜態(tài)圖像,及其類(lèi)似者)的實(shí)例中,工作項(xiàng)可包含界定用于分析或修改圖像的像素的功能的一個(gè)或一個(gè)以上指令。此外,多個(gè)工作項(xiàng)可組織成用于分析或修改圖像的像素群組的工作組(例如,一組工作項(xiàng))。
[0022]一些應(yīng)用程序可包含用于對(duì)相同輸入數(shù)據(jù)進(jìn)行多個(gè)功能的多個(gè)核心。另外,具有多個(gè)核心的應(yīng)用程序可包含取決于其它核心的一些核心。舉例來(lái)說(shuō),應(yīng)用程序可包含兩個(gè)核心,其中第二核心取決于第一核心的結(jié)果。因此,在一些實(shí)例中,一核心的結(jié)果可能使后續(xù)核心的結(jié)果“無(wú)關(guān)”。如本文所描述,“無(wú)關(guān)指令”可為不會(huì)使應(yīng)用程序的目的有所進(jìn)展的指令。換句話(huà)說(shuō),“無(wú)關(guān)”指令可為不改變或不影響應(yīng)用程序的結(jié)果的指令。
[0023]在一簡(jiǎn)單實(shí)例中,應(yīng)用程序包含用于識(shí)別數(shù)據(jù)集[X,y, z]中的特征的兩個(gè)核心。第一核心和第二核心各自具有三個(gè)指令,其可分別界定于與[x,y,z]相關(guān)聯(lián)的三個(gè)相異工作項(xiàng)中。如果所述特征通過(guò)執(zhí)行所述三個(gè)指令而得以識(shí)別,則所述指令評(píng)估為“真”,或如果所述特征并未通過(guò)執(zhí)行所述三個(gè)指令而得以識(shí)別,則所述指令評(píng)估為“假”。此外,第二核心取決于第一核心的結(jié)果。舉例來(lái)說(shuō),兩個(gè)核心的指令都必須評(píng)估為“真”以識(shí)別特征,因此第二核心的指令取決于第一核心的指令評(píng)估為“真”。在執(zhí)行第一核心之后,GPU確定所需特征可能包含在“X”和“y”中但不包含在“z”中。由此,與“z”有關(guān)的第二核心的指令與應(yīng)用程序的結(jié)果無(wú)關(guān)。舉例來(lái)說(shuō),與“z”有關(guān)的第二指令并不影響應(yīng)用程序的結(jié)果,因?yàn)榧词古c“z”有關(guān)的第二指令評(píng)估為“真”,所述指令也已經(jīng)使第一核心失效。明確地說(shuō),與第一核心中的“z”有關(guān)的指令并不識(shí)別所需特征。在此實(shí)例應(yīng)用程序中,第二核心包含個(gè)別無(wú)關(guān)指令(例如,工作項(xiàng)),使得所述核心的僅一部分無(wú)關(guān),且所述核心的剩余部分可與結(jié)果有關(guān)。
[0024]在一些情形中,具有一個(gè)以上無(wú)關(guān)指令的核心可描述為是“稀疏的”。舉例來(lái)說(shuō),“稀疏”核心可包含由許多無(wú)關(guān)指令分開(kāi)的相關(guān)指令。通常,GPU將所有指令(例如,核心的工作項(xiàng)和工作組)分配到著色器處理器(SP)用于執(zhí)行,而不管指令的相關(guān)性。舉例來(lái)說(shuō),GPU通常不包含用于識(shí)別無(wú)關(guān)指令的機(jī)制。因此,GPU的SP通常必須執(zhí)行核心的所有工作組和工作項(xiàng),而不管工作組或工作項(xiàng)的相關(guān)性。執(zhí)行稀疏核心可降低GPU性能,因?yàn)镚PU的SP被執(zhí)行無(wú)關(guān)指令占據(jù),從而消耗GPU處理能力。
[0025]本發(fā)明的方面涉及通過(guò)避免執(zhí)行至少一些無(wú)關(guān)指令來(lái)提高GPU的SP的效率和利用率。在一些實(shí)例中,GPU識(shí)別無(wú)關(guān)指令,且防止所述無(wú)關(guān)指令被GPU的SP處理。S卩,GPU可識(shí)別為GPU中的基本工作單元(例如,可執(zhí)行碼)且可包含一個(gè)或一個(gè)以上個(gè)別指令的無(wú)關(guān)工作項(xiàng),且可防止所述無(wú)關(guān)工作項(xiàng)被GPU的SP處理。為防止無(wú)關(guān)工作項(xiàng)被處理,GPU可在所述無(wú)關(guān)工作項(xiàng)被執(zhí)行之前“剔除”或移除所述無(wú)關(guān)工作項(xiàng)。根據(jù)一些方面,GPU可實(shí)施剔除緩沖器以進(jìn)行剔除。舉例來(lái)說(shuō),剔除緩沖器可保持一個(gè)或一個(gè)以上值,GPU可使用所述一個(gè)或一個(gè)以上值來(lái)確定是否在工作項(xiàng)可被執(zhí)行之前移除所述工作項(xiàng)。
[0026]一股來(lái)說(shuō),可互換地使用術(shù)語(yǔ)“工作項(xiàng)”與“指令”。本發(fā)明大體上將指令描述為用于處理輸入數(shù)據(jù)的功能的至少一部分。本發(fā)明大體上將工作項(xiàng)稱(chēng)為用于GPU的基本工作單元(例如,可執(zhí)行碼的基本單元),其可包含一個(gè)或一個(gè)以上個(gè)別指令。因此應(yīng)理解,術(shù)語(yǔ)“工作項(xiàng)”在本源上是指界定用于處理輸入數(shù)據(jù)的功能的一個(gè)或一個(gè)以上指令?!肮ぷ黜?xiàng)”在計(jì)算統(tǒng)一裝置架構(gòu)(由NVIDIA公司開(kāi)發(fā)的“CUDA”,2010年9月17日發(fā)布的版本3.2)中還可稱(chēng)為“線(xiàn)程”。
[0027]GPU可從一組指令剔除無(wú)關(guān)指令,隨后將所述指令組織并分配到SP用于執(zhí)行。在無(wú)關(guān)指令可被分配到SP且由SP處理之前剔除所述無(wú)關(guān)指令可有助于提高GPU的效率,因?yàn)镾P不被執(zhí)行無(wú)關(guān)指令占據(jù)。此外,通過(guò)剔除無(wú)關(guān)指令,GPU不會(huì)使資源專(zhuān)用于組織和分配無(wú)關(guān)指令。確切地說(shuō),GPU能夠?qū)⑾嚓P(guān)指令分配到SP,所述SP能夠持續(xù)執(zhí)行相關(guān)的指令。
[0028]根據(jù)本發(fā)明的方面,GPU可實(shí)施剔除緩沖器以進(jìn)行指令剔除。剔除緩沖器可存儲(chǔ)表示所執(zhí)行指令的特性的一個(gè)或一個(gè)以上值。所述特性可用以確定后續(xù)指令是相關(guān)還是無(wú)關(guān)。舉例來(lái)說(shuō),GPU可執(zhí)行具有兩個(gè)核心的應(yīng)用程序。在執(zhí)行第一核心的同時(shí),GPU可將一個(gè)或一個(gè)以上值存儲(chǔ)到剔除緩沖器,所述一個(gè)或一個(gè)以上值基于與第一核心相關(guān)聯(lián)的指令的結(jié)果而表示第二核心的指令是否相關(guān)。如果第二核心的一個(gè)或一個(gè)以上指令不相關(guān),則GTO可防止無(wú)關(guān)指令被SP執(zhí)行。舉例來(lái)說(shuō),GPU的負(fù)責(zé)組織和分配指令到SP的組件可基于存儲(chǔ)在剔除緩沖器中的值剔除無(wú)關(guān)指令。
[0029]因此,一股來(lái)說(shuō),本發(fā)明的技術(shù)包含使用一個(gè)以上核心執(zhí)行用于處理輸入數(shù)據(jù)的應(yīng)用程序。在執(zhí)行第一核心的工作項(xiàng)和工作組之后,GPU可即刻設(shè)定表示第二核心的工作項(xiàng)和工作組是否相關(guān)的剔除緩沖器值。即,GPU可基于第一核心的結(jié)果設(shè)定剔除緩沖器值,所述剔除緩沖器值表示與第一核心的工作項(xiàng)和工作組中的每一者的相同輸入數(shù)據(jù)相關(guān)聯(lián)的第二核心的相應(yīng)工作項(xiàng)和工作組是否相關(guān)。因此,在執(zhí)行第一核心之后,GPU可利用所述剔除緩沖器值來(lái)剔除第二核心中的無(wú)關(guān)工作項(xiàng)和工作組,使得不執(zhí)行所述無(wú)關(guān)工作項(xiàng)和工作組。
[0030]在一些實(shí)例中,剔除緩沖器可經(jīng)設(shè)計(jì)以存儲(chǔ)表示應(yīng)用程序的每一指令的特性的一個(gè)或一個(gè)以上值。舉例來(lái)說(shuō),在執(zhí)行每一指令之后,GPU可存儲(chǔ)表示每一指令的特性的剔除緩沖器,其指示所述指令是相關(guān)還是無(wú)關(guān)。在另一實(shí)例中,GPU可僅在確定后續(xù)指令無(wú)關(guān)時(shí)才存儲(chǔ)剔除緩沖器值。
[0031]剔除緩沖器可經(jīng)設(shè)計(jì)以存儲(chǔ)表示工作組的特性的一個(gè)或一個(gè)以上值以及表示所述工作組內(nèi)的個(gè)別工作項(xiàng)的特性的一個(gè)或一個(gè)以上值。因此,剔除緩沖器可用以在工作組和工作項(xiàng)等級(jí)兩者上確定指令是否無(wú)關(guān)。如果先前執(zhí)行的核心致使給定工作組的所有工作項(xiàng)無(wú)關(guān),則GPU可剔除整個(gè)工作組,使得無(wú)關(guān)工作組不被SP執(zhí)行?;蛘?,如果先前執(zhí)行的核心致使給定工作組的僅一些工作項(xiàng)無(wú)關(guān),則GPU可剔除個(gè)別工作項(xiàng),使得無(wú)關(guān)工作項(xiàng)不被SP執(zhí)行。
[0032]應(yīng)理解,術(shù)語(yǔ)“工作組”大體是指指令的預(yù)定義群組,例如工作項(xiàng)的預(yù)定義群組?!肮ぷ鹘M”在計(jì)算統(tǒng)一裝置架構(gòu)(由NVIDIA公司開(kāi)發(fā)的“CUDA”,2010年9月17日發(fā)布的版本3.2)中還可稱(chēng)為“線(xiàn)程塊”。
[0033]本發(fā)明的方面包含使用多種不同剔除緩沖器大小和多種不同剔除緩沖器能力。在一個(gè)實(shí)例中,剔除緩沖器可存儲(chǔ)表示核心的每一工作項(xiàng)的單個(gè)特性的單個(gè)二進(jìn)制值(例如,單位存儲(chǔ))。在此種實(shí)例中,GPU可使用剔除緩沖器值來(lái)基于先前執(zhí)行的工作項(xiàng)的結(jié)果識(shí)別工作項(xiàng)是否相關(guān)或無(wú)關(guān)。
[0034]存儲(chǔ)單個(gè)二進(jìn)制值的剔除緩沖器僅為剔除緩沖器配置的一個(gè)實(shí)例。在另一實(shí)例中,剔除緩沖器可每工作項(xiàng)存儲(chǔ)一個(gè)以上值。舉例來(lái)說(shuō),剔除緩沖器可存儲(chǔ)對(duì)應(yīng)于所執(zhí)行工作項(xiàng)的一個(gè)以上特性的一個(gè)以上值。在一非限制性圖像處理實(shí)例中,GPU可對(duì)像素?cái)?shù)據(jù)執(zhí)行工作項(xiàng)以確定像素?cái)?shù)據(jù)的紅綠藍(lán)(RGB)特性。因此,剔除緩沖器可經(jīng)實(shí)施以存儲(chǔ)對(duì)應(yīng)于所執(zhí)行指令的紅、綠和藍(lán)分量的三個(gè)值。在此實(shí)例中,GPU可基于存儲(chǔ)在剔除緩沖器中的值中的任一者來(lái)剔除指令。應(yīng)理解,剔除緩沖器的配置(例如,大小和能力)取決于應(yīng)用程序和GPU。舉例來(lái)說(shuō),一些GPU可經(jīng)設(shè)計(jì)以針對(duì)相對(duì)較大的且多功能的剔除緩沖器提供相對(duì)較大量的存儲(chǔ)器。其它GPU可能不能夠提供此種多功能性。因此,應(yīng)理解,所提供的實(shí)例并非可實(shí)施的剔除緩沖劑的僅有配置。
[0035]GPU可以多種方式將值存儲(chǔ)到剔除緩沖器。在一個(gè)實(shí)例中,在SP執(zhí)行工作項(xiàng)之后,SP可基于所執(zhí)行工作項(xiàng)的結(jié)果將一個(gè)或一個(gè)以上剔除緩沖器值寫(xiě)入到剔除緩沖器。在此實(shí)例中,在執(zhí)行另一核心的新工作項(xiàng)(例如,與相同輸入數(shù)據(jù)相關(guān)聯(lián)的工作項(xiàng))之后,SP可通過(guò)讀取存儲(chǔ)在剔除緩沖器中的一個(gè)或一個(gè)以上剔除緩沖器值且比較所述一個(gè)或一個(gè)以上剔除緩沖器值與通過(guò)執(zhí)行所述新工作項(xiàng)而產(chǎn)生的新值來(lái)更新所述一個(gè)或一個(gè)以上剔除緩沖器值。在此實(shí)例中,可能存在與讀取存儲(chǔ)在剔除緩沖器中的一個(gè)或一個(gè)以上剔除緩沖器值、隨后比較所存儲(chǔ)值與通過(guò)執(zhí)行新工作項(xiàng)而產(chǎn)生的新值相關(guān)聯(lián)的一些時(shí)延。
[0036]在另一實(shí)例中,在SP執(zhí)行工作項(xiàng)之后,SP可將一個(gè)或一個(gè)以上剔除緩沖器值提供到可編程或固定功能硬件,所述可編程或固定功能硬件將一個(gè)或一個(gè)以上剔除緩沖器值寫(xiě)入到剔除緩沖器。舉例來(lái)說(shuō),可編程或固定功能硬件可經(jīng)配置以在執(zhí)行工作項(xiàng)之后即刻從SP接收輸入。可編程或固定功能硬件可接著經(jīng)實(shí)施以解譯所述輸入且將對(duì)應(yīng)于所述輸入的一個(gè)或一個(gè)以上值存儲(chǔ)到剔除緩沖器。在此實(shí)例中,可編程或固定功能硬件可負(fù)責(zé)比較存儲(chǔ)在剔除緩沖器中的一個(gè)或一個(gè)以上值與通過(guò)執(zhí)行新工作項(xiàng)而產(chǎn)生的新值。允許可編程或固定功能硬件執(zhí)行剔除緩沖器更新可導(dǎo)致較低時(shí)延,因?yàn)镾P不需要讀取所存儲(chǔ)的一個(gè)或一個(gè)以上剔除緩沖器值。確切地說(shuō),可編程或固定功能硬件將負(fù)責(zé)讀取一個(gè)或一個(gè)以上剔除緩沖器值。
[0037]根據(jù)一些方面,緩沖器值可由GPU的負(fù)責(zé)排序和分配指令到GPU的SP的組件來(lái)存取和利用。舉例來(lái)說(shuō),排序組件可讀取緩沖器值,且在準(zhǔn)備用于分配到SP的指令的同時(shí)移除指令。因此,排序組件可在將指令分配到SP之前移除指令。在一些實(shí)例中,排序組件可負(fù)責(zé)工作組和工作項(xiàng)兩者的設(shè)置和分配。排序組件可讀取存儲(chǔ)在剔除緩沖器中的值,且在將指令分配到SP之前在工作組和工作項(xiàng)等級(jí)兩者上移除指令。舉例來(lái)說(shuō),排序模塊可讀取存儲(chǔ)在剔除緩沖器中的值,且基于所述值確定工作項(xiàng)的整個(gè)工作組無(wú)關(guān)。排序模塊還可讀取存儲(chǔ)在剔除緩沖器中的值,且基于所述值確定個(gè)別工作項(xiàng)無(wú)關(guān)。
[0038]根據(jù)一些方面,應(yīng)用程序可包含實(shí)現(xiàn)指令剔除的指令。舉例來(lái)說(shuō),應(yīng)用程序可包含使剔除緩沖器能夠行使功能的指令。為實(shí)現(xiàn)指令剔除,應(yīng)用程序的所執(zhí)行指令提供結(jié)果以及表示結(jié)果的特性的待存儲(chǔ)在剔除緩沖器中的一個(gè)或一個(gè)以上值兩者,所述一個(gè)或一個(gè)以上值可用以確定后續(xù)指令的相關(guān)性。
[0039]GPU應(yīng)用程序編程通常由用戶(hù)(例如,計(jì)算機(jī)程序員)通過(guò)應(yīng)用程序接口(API)來(lái)執(zhí)行,所述應(yīng)用程序接口提供可在多個(gè)平臺(tái)、操作系統(tǒng)和硬件上運(yùn)行的標(biāo)準(zhǔn)軟件接口。API的實(shí)例包含開(kāi)放圖形庫(kù)(“0penGL”,2010年7月26日發(fā)布且公開(kāi)可用的版本4.1)、計(jì)算統(tǒng)一裝置架構(gòu)(由NVIDA公司開(kāi)發(fā)的“CUDA”,2010年9月17日發(fā)布的版本3.2),和DirectX (由微軟公司開(kāi)發(fā),2009年10月27日發(fā)布的版本11)。一股來(lái)說(shuō),API包含由相關(guān)聯(lián)硬件執(zhí)行的一組預(yù)定的標(biāo)準(zhǔn)化的命令。API命令允許用戶(hù)發(fā)指令給GPU的硬件組件以執(zhí)行命令而無(wú)需用戶(hù)了解所述硬件組件的詳情。
[0040]本發(fā)明的某些方面涉及一個(gè)或一個(gè)以上API命令,其允許用戶(hù)(例如,計(jì)算機(jī)程序員)界定和實(shí)施指令剔除。舉例來(lái)說(shuō),API命令還可用戶(hù)界定將在執(zhí)行指令之后由應(yīng)用程序產(chǎn)生的剔除緩沖器值。API命令還可發(fā)指令給GPU以將一個(gè)或一個(gè)以上剔除緩沖器值存儲(chǔ)到指定剔除緩沖器。API命令還可發(fā)指令給GPU以在組織和分配指令到SP之前分析剔除緩沖器。在接收并執(zhí)行命令之后,GPU即刻產(chǎn)生一個(gè)或一個(gè)以上剔除緩沖器值并將其存儲(chǔ)到剔除緩沖器,且在無(wú)關(guān)指令被分配到SP之前剔除所述無(wú)關(guān)指令。
[0041]多種不同GPGPU應(yīng)用程序可受益于無(wú)關(guān)指令剔除。提供一非限制性且經(jīng)簡(jiǎn)化的圖像處理應(yīng)用程序(例如,面部檢測(cè)應(yīng)用程序)作為可具有多個(gè)核心的應(yīng)用程序的實(shí)例,其中一個(gè)核心的指令使另一核心的指令無(wú)關(guān)。實(shí)例面部檢測(cè)應(yīng)用程序包含用于檢測(cè)與包含在圖像(例如,視頻數(shù)據(jù)的幀、計(jì)算機(jī)產(chǎn)生的圖形圖像、靜態(tài)圖像,及其類(lèi)似者)中的面部相關(guān)聯(lián)的不同預(yù)定義特征的三個(gè)核心。
[0042]在此實(shí)例中,每一核心可經(jīng)實(shí)施以識(shí)別與面部相關(guān)聯(lián)的圖像的像素中的特定特征(例如,色彩、色調(diào)、飽和度、亮度,或其它屬性)。根據(jù)此實(shí)例,滿(mǎn)足核心中闡述的所有準(zhǔn)則的視頻數(shù)據(jù)幀中的任何像素或像素群組為面部候選者。此外,此實(shí)例的核心從較保守到較不保守而加以組織。
[0043]舉例來(lái)說(shuō),第一核心可識(shí)別許多候選面部像素以便避免排除可能的候選物。然而,第二和第三核心在排除像素而使其不被認(rèn)為是候選面部像素時(shí)可能更為激進(jìn)以便充分地縮窄候選物的數(shù)目。在此實(shí)例中,核心的部分在執(zhí)行每一核心之后變得無(wú)關(guān)。舉例來(lái)說(shuō),在執(zhí)行第一核心之后,僅一些像素被識(shí)別為候選面部像素,且剩余像素被排除而不予考慮。因此,與第二和第三核心中的被排除像素相關(guān)聯(lián)的任何指令是無(wú)關(guān)的。即使被執(zhí)行,那些指令也不會(huì)有助于識(shí)別面部候選者。
[0044]在于所提供的面部檢測(cè)實(shí)例中執(zhí)行核心時(shí),第二和第三核心變得稀疏。舉例來(lái)說(shuō),在執(zhí)行每一核心之后,致使后續(xù)核心的更多指令無(wú)關(guān)。所述無(wú)關(guān)指令消耗GPU資源,即使其無(wú)助于發(fā)現(xiàn)面部。根據(jù)本發(fā)明的方面,GPU可實(shí)施指令剔除以便在無(wú)關(guān)指令被分配到SP用于執(zhí)行之前移除所述無(wú)關(guān)指令。以此方式,GPU效率得以提高,因?yàn)镚PU的SP經(jīng)實(shí)施以執(zhí)行無(wú)關(guān)指令。
[0045]當(dāng)執(zhí)行所提供的面部檢測(cè)實(shí)例時(shí),GPU可首先執(zhí)行第一核心,且產(chǎn)生一個(gè)或一個(gè)以上剔除緩沖器值。舉例來(lái)說(shuō),GPU的SP可執(zhí)行第一核心的指令,且用表示第一核心的所執(zhí)行指令的特性(例如,后續(xù)指令是相關(guān)還是無(wú)關(guān))的剔除緩沖器值填入剔除緩沖器。在執(zhí)行第二核心之后,GPU可即刻利用存儲(chǔ)在剔除緩沖器中的值來(lái)從第二核心識(shí)別并剔除無(wú)關(guān)指令。舉例來(lái)說(shuō),GPU可讀取存儲(chǔ)在剔除緩沖器76中的值,且在指令被分配到SP84用于執(zhí)行之前確定是否剔除所述指令。在GPU已完成指令剔除之后,GPU執(zhí)行第二核心,且用新剔除緩沖器值更新剔除緩沖器。GPU可接著重復(fù)此實(shí)例過(guò)程以執(zhí)行第三核心。
[0046]圖像處理僅為其中一個(gè)核心的指令可使另一核心的指令無(wú)關(guān)的一個(gè)實(shí)例。其它實(shí)例包含例如擴(kuò)增實(shí)境應(yīng)用、射線(xiàn)跟蹤,以及圖案辨識(shí)。一股來(lái)說(shuō),GPU可經(jīng)實(shí)施以對(duì)多種輸入數(shù)據(jù)進(jìn)行多種應(yīng)用。核心為應(yīng)用特定的,且僅提供用于組織指令的架構(gòu)。因此,應(yīng)理解,剔除無(wú)關(guān)指令的概念適用于多種其它應(yīng)用。
[0047]本文中所描述的某些實(shí)例和方面提及識(shí)別不同核心的無(wú)關(guān)工作項(xiàng)和工作組以及在所述工作項(xiàng)和工作組被分配到GPU的SP之前剔除所述工作項(xiàng)和工作組。然而,核心/工作組/工作項(xiàng)描繪僅為GPGPU應(yīng)用結(jié)構(gòu)的一個(gè)實(shí)例。應(yīng)理解,識(shí)別無(wú)關(guān)工作項(xiàng)和工作組以及產(chǎn)生、存儲(chǔ)和使用工作項(xiàng)和工作組剔除值僅作為一實(shí)例而提供。本發(fā)明的涉及識(shí)別無(wú)關(guān)指令以及產(chǎn)生、存儲(chǔ)和使用剔除緩沖器值的方面可應(yīng)用于其它GPU應(yīng)用結(jié)構(gòu)中。舉例來(lái)說(shuō),其它GPU應(yīng)用可包含單個(gè)相對(duì)較大的“核心”,其包含在執(zhí)行期間使用相同輸入數(shù)據(jù)一次以上的指令。在此種實(shí)例中,本發(fā)明的方面仍可應(yīng)用于最大化SP效率??商蕹c相同輸入數(shù)據(jù)有關(guān)的無(wú)關(guān)指令,盡管所述指令屬于相同核心。
[0048]圖1是說(shuō)明可實(shí)施用于識(shí)別和剔除無(wú)關(guān)指令(例如工作項(xiàng)和工作組)的技術(shù)的計(jì)算裝置20的框圖。如圖1中所示,計(jì)算裝置20包含主機(jī)處理器24、存儲(chǔ)裝置28、存儲(chǔ)器
32、網(wǎng)絡(luò)模塊36、用戶(hù)接口 40,和顯示器44。計(jì)算裝置20還包含圖形處理單元(GPU) 48。在一些實(shí)例中,計(jì)算裝置20可包含便攜式計(jì)算裝置(例如移動(dòng)電話(huà)、上網(wǎng)本、膝上型計(jì)算機(jī)、平板裝置、數(shù)字媒體播放器、游戲裝置,或其它便攜式計(jì)算裝置)或?yàn)楸銛y式計(jì)算裝置的部分。或者,計(jì)算裝置20可配置為靜止計(jì)算裝置,例如桌上型計(jì)算機(jī)、電視、電視機(jī)頂盒、游戲控制臺(tái),或其類(lèi)似者。
[0049]圖1所說(shuō)明的計(jì)算裝置20僅為一個(gè)實(shí)例??捎删哂衅渌M件的多種其它計(jì)算裝置進(jìn)行用于識(shí)別和剔除無(wú)關(guān)指令的技術(shù)。在一些實(shí)例中,計(jì)算裝置20可包含出于清晰性目的而未在圖1中展示的額外組件。舉例來(lái)說(shuō),計(jì)算裝置20可包含用于在計(jì)算裝置20的組件之間傳送數(shù)據(jù)的一個(gè)或一個(gè)以上通信橋接器。此外,圖1中所示的計(jì)算裝置20的組件可能并非在計(jì)算裝置20的每一實(shí)例中都是必要的。舉例來(lái)說(shuō),在計(jì)算裝置20為桌上型計(jì)算機(jī)的實(shí)例中,用戶(hù)接口 40和顯示器44可在計(jì)算裝置20外部。
[0050]主機(jī)處理器24可包含微處理器、控制器、數(shù)字信號(hào)處理器(DSP)、專(zhuān)用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)或等效離散或集成邏輯電路中的任何一者或一者以上。另外,在本發(fā)明中,歸于主機(jī)處理器24的功能可體現(xiàn)為軟件、固件、硬件或其任何組合。
[0051]主機(jī)處理器24處理用于在計(jì)算裝置20內(nèi)執(zhí)行的指令。主機(jī)處理器24可能夠處理存儲(chǔ)在存儲(chǔ)裝置28上的指令或存儲(chǔ)在存儲(chǔ)器32中的指令。實(shí)例應(yīng)用程序包含用于處理可檢視圖像(例如,對(duì)圖像進(jìn)行濾波、分析圖像的預(yù)定義特征,及其類(lèi)似者)的應(yīng)用程序。主機(jī)處理器24可基于用戶(hù)經(jīng)由用戶(hù)接口 40的選擇而執(zhí)行一個(gè)或一個(gè)以上應(yīng)用程序。在一些實(shí)例中,主機(jī)處理器24可在沒(méi)有用戶(hù)交互的情況下執(zhí)行一個(gè)或一個(gè)以上應(yīng)用程序。
[0052]根據(jù)本發(fā)明的一些方面且如下文相對(duì)于GPU48所更詳細(xì)描述的,主機(jī)處理器24可與GPU48協(xié)作以進(jìn)行應(yīng)用程序。舉例來(lái)說(shuō),主機(jī)處理器24可初始化應(yīng)用程序的執(zhí)行,且將與所述應(yīng)用程序相關(guān)聯(lián)的某些處理功能委托給GPU48。在一實(shí)例中,主機(jī)處理器24可初始化圖像處理應(yīng)用程序的執(zhí)行,且將與所述應(yīng)用程序相關(guān)聯(lián)的某些處理功能分擔(dān)給GPU48。
[0053]存儲(chǔ)裝置28可包含一個(gè)或一個(gè)以上計(jì)算機(jī)可讀存儲(chǔ)媒體。存儲(chǔ)裝置28可經(jīng)配置以用于長(zhǎng)期存儲(chǔ)信息。在一些實(shí)例中,存儲(chǔ)裝置28可包含非易失性存儲(chǔ)元件。此些非易失性存儲(chǔ)元件的實(shí)例可包含磁性硬盤(pán)、光盤(pán)、軟盤(pán)、快閃存儲(chǔ)器,或多種形式的電可編程存儲(chǔ)器(EPROM)或電可擦除且可編程(EEPROM)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)裝置28可被視為非暫時(shí)性存儲(chǔ)媒體。術(shù)語(yǔ)“非暫時(shí)性”可指示存儲(chǔ)媒體不體現(xiàn)于載波或傳播信號(hào)中。然而,術(shù)語(yǔ)“非暫時(shí)性”不應(yīng)解釋為意指存儲(chǔ)裝置28為不可移動(dòng)的。作為一個(gè)實(shí)例,存儲(chǔ)裝置28可從計(jì)算裝置20移除,且移動(dòng)到另一裝置。作為另一實(shí)例,實(shí)質(zhì)上類(lèi)似于存儲(chǔ)裝置28的存儲(chǔ)裝置可插入到計(jì)算裝置20中。
[0054]存儲(chǔ)裝置28可存儲(chǔ)用于使主機(jī)處理器24或GPU48執(zhí)行一個(gè)或一個(gè)以上應(yīng)用程序的指令。存儲(chǔ)裝置28還可存儲(chǔ)供主機(jī)處理器24或GPU48使用的數(shù)據(jù)。舉例來(lái)說(shuō),存儲(chǔ)裝置28可存儲(chǔ)用于由主機(jī)處理器24或GPU48處理的圖像數(shù)據(jù)。
[0055]存儲(chǔ)器32可經(jīng)配置以在操作期間將信息存儲(chǔ)在計(jì)算裝置20內(nèi)。在一些實(shí)例中,存儲(chǔ)器32為臨時(shí)存儲(chǔ)器,意指存儲(chǔ)器32的主要目的不是長(zhǎng)期存儲(chǔ)。在一些實(shí)例中,存儲(chǔ)器32可描述為計(jì)算機(jī)可讀存儲(chǔ)媒體。因此,存儲(chǔ)器32還可認(rèn)為是“非暫時(shí)性的”,盡管其存儲(chǔ)可隨時(shí)間而改變的數(shù)據(jù)。在一些實(shí)例中,存儲(chǔ)器32還可描述為易失性存儲(chǔ)器,意指存儲(chǔ)器32在計(jì)算機(jī)斷開(kāi)時(shí)并不維持所存儲(chǔ)的內(nèi)容。易失性存儲(chǔ)器的實(shí)例包含隨機(jī)存取存儲(chǔ)器(RAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM),和此項(xiàng)技術(shù)中已知的其它形式的易失性存儲(chǔ)器。
[0056]在一些實(shí)例中,存儲(chǔ)器32可用以存儲(chǔ)供主機(jī)處理器24或GPU48執(zhí)行的程序指令。存儲(chǔ)器32可由在計(jì)算裝置20運(yùn)行的軟件或應(yīng)用程序使用以在程序執(zhí)行期間暫時(shí)存儲(chǔ)信息。由此,存儲(chǔ)器32可由計(jì)算裝置20的其它組件(例如主機(jī)處理器24和GPU48)存取。
[0057]計(jì)算裝置20可利用網(wǎng)絡(luò)模塊36來(lái)經(jīng)由一個(gè)或一個(gè)以上網(wǎng)絡(luò)(例如一個(gè)或一個(gè)以上無(wú)線(xiàn)網(wǎng)絡(luò))與外部裝置通信。網(wǎng)絡(luò)模塊36可為網(wǎng)絡(luò)接口卡,例如以太網(wǎng)卡、光學(xué)收發(fā)器、射頻收發(fā)器,或可發(fā)送和接收信息的任何其它類(lèi)型的裝置。在一些實(shí)例中,計(jì)算裝置20可利用網(wǎng)絡(luò)模塊36來(lái)以無(wú)線(xiàn)方式與例如服務(wù)器、移動(dòng)電話(huà)或其它網(wǎng)絡(luò)連接的計(jì)算裝置等外部裝置通信。
[0058]計(jì)算裝置20還包含用戶(hù)接口 40。用戶(hù)接口 40的實(shí)例包含但不限于軌跡球、鼠標(biāo)、鍵盤(pán),和其它類(lèi)型的輸入裝置。用戶(hù)接口 40還可包含并入為顯示器44的部分的觸敏屏。顯示器44可包括液晶顯示器(LCD)、有機(jī)發(fā)光二極管(OLED)顯示器、等離子顯示器,或另一類(lèi)型的顯示裝置。
[0059]計(jì)算裝置20的GPU48可為具有用于執(zhí)行GPU應(yīng)用程序的固定功能和可編程組件的專(zhuān)用硬件單元。GPU48還可包含DSP、通用微處理器、ASIC、FPGA,或其它等效集成或離散邏輯電路。GPU48還可包含其它組件,例如如相對(duì)于圖2更詳細(xì)描述的專(zhuān)用存儲(chǔ)器。此外,盡管在圖1中展示為單獨(dú)組件,但在一些實(shí)例中,GPU48可形成為主機(jī)處理器24的部分。GPU48可經(jīng)配置以利用根據(jù)多種應(yīng)用程序編程接口(API)的處理技術(shù)。舉例來(lái)說(shuō),用戶(hù)可使用可在多個(gè)平臺(tái)、操作系統(tǒng)和硬件上運(yùn)行的標(biāo)準(zhǔn)軟件接口來(lái)編程待由GPU48執(zhí)行的應(yīng)用程序。在一些實(shí)例中,GPU48可經(jīng)配置以利用使用OpenCL、CUDA或API的DirectX集合所產(chǎn)生的應(yīng)用程序。
[0060]根據(jù)一些實(shí)例,GPU48可實(shí)施為通用圖形處理單元(GPGPU)。舉例來(lái)說(shuō),GPU48可進(jìn)行傳統(tǒng)上由主機(jī)處理器24進(jìn)行的多種通用計(jì)算功能。實(shí)例包含多種圖像處理功能,包含視頻解碼和后處理(例如,解塊、噪聲減少、色彩校正,及其類(lèi)似者)和其它應(yīng)用特定圖像處理功能(例如,面部檢測(cè)/辨識(shí)、圖案辨識(shí)、小波變換,及其類(lèi)似者)。在一些實(shí)例中,GPU48可與主機(jī)處理器24協(xié)作以執(zhí)行應(yīng)用程序。舉例來(lái)說(shuō),主機(jī)處理器24可通過(guò)向GPU48提供用于由GPU48執(zhí)行的指令而將某些功能分擔(dān)給GPU48。[0061]當(dāng)實(shí)施為GPGPU時(shí),GPU48和主機(jī)處理器24可執(zhí)行具有一個(gè)或一個(gè)以上著色器程序(在本文中稱(chēng)為核心)的應(yīng)用程序。應(yīng)用程序的每一核心可界定用于進(jìn)行特定任務(wù)的功能,且每一核心可對(duì)相同輸入數(shù)據(jù)執(zhí)行。舉例來(lái)說(shuō),GPU48和主機(jī)處理器24可執(zhí)行具有用于識(shí)別圖像中的特征的多個(gè)核心的實(shí)例圖像處理應(yīng)用程序,且所述多個(gè)核心中的每一者可對(duì)圖像數(shù)據(jù)執(zhí)行以識(shí)別所述特征。另外,GPU48可執(zhí)行包含取決于其它核心的結(jié)果的核心的應(yīng)用程序。在此些實(shí)例中,一核心的結(jié)果可使后續(xù)核心的指令(例如后續(xù)核心的工作項(xiàng)和工作組)“無(wú)關(guān)”(例如,一個(gè)或一個(gè)以上指令并不使應(yīng)用程序的目的有進(jìn)展)。
[0062]根據(jù)本發(fā)明的一些方面,GPU48可通過(guò)防止無(wú)關(guān)指令被執(zhí)行而避免執(zhí)行無(wú)關(guān)指令。舉例來(lái)說(shuō),為防止無(wú)關(guān)指令被執(zhí)行,GPU48可在指令被執(zhí)行之前“剔除”或移除所述指令。即,GPU48可在無(wú)關(guān)工作項(xiàng)和/或工作組被執(zhí)行之前剔除所述無(wú)關(guān)工作項(xiàng)和/或工作組。如上所述,術(shù)語(yǔ)“工作項(xiàng)”包含用于GPU的基本工作單元,其可包含界定用于處理輸入數(shù)據(jù)的功能的一個(gè)或一個(gè)以上個(gè)別指令。此外,術(shù)語(yǔ)“工作組”大體是指指令的預(yù)定義群組,例如工作項(xiàng)的預(yù)定義群組。
[0063]因此,本發(fā)明的技術(shù)大體上包含使用一個(gè)以上核心執(zhí)行用于處理輸入數(shù)據(jù)的應(yīng)用程序。在執(zhí)行第一核心的工作項(xiàng)和工作組之后,GPU48可即刻設(shè)定表示第二核心的工作項(xiàng)和工作組是否相關(guān)的剔除緩沖器值。即,GPU48可基于第一核心的結(jié)果設(shè)定剔除緩沖器值,其表示與第一核心的工作項(xiàng)和工作組中的每一者的相同輸入數(shù)據(jù)相關(guān)聯(lián)的第二核心的相應(yīng)工作項(xiàng)和工作組是否相關(guān)。因此,在執(zhí)行第一核心之后,GPU48可利用所述剔除緩沖器值來(lái)剔除第二核心中的無(wú)關(guān)工作項(xiàng)和工作組,以使得無(wú)關(guān)工作項(xiàng)和工作組不被執(zhí)行。
[0064]圖2是更詳細(xì)地說(shuō)明可經(jīng)配置以進(jìn)行用于指令剔除(例如剔除工作項(xiàng)和工作組)的技術(shù)的GPU48的框圖。在圖2中所示的實(shí)例中,GPU48包含GPU存儲(chǔ)器64和具有剔除緩沖器76和剔除模塊80的定序器模塊72。GPU48還包含著色器處理器84A到84D (統(tǒng)稱(chēng)“SP,,84)。
[0065]圖2僅提供為可利用用于指令剔除的技術(shù)的GPU的一個(gè)實(shí)例??捎删哂衅渌M件的多種其它GPU進(jìn)行用于識(shí)別和剔除無(wú)關(guān)指令的技術(shù)。舉例來(lái)說(shuō),在其它實(shí)例中,GPU48還可包含與分析和再現(xiàn)圖像的有關(guān)的多種其它模塊,例如光柵器模塊、紋理化單元、一個(gè)或一個(gè)以上緩沖劑,或其它GPU組件。此外,GPU48可包含比圖2中所示的組件更多或更少的組件。舉例來(lái)說(shuō),GPU48在圖2中展示為包含四個(gè)SP84。然而,在其它實(shí)例中,GPU48可包含比圖2中所示的SP84更多或更少的SP84。
[0066]GPU存儲(chǔ)器64可為GPU48內(nèi)的用于存儲(chǔ)待由GPU48處理的指令的專(zhuān)用存儲(chǔ)器模塊。在一些實(shí)例中,GPU存儲(chǔ)器64類(lèi)似于圖1中所示的存儲(chǔ)器32。舉例來(lái)說(shuō),GPU存儲(chǔ)器64可為暫時(shí)性計(jì)算機(jī)可讀存儲(chǔ)媒體。GPU存儲(chǔ)器64的實(shí)例包含隨機(jī)存取存儲(chǔ)器(RAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM),以及此項(xiàng)技術(shù)中已知的其它形式的存儲(chǔ)器。在其中GPU48形成為另一處理器(例如圖1中所示的主機(jī)處理器24)的部分的實(shí)例中,GPU存儲(chǔ)器64可由不同于GPU48的組件存取。
[0067]GPU存儲(chǔ)器64可配置為用于GPU48的全局存儲(chǔ)器。舉例來(lái)說(shuō),GPU存儲(chǔ)器64可經(jīng)配置以在操作期間將指令和信息(例如,用于由GPU48處理的圖像數(shù)據(jù)和指令)存儲(chǔ)在GPU48內(nèi)。GPU存儲(chǔ)器64還可經(jīng)配置以存儲(chǔ)已由GPU48處理的數(shù)據(jù)的結(jié)果。
[0068]定序器模塊72可最初準(zhǔn)備用于由SP84處理的指令和數(shù)據(jù)。舉例來(lái)說(shuō),定序器模塊72可從主機(jī)處理器(例如圖1中所示的主機(jī)處理器24)或GPU存儲(chǔ)器64接收指令和數(shù)據(jù),且準(zhǔn)備待由SP84處理的輸入數(shù)據(jù)。在一些實(shí)例中,定序器模塊72接收界定待由GPU48進(jìn)行的功能的指令的一個(gè)或一個(gè)以上核心。定序器模塊72可將指令組織成工作項(xiàng)(例如,基本工作單元)且將工作項(xiàng)分組成工作組。
[0069]定序器模塊72還可經(jīng)實(shí)施以控制GPU48內(nèi)的指令和數(shù)據(jù)流。舉例來(lái)說(shuō),定序器模塊72可將指令和相關(guān)聯(lián)數(shù)據(jù)導(dǎo)引到SP84用于執(zhí)行。定序器模塊72可由用于將指令(例如,工作項(xiàng)和工作組)和相關(guān)聯(lián)輸入數(shù)據(jù)分配到SP84的固定功能和可編程組件的組合組成。根據(jù)本發(fā)明的一些方面,定序器模塊72包含用于識(shí)別無(wú)關(guān)指令且防止所述無(wú)關(guān)指令被GPU48的SP84處理的剔除模塊76和剔除緩沖器80。即,定序器模塊72可包含用于識(shí)別無(wú)關(guān)工作項(xiàng)和工作組且防止所述無(wú)關(guān)工作項(xiàng)和工作組被GPU48的SP84處理的剔除模塊76和剔除緩沖器80。
[0070]在圖2中所示的實(shí)例中,SP72各自包含線(xiàn)程設(shè)置模塊88A到88D(統(tǒng)稱(chēng)為線(xiàn)程設(shè)置模塊88),以及多個(gè)算術(shù)邏輯單元(“ALU”) 92A到92D (統(tǒng)稱(chēng)為ALU92)。SP72可被稱(chēng)為“統(tǒng)一著色器處理器”,因?yàn)镾P72可執(zhí)行幾何形狀、頂點(diǎn)或像素陰影操作以再現(xiàn)圖形。SP72還可用以在執(zhí)行GPGPU應(yīng)用程序的指令時(shí)執(zhí)行通用計(jì)算。舉例來(lái)說(shuō),SP72可從定序器模塊76接收指令且執(zhí)行所述指令。
[0071]在一些實(shí)例中,SP84的線(xiàn)程設(shè)置模塊88負(fù)責(zé)從定序器模塊72接收指令以及產(chǎn)生線(xiàn)程供ALU92執(zhí)行。舉例來(lái)說(shuō),線(xiàn)程設(shè)置模塊88可從定序器模塊72接收指令(例如,工作項(xiàng)的工作組),暫時(shí)存儲(chǔ)所述指令,產(chǎn)生線(xiàn)程(即,工作項(xiàng))供ALU92執(zhí)行,且將所述線(xiàn)程分配到ALU92。根據(jù)一些方面,線(xiàn)程設(shè)置模塊88以允許ALU92并行地處理一個(gè)以上線(xiàn)程的方式將線(xiàn)程分配到ALU92??赏ㄟ^(guò)用相關(guān)線(xiàn)程(例如,具有相關(guān)指令的線(xiàn)程)持續(xù)占據(jù)SP84的ALU92來(lái)最大化GPU48的性能和效率。
[0072]根據(jù)本發(fā)明的一些方面,GPU48可通過(guò)實(shí)施定序器模塊72以識(shí)別“無(wú)關(guān)”指令(例如,不使應(yīng)用程序的目的有進(jìn)展的指令)且防止所述無(wú)關(guān)指令被SP84處理來(lái)提高效率。舉例來(lái)說(shuō),為防止無(wú)關(guān)工作項(xiàng)被處理,定序器模塊72可在將指令導(dǎo)引到SP84之前剔除或移除無(wú)關(guān)工作項(xiàng)。因此,SP84的線(xiàn)程設(shè)置模塊88不產(chǎn)生包含無(wú)關(guān)工作項(xiàng)的線(xiàn)程,且SP84的ALU92不被執(zhí)行無(wú)關(guān)工作項(xiàng)占據(jù)。
[0073]定序器模塊72可實(shí)施剔除緩沖器76和剔除模塊80以進(jìn)行指令剔除。盡管在圖2中描述且表示為兩個(gè)相異的模塊,但在一些實(shí)例中,剔除緩沖器76和剔除模塊80可實(shí)施于相同組件中。另外,根據(jù)一些實(shí)例,剔除緩沖器76與剔除模塊80可不實(shí)施為相異組件。確切地說(shuō),在一些實(shí)例中,剔除緩沖器76和剔除模塊80可集成到GPU48的其它組件中。舉例來(lái)說(shuō),剔除緩沖器76可實(shí)施為GPU存儲(chǔ)器64的分區(qū)。在另一實(shí)例中,剔除緩沖器76可為在GPU48外部的存儲(chǔ)器。或者或另外,相對(duì)于剔除模塊80描述的指令剔除技術(shù)可集成到定序器模塊72或SP84中。
[0074]剔除緩沖器76可存儲(chǔ)表示所執(zhí)行工作項(xiàng)的特性的一個(gè)或一個(gè)以上值。所述特性可用以確定與后續(xù)核心相關(guān)聯(lián)的后續(xù)工作項(xiàng)是相關(guān)還是無(wú)關(guān)。舉例來(lái)說(shuō),GPU48可執(zhí)行具有兩個(gè)核心的應(yīng)用程序。在執(zhí)行第一核心之后,GPU48可將基于第一核心的結(jié)果而表不第二核心的工作項(xiàng)是否相關(guān)的一個(gè)或一個(gè)以上值存儲(chǔ)到剔除緩沖器80。
[0075]剔除緩沖器76可從多種來(lái)源接收界定剔除緩沖器值的輸入。在一個(gè)實(shí)例中,在SP84中的一者(例如SP84A)執(zhí)行工作項(xiàng)之后,SP84A可基于所執(zhí)行工作項(xiàng)的結(jié)果直接將一個(gè)或一個(gè)以上剔除緩沖器值寫(xiě)入到剔除緩沖器76。在另一實(shí)例中,剔除緩沖器76可從如上所述的可編程或固定功能硬件接收剔除緩沖器值。
[0076]根據(jù)一些方面,剔除緩沖器76可經(jīng)設(shè)計(jì)以存儲(chǔ)表示工作組的特性的一個(gè)或一個(gè)以上值以及表示所述工作組內(nèi)的個(gè)別工作項(xiàng)的特性的一個(gè)或一個(gè)以上值。舉例來(lái)說(shuō),剔除緩沖器76可存儲(chǔ)在先前執(zhí)行的核心致使給定工作組的所有工作項(xiàng)都無(wú)關(guān)的情況下表示特定工作組的所有工作項(xiàng)都無(wú)關(guān)的工作組剔除值?;蛘呋蛄硗?,剔除緩沖器76可存儲(chǔ)表示先前執(zhí)行的核心致使給定工作組的僅一些工作項(xiàng)無(wú)關(guān)的一個(gè)或一個(gè)以上工作項(xiàng)剔除值。因此,存儲(chǔ)在剔除緩沖器76中的值可用以在工作組等級(jí)和工作項(xiàng)等級(jí)兩者上確定特性(例如指令的相關(guān)性)。
[0077]剔除緩沖器76可具有多種不同容量,其中較大容量提供額外能力。在一個(gè)實(shí)例中,剔除緩沖器76可包含對(duì)于核心的每一工作項(xiàng)的單位存儲(chǔ)。在此實(shí)例中,所述單位存儲(chǔ)可用以存儲(chǔ)表示核心的每一工作項(xiàng)的單個(gè)特性的二進(jìn)制值。GPU48可使用所述單個(gè)特性來(lái)基于先前執(zhí)行的工作項(xiàng)的結(jié)果識(shí)別工作項(xiàng)是相關(guān)還是無(wú)關(guān)。
[0078]在其它實(shí)例中,剔除緩沖器76可包含對(duì)于核心的每一工作項(xiàng)的大于單個(gè)位的存儲(chǔ)。舉例來(lái)說(shuō),一個(gè)以上值可存儲(chǔ)在剔除緩沖器76中以描述核心的每一工作項(xiàng)的多種特性。在非限制性圖像處理實(shí)例中,GPU48可對(duì)像素?cái)?shù)據(jù)執(zhí)行工作項(xiàng)以確定所述像素?cái)?shù)據(jù)的紅綠藍(lán)(RGB)特性。因此,剔除緩沖器76可包含允許存儲(chǔ)對(duì)應(yīng)于所執(zhí)行工作項(xiàng)的紅、綠和藍(lán)分量的三個(gè)值的存儲(chǔ)。在此實(shí)例中,GPU48和剔除模塊80可基于存儲(chǔ)在剔除緩沖器76中的值中的任一者剔除工作項(xiàng)。應(yīng)理解,剔除緩沖器76的配置(例如,能力和容量)可取決于應(yīng)用程序和GPU。舉例來(lái)說(shuō),一些GPU可經(jīng)設(shè)計(jì)以為相對(duì)較大且多功能性的剔除緩沖器提供相對(duì)較大量的存儲(chǔ)器。其它GPU可不能夠提供此種多功能性。因此,應(yīng)理解,所提供的實(shí)例并非可實(shí)施的剔除緩沖劑的僅有配置。
[0079]剔除模塊80可負(fù)責(zé)存取存儲(chǔ)在剔除緩沖器76中的值且基于存儲(chǔ)在剔除緩沖器76中的值剔除無(wú)關(guān)指令。根據(jù)一些實(shí)例,剔除模塊80在定序器模塊72準(zhǔn)備且分配指令到SP84之前存取存儲(chǔ)在剔除緩沖器76中的值。如相對(duì)于圖7較詳細(xì)描述的,剔除模塊80可讀取存儲(chǔ)在剔除緩沖器76中的值,且在工作項(xiàng)和工作組等級(jí)兩者上剔除指令。舉例來(lái)說(shuō),剔除模塊80可讀取存儲(chǔ)在剔除緩沖器76中的值,且基于所述值確定工作項(xiàng)的整個(gè)工作組無(wú)關(guān)。剔除模塊80還可讀取存儲(chǔ)在剔除緩沖器76中的值,且基于所述值確定個(gè)別工作項(xiàng)無(wú)關(guān)。在剔除模塊80已剔除無(wú)關(guān)指令之后,定序器模塊72可準(zhǔn)備并分配剩余指令到SP84。
[0080]本發(fā)明的方面涉及GPU48利用剔除緩沖器76和剔除模塊80來(lái)在執(zhí)行具有處理相同輸入數(shù)據(jù)的一個(gè)以上核心的應(yīng)用程序時(shí)剔除無(wú)關(guān)指令。在一實(shí)例中,GPU48從主機(jī)處理器(例如圖1中所示的主機(jī)處理器24)或其它計(jì)算單元接收界定多個(gè)核心的指令和數(shù)據(jù)。在接收到所述核心之后,定序器模塊72可即刻最初準(zhǔn)備與第一核心相關(guān)聯(lián)的指令和數(shù)據(jù)供SP84處理。舉例來(lái)說(shuō),定序器模塊72可將第一核心的指令組織成工作項(xiàng)和工作組。
[0081]在產(chǎn)生工作組網(wǎng)格之后,定序器模塊72的剔除模塊80可即刻查詢(xún)剔除緩沖器76以確定是否執(zhí)行指令剔除。根據(jù)一些實(shí)例,剔除模塊80不對(duì)指令的第一核心執(zhí)行指令剔除,因?yàn)樵谝恍?shí)例中,剔除緩沖器值是基于所執(zhí)行指令的結(jié)果而產(chǎn)生。因此,剔除緩沖器76在執(zhí)行第一核心之前是空的。定序器模塊72進(jìn)行到將與第一核心相關(guān)聯(lián)的指令(例如,工作組和工作項(xiàng))分配到SP84,SP84執(zhí)行所述指令。
[0082]在SP84已執(zhí)行第一核心的指令之后,SP84用剔除緩沖器值填入或更新剔除緩沖器76。舉例來(lái)說(shuō),SP84可用表示第一核心的所執(zhí)行工作項(xiàng)的特性的一個(gè)或一個(gè)以上值填入剔除緩沖器76。所述特性可用以確定與下一核心相關(guān)聯(lián)的后續(xù)工作項(xiàng)是相關(guān)還是無(wú)關(guān)。
[0083]GPU可接著通過(guò)執(zhí)行第二核心而繼續(xù)。舉例來(lái)說(shuō),定序器模塊72可通過(guò)組織與第二核心相關(guān)聯(lián)的工作組的一個(gè)或一個(gè)以上網(wǎng)格而準(zhǔn)備與第二核心相關(guān)聯(lián)的指令和數(shù)據(jù)供SP84處理。剔除模塊80接著查詢(xún)剔除緩沖器76以識(shí)別用于剔除的指令。舉例來(lái)說(shuō),剔除模塊80讀取存儲(chǔ)在剔除緩沖器76中的值,且在通過(guò)定序器模塊72將指令分配到SP84之前確定是否剔除所述指令。在一些實(shí)例中,剔除模塊80依據(jù)工作項(xiàng)和工作組兩者剔除指令。在剔除模塊80已完成指令剔除之后,定序器模塊72將指令分配到SP84,SP84執(zhí)行所述指令且更新剔除緩沖器76的值??芍貜?fù)此實(shí)例過(guò)程,直到GPU48已執(zhí)行所有核心為止。
[0084]相對(duì)于圖2描述的實(shí)例提及定序器模塊72使用剔除緩沖器76和剔除模塊80執(zhí)行所有指令剔除(例如,工作項(xiàng)剔除和工作組剔除)。然而,應(yīng)理解,GPU48的其它模塊可負(fù)責(zé)指令剔除,且其它模塊可與剔除緩沖器76交互。根據(jù)一個(gè)實(shí)例,定序器模塊72可負(fù)責(zé)僅執(zhí)行工作組剔除,而SP84的線(xiàn)程設(shè)置模塊88負(fù)責(zé)工作項(xiàng)剔除。舉例來(lái)說(shuō),定序器模塊72可使用剔除緩沖器76和剔除模塊80執(zhí)行工作組剔除,如上所述。在執(zhí)行工作組剔除之后,定序器模塊76可將剩余工作組(例如,在剔除之后剩余的工作組)分配到SP84。在此實(shí)例中,線(xiàn)程設(shè)置模塊88可負(fù)責(zé)工作項(xiàng)剔除。舉例來(lái)說(shuō),在從定序器模塊72接收到工作組之后,線(xiàn)程設(shè)置模塊88可利用剔除緩沖器76執(zhí)行工作項(xiàng)剔除。根據(jù)一些方面,線(xiàn)程設(shè)置模塊88讀取剔除緩沖器76,且基于存儲(chǔ)在剔除緩沖器76中的一個(gè)或一個(gè)以上值確定是否剔除工作項(xiàng)。此外,線(xiàn)程設(shè)置模塊88可基于存儲(chǔ)在剔除緩沖器76中的剔除緩沖器值移除無(wú)關(guān)工作項(xiàng),隨后組織線(xiàn)程供ALU92執(zhí)行。
[0085]根據(jù)一些方面,為在GPU48中實(shí)現(xiàn)指令剔除,GPU48執(zhí)行具有指令剔除命令的應(yīng)用程序。舉例來(lái)說(shuō),GPU48執(zhí)行指令剔除命令,使得當(dāng)執(zhí)行指令時(shí),GPU48產(chǎn)生結(jié)果以及表示所述結(jié)果的特性的一個(gè)或一個(gè)以上值供存儲(chǔ)在剔除緩沖器76中。GPU48還可執(zhí)行使得剔除模塊80能夠讀取剔除緩沖器76的值且執(zhí)行指令剔除的指令剔除命令。
[0086]本發(fā)明的某些方面涉及允許用戶(hù)(例如,計(jì)算機(jī)程序員)產(chǎn)生具有指令剔除命令的應(yīng)用程序的一個(gè)或一個(gè)以上API命令。舉例來(lái)說(shuō),API命令還可用以發(fā)指令給GPU48以產(chǎn)生一個(gè)或一個(gè)以上剔除緩沖器值并將其存儲(chǔ)到指定剔除緩沖器,例如剔除緩沖器76JPI命令還可發(fā)指令給GPU48以在組織并分配指令到SP84之前分析剔除緩沖器值,且基于所述值執(zhí)行指令剔除。舉例來(lái)說(shuō),API命令可發(fā)指令給GPU48以基于剔除緩沖器值丟棄不相關(guān)的指令,使得所述指令不被分配到GPU48的SP84。
[0087]圖3為說(shuō)明與在圖3中表示為工作組O的工作組相關(guān)聯(lián)的工作項(xiàng)網(wǎng)格的框圖。再者,每一工作項(xiàng)可涉及可由GPU的SP (例如GPU48的SP84中的一者)執(zhí)行的個(gè)別指令(例如,基本工作單元)。僅出于說(shuō)明的目的,圖3中所示的工作項(xiàng)是相對(duì)于圖2中所示的實(shí)例GPU48而描述。
[0088]工作項(xiàng)(例如圖3的工作組O中所示的工作項(xiàng))可在由SP84執(zhí)行之前組織成線(xiàn)程(例如,按提供ALU的高效執(zhí)行的配置而組織的一個(gè)或一個(gè)以上指令)。舉例來(lái)說(shuō),SP84中的一者(例如SP84A)可從定序器模塊72接收工作組0,且通過(guò)使用與工作組O相關(guān)聯(lián)的工作項(xiàng)產(chǎn)生線(xiàn)程而準(zhǔn)備用于執(zhí)行的工作組O。
[0089]根據(jù)一些實(shí)例,SP84的效率可受到組織成線(xiàn)程的工作項(xiàng)的相關(guān)性的影響。舉例來(lái)說(shuō),如果線(xiàn)程是由無(wú)關(guān)工作項(xiàng)產(chǎn)生且SP84被執(zhí)行無(wú)關(guān)工作項(xiàng)占據(jù),則可不利地影響SP84的效率。在一些實(shí)例中,多核心程序的工作組可基于先前執(zhí)行的指令的結(jié)果而變得“稀疏”。舉例來(lái)說(shuō),“稀疏”工作組可包含由一個(gè)或一個(gè)以上無(wú)關(guān)工作項(xiàng)分開(kāi)的相關(guān)工作項(xiàng)。在圖3中所示的實(shí)例中,如果先前執(zhí)行的指令致使若干工作項(xiàng)無(wú)關(guān),則工作組O可被視為“稀疏”。
[0090]本發(fā)明的方面涉及識(shí)別無(wú)關(guān)工作項(xiàng),以及在將無(wú)關(guān)工作項(xiàng)組織成線(xiàn)程之前移除所述工作項(xiàng)。在一些實(shí)例中,可在被分配到SP84之前剔除工作項(xiàng)。舉例來(lái)說(shuō),剔除模塊80可利用存儲(chǔ)在剔除緩沖器76中的值來(lái)在將工作項(xiàng)分配到SP84之前確定是否剔除工作項(xiàng)。在一些實(shí)例中,GPU48可在執(zhí)行工作項(xiàng)剔除之前執(zhí)行工作組剔除,如相對(duì)于圖4所描述。
[0091]圖4是說(shuō)明可由GPU(例如圖2中所示的GPU48)執(zhí)行的成三核心(例如,第一核心124、第二核心128,和第三核心132)布置的工作組網(wǎng)格的框圖。再者,可執(zhí)行每一核心124到132以執(zhí)行與給定應(yīng)用程序有關(guān)的特定功能。在一些實(shí)例中,核心124到132可界定用于色彩校正算法、面部檢測(cè)算法、圖案辨識(shí)算法、擴(kuò)增實(shí)境應(yīng)用、多種算法應(yīng)用(例如,小波變換、傅立葉變換,及其類(lèi)似者)或多種其它應(yīng)用的功能。僅出于說(shuō)明的目的,相對(duì)于圖2中所示的實(shí)例GPU48描述圖4。
[0092]圖4中所示的工作組的網(wǎng)格可由定序器模塊72產(chǎn)生。舉例來(lái)說(shuō),定序器模塊72可從主機(jī)處理器(例如圖1中所示的主機(jī)處理器24)或GPU存儲(chǔ)器64接收指令和數(shù)據(jù),且通過(guò)將指令組織成工作組網(wǎng)格而準(zhǔn)備用于執(zhí)行的指令。在一些實(shí)例中,核心124到132中的每一者的工作組涉及相同輸入數(shù)據(jù)。舉例來(lái)說(shuō),核心124的工作組O包含與和核心128的工作組O以及核心132的工作組O相同的輸入數(shù)據(jù)相關(guān)聯(lián)的指令。此外,GPU48可依次地執(zhí)行核心124到132,使得執(zhí)行核心124之后執(zhí)行核心128,且執(zhí)行核心128之后執(zhí)行核心132。
[0093]根據(jù)本發(fā)明的一些方面,一個(gè)核心的一個(gè)或一個(gè)以上工作組的結(jié)果可致使另一核心的工作組無(wú)關(guān)。舉例來(lái)說(shuō),GPU48可執(zhí)行核心124的工作組0,且核心124的工作組O的結(jié)果可致使與核心128的工作組O相關(guān)聯(lián)的指令無(wú)關(guān)。如果與工作組O相關(guān)聯(lián)的指令并不使核心124到132的長(zhǎng)遠(yuǎn)目標(biāo)有進(jìn)展,則核心128的工作組O可被視為無(wú)關(guān)。舉例來(lái)說(shuō),在實(shí)例圖像處理應(yīng)用程序中,核心124到132的一個(gè)長(zhǎng)遠(yuǎn)目標(biāo)可為識(shí)別圖像中的人面部。
[0094]本發(fā)明的方面可經(jīng)實(shí)施以在無(wú)關(guān)工作組可被執(zhí)行之前剔除或移除所述工作組。在上文所描述的實(shí)例中,GPU48可在無(wú)關(guān)工作組O可被分配到SP84之前移除工作組O。舉例來(lái)說(shuō),剔除模塊80可利用存儲(chǔ)在剔除緩沖器76中的值來(lái)確定工作組O無(wú)關(guān),且在工作組O可被分配到SP84之前剔除工作組O。
[0095]如所提及,根據(jù)一個(gè)專(zhuān)用實(shí)施方案,GPU48可執(zhí)行核心124到132以對(duì)圖像(例如圖5A到5C中所示的圖像)進(jìn)行特定任務(wù)。
[0096]圖5A到5C是說(shuō)明用三個(gè)核心(例如,圖5A如中所示核心150、圖5B如中所示核心158,和圖5C如中所示核心164)處理實(shí)例圖像146的框圖。舉例來(lái)說(shuō),核心150、158和164各自包含用于處理與圖像146相關(guān)聯(lián)的圖像數(shù)據(jù)的指令。僅出于說(shuō)明的目的,相對(duì)于圖2中所示的實(shí)例GPU48描述圖5A到5C。
[0097]根據(jù)圖5A到5C中所示的實(shí)例,圖像146為包含1024個(gè)像素的正方形、約16兆字節(jié)(MB)的圖像。每一核心150、158和164包含可與圖像的特定像素有關(guān)的工作項(xiàng)(例如,表示為相對(duì)較小的塊)。因此,當(dāng)GPU48執(zhí)行工作項(xiàng)時(shí),可根據(jù)與所述工作項(xiàng)相關(guān)聯(lián)的指令處理(例如,分析)圖像146的對(duì)應(yīng)像素。
[0098]每一核心150、158和164還包含包括與圖像146的特定像素群組有關(guān)的指令的工作組(例如,表示為相對(duì)較大的塊)。相對(duì)于圖5A到5C描述的像素?cái)?shù)據(jù)、工作項(xiàng)與工作組之間的關(guān)系僅為可能指令結(jié)構(gòu)的實(shí)例。在其它實(shí)例中,工作項(xiàng)可與圖像146的多于或少于
一個(gè)像素有關(guān)。
[0099]根據(jù)一個(gè)非限制性實(shí)例,核心150、158和164實(shí)施為用于檢測(cè)圖像146中的一個(gè)或一個(gè)以上人面部的面部檢測(cè)應(yīng)用程序的部分。在此實(shí)例中,核心150、158和164經(jīng)實(shí)施以識(shí)別包含與人面部相關(guān)聯(lián)的某些預(yù)定特性(例如,色彩、色調(diào)、飽和度、亮度,或其它屬性)的像素。GPU48可識(shí)別圖像146中的滿(mǎn)足核心150、158和164中闡述的所有準(zhǔn)則的任何像素或像素群組作為面部的候選像素。舉例來(lái)說(shuō),如果像素不包含核心150的特征,則致使與核心158和核心164中的像素有關(guān)的指令無(wú)關(guān)。
[0100]如相對(duì)于圖5A到5C更詳細(xì)地展示及描述,當(dāng)GPU48執(zhí)行核心150、158和164中的每一者時(shí),與后續(xù)核心相關(guān)聯(lián)的相關(guān)指令變得越來(lái)越“稀疏”。舉例來(lái)說(shuō),在執(zhí)行每一核心之后,致使后續(xù)核心的更多指令無(wú)關(guān),因?yàn)镚PU48識(shí)別出不包含面部像素的預(yù)定特性的更多像素。根據(jù)本發(fā)明的方面,GPU48可實(shí)施指令剔除以便在無(wú)關(guān)指令被分配到SP84用于執(zhí)行之前移除無(wú)關(guān)指令。以此方式,GPU48的效率得以提高,因?yàn)镾P84不被執(zhí)行無(wú)關(guān)指令占據(jù)。
[0101]圖5A是說(shuō)明用于處理圖像146的第一核心150的框圖。如圖5A中所不,所述第一核心包含工作組154A到154P (統(tǒng)稱(chēng)工作組154),其各自包含多個(gè)工作項(xiàng)156。GPU48可通過(guò)執(zhí)行與工作組154A到154P相關(guān)聯(lián)的所有工作項(xiàng)156而執(zhí)行第一核心150。舉例來(lái)說(shuō),GPU48可從主機(jī)處理器(例如圖1中所示的主機(jī)處理器24)或另一計(jì)算單元接收第一核心150。在接收到第一核心150之后,定序器模塊72可即刻將第一核心150組織成工作組154。
[0102]定序器模塊72可接著進(jìn)行到將所有工作組154和工作項(xiàng)156分配到SP84。SP84接著執(zhí)行工作組154和相關(guān)聯(lián)工作項(xiàng)156,且用一個(gè)或一個(gè)以上剔除緩沖器值填入剔除緩沖器76。所述剔除緩沖器值可表示第一核心150的所執(zhí)行工作項(xiàng)的特性。所述特性可用以確定與下一核心相關(guān)聯(lián)的后續(xù)指令是相關(guān)還是無(wú)關(guān)。舉例來(lái)說(shuō),如果特定工作項(xiàng)的結(jié)果指示與所述特定工作項(xiàng)相關(guān)聯(lián)的像素不包含核心150的所需預(yù)定義屬性(例如預(yù)定義色彩、色調(diào)、飽和度、亮度,或其它屬性),則負(fù)責(zé)執(zhí)行所述指令的SP可將指示與所述像素相關(guān)聯(lián)的后續(xù)工作項(xiàng)無(wú)關(guān)的值存儲(chǔ)到剔除緩沖器76。如果同一 SP負(fù)責(zé)執(zhí)行整個(gè)工作組,則所述SP還可將指示與整個(gè)工作組相關(guān)聯(lián)的像素?zé)o關(guān)的值存儲(chǔ)到剔除緩沖器76。在GPU48已執(zhí)行核心150且填入剔除緩沖器76之后,GPU48可進(jìn)行到執(zhí)行如圖5B中所示的核心158。
[0103]圖5B是說(shuō)明根據(jù)本發(fā)明的方面的在第二核心158上的指令剔除的框圖。根據(jù)本發(fā)明的一些方面,在剔除之前,第二核心158最初包含對(duì)應(yīng)于圖5A中所示的工作組154A到154P的工作組160A到160P (統(tǒng)稱(chēng)工作組160)。此外,在剔除之前,工作組160中的每一者最初包含一組全部工作項(xiàng)162,其對(duì)應(yīng)于圖5A中所示的工作項(xiàng)156??蓪?duì)與圖5A中所示的第一核心150相同的輸入數(shù)據(jù)(即,圖像146)執(zhí)行工作組160和工作項(xiàng)162。
[0104]在圖5B中所示的實(shí)例中,GPU48對(duì)來(lái)自第二核心158的無(wú)關(guān)工作組160和工作項(xiàng)162執(zhí)行指令剔除。舉例來(lái)說(shuō),在執(zhí)行第一核心150之后,GPU48可識(shí)別不包含核心150的預(yù)定屬性的數(shù)個(gè)像素。與那些像素相關(guān)聯(lián)的后續(xù)工作組和工作項(xiàng)可被認(rèn)為對(duì)于檢測(cè)圖像146中的面部是無(wú)關(guān)的。GPU48可用以對(duì)無(wú)關(guān)工作組和工作項(xiàng)執(zhí)行指令剔除。
[0105]根據(jù)本發(fā)明的一些方面,GPU48通過(guò)依據(jù)工作項(xiàng)和工作組兩者實(shí)施剔除緩沖器76和剔除模塊80來(lái)剔除指令。舉例來(lái)說(shuō),在執(zhí)行第一核心150之后,GPU48可確定用于工作組154M到154P的位置中的像素的后續(xù)指令無(wú)關(guān)。此外,GPU48可確定用于工作組154H(圖5A中所示)內(nèi)的某些像素的后續(xù)指令無(wú)關(guān)。因此,GPU48將指示與工作組160M到160P和某些工作項(xiàng)162相關(guān)聯(lián)的像素?cái)?shù)據(jù)無(wú)關(guān)的值存儲(chǔ)到剔除緩沖器76。在執(zhí)行核心158之后,GPU48可即刻使用剔除模塊80剔除工作組160M到160P和某些工作項(xiàng)162。
[0106]在剔除模塊80已完成指令剔除之后,定序器模塊72組織剩余指令,且將所述指令分配到SP84。舉例來(lái)說(shuō),根據(jù)一些方面,SP84經(jīng)配置以接收以允許將指令容易地并行分配到ALU92(其可取決于GPU)的方式組織的指令。因此,定序器模塊72可重新組織與第二核心158相關(guān)聯(lián)的指令以?xún)?yōu)化分配和執(zhí)行過(guò)程。
[0107]在接收到被剔除的指令組之后,SP84執(zhí)行所述指令。此外,SP84可更新剔除緩沖器76中的值。舉例來(lái)說(shuō),如果特定工作項(xiàng)162的結(jié)果指示與特定工作項(xiàng)162相關(guān)聯(lián)的像素不包含核心158的所需預(yù)定義屬性,則負(fù)責(zé)執(zhí)行工作項(xiàng)162的SP可將指示與所述像素相關(guān)聯(lián)的后續(xù)工作項(xiàng)無(wú)關(guān)的值存儲(chǔ)到剔除緩沖器76。如果同一 SP負(fù)責(zé)執(zhí)行整個(gè)工作組,則所述SP還可將指示與整個(gè)工作組相關(guān)聯(lián)的像素?zé)o關(guān)的值存儲(chǔ)到剔除緩沖器76。在GPU48已執(zhí)行核心158且填入剔除緩沖器76之后,GPU48可進(jìn)行到執(zhí)行如圖5C中所示的核心164。
[0108]圖5C是說(shuō)明根據(jù)本發(fā)明的方面的在第三核心164上的指令剔除的框圖。根據(jù)本發(fā)明的一些方面,在剔除之前,第三核心164最初包含對(duì)應(yīng)于圖5A中所示的工作組154A到154P的工作組166A到166P (統(tǒng)稱(chēng)工作組166)。此外,在剔除之前,工作組166中的每一者最初包含一組全部工作項(xiàng)168,其對(duì)應(yīng)于圖5A中所示的工作項(xiàng)156??蓪?duì)與圖5A中所示的第一核心150和圖5B中所示的第二核心158相同的輸入數(shù)據(jù)(即,圖像146)執(zhí)行工作組166和工作項(xiàng)168。
[0109]如圖5C中所示,GPU48可在執(zhí)行第三核心164之前進(jìn)行指令剔除,從而進(jìn)一步減小用于由GPU48的SP84處理的指令的數(shù)目。舉例來(lái)說(shuō),在執(zhí)行第二核心158之后,GPU48可確定用于工作組158A、158B、158E、158I和158M到158P的位置中的像素?cái)?shù)據(jù)的后續(xù)指令無(wú)關(guān)。此外,GPU48可確定用于工作組158H(圖5B中所示)內(nèi)的某些像素?cái)?shù)據(jù)的后續(xù)指令無(wú)關(guān)。因此,GPU48更新剔除緩沖器76中的值,其指示與工作組166A、166B、166E、1661和166M到166P和某些工作項(xiàng)168相關(guān)聯(lián)的像素?cái)?shù)據(jù)無(wú)關(guān)。在執(zhí)行核心164之后,GPU48可即刻使用剔除模塊80剔除工作組166A、166B、166E、166I和166M到166P以及某些工作項(xiàng)168,且執(zhí)行剩余指令,如相對(duì)于圖5B所描述。
[0110]如圖5A到5C中所示的實(shí)例所說(shuō)明,當(dāng)應(yīng)用程序包含致使其它指令無(wú)關(guān)的一些指令時(shí),指令剔除可大大減小GPU的計(jì)算數(shù)目。剔除指令可提高GPU的總體效率,因?yàn)镚PU不必將資源專(zhuān)用于分配和執(zhí)行無(wú)關(guān)指令。
[0111]圖5A到5C大體上描述GPU48在工作項(xiàng)和工作組等級(jí)兩者上剔除指令。然而,在其它實(shí)例中,GPU48可執(zhí)行工作項(xiàng)剔除或工作組剔除。此外,圖5A到5C還描述逐核心的指令剔除。舉例來(lái)說(shuō),GPU48可僅在執(zhí)行核心的所有工作組和所有工作項(xiàng)之后才剔除指令。然而,在其它實(shí)例中,GPU48可以其它間隔執(zhí)行指令剔除。根據(jù)一些方面,GPU48可在執(zhí)行指令(以某一方式基于另一先前執(zhí)行的指令)之前的任何時(shí)間執(zhí)行指令剔除。
[0112]圖6是說(shuō)明根據(jù)本發(fā)明的方面的剔除指令的方法200的流程圖。在一些實(shí)例中,可由GPU(例如圖2中所示的GPU48)進(jìn)行方法200。因此,僅出于說(shuō)明的目的,將方法200描述為由圖2中所示的實(shí)例GPU48進(jìn)行。
[0113]根據(jù)本發(fā)明的方面,GPU48在執(zhí)行一個(gè)或一個(gè)以上指令之后執(zhí)行指令剔除。GPU48最初從例如主機(jī)處理器(例如圖1中所示的主機(jī)處理器24)接收一個(gè)或一個(gè)以上指令。在接收到例如第一工作項(xiàng)之后,GPU48執(zhí)行所述第一工作項(xiàng)(204)。在一些實(shí)例中,GPU48可通過(guò)用定序器模塊72將第一工作項(xiàng)分配到SP84而執(zhí)行所述工作項(xiàng)。SP84可接著通過(guò)建構(gòu)一個(gè)或一個(gè)以上硬件線(xiàn)程且將所述硬件線(xiàn)程分配到ALU92用于執(zhí)行而執(zhí)行所述工作項(xiàng)。
[0114]在已執(zhí)行第一工作項(xiàng)之后,GPU48產(chǎn)生一個(gè)或一個(gè)以上剔除值(208)。所述剔除緩沖器值可表示所執(zhí)行工作項(xiàng)的特性。在一些實(shí)例中,所述特性可用以確定與和第一工作項(xiàng)相同的輸入數(shù)據(jù)相關(guān)聯(lián)的后續(xù)工作項(xiàng)是相關(guān)還是無(wú)關(guān)。再者,如果工作項(xiàng)不使指令并入的應(yīng)用程序的目標(biāo)或目的有進(jìn)展,則所述工作項(xiàng)可被視為無(wú)關(guān)。舉例來(lái)說(shuō),在圖像處理上下文(例如相對(duì)于圖5A到5C描述的面部檢測(cè)實(shí)例)中,如果工作項(xiàng)不使識(shí)別圖像中的面部的目的有進(jìn)展,則所述工作項(xiàng)可被視為無(wú)關(guān)。
[0115]在一個(gè)實(shí)例中,剔除緩沖器值可為表示后續(xù)工作項(xiàng)是相關(guān)還是無(wú)關(guān)的單個(gè)二進(jìn)制值。在其它實(shí)例中,可針對(duì)單個(gè)工作項(xiàng)存儲(chǔ)一個(gè)以上剔除緩沖器值。舉例來(lái)說(shuō),可針對(duì)單個(gè)工作項(xiàng)存儲(chǔ)一個(gè)以上剔除緩沖器值,其中每一剔除緩沖器值對(duì)應(yīng)于所執(zhí)行工作項(xiàng)的不同特性。在非限制性圖像處理實(shí)例中,GPU48可對(duì)像素?cái)?shù)據(jù)執(zhí)行工作項(xiàng)以確定像素?cái)?shù)據(jù)的紅綠藍(lán)(RGB)特性。因此,可存儲(chǔ)對(duì)應(yīng)于所執(zhí)行工作項(xiàng)的紅、綠和藍(lán)分量的三個(gè)剔除緩沖器值。在此實(shí)例中,GPU48和剔除模塊80可基于存儲(chǔ)在剔除緩沖器76中的值中的任一者剔除工作項(xiàng)。在產(chǎn)生剔除緩沖器值之后,GPU48可用一個(gè)或一個(gè)以上剔除值填入例如剔除緩沖器76等緩沖器(212)。
[0116]GPU48接著接收另一工作項(xiàng)(216)。在一些實(shí)例中,第二工作項(xiàng)取決于第一工作項(xiàng),且與和第一工作項(xiàng)相同的輸入數(shù)據(jù)相關(guān)聯(lián)。舉例來(lái)說(shuō),僅當(dāng)?shù)谝还ぷ黜?xiàng)的結(jié)果評(píng)估為某一預(yù)定值或多個(gè)預(yù)定值中的一者時(shí),第二工作項(xiàng)才可能相關(guān)。在接收到第二工作項(xiàng)之后,GPU48可即刻分析與第二工作項(xiàng)相關(guān)聯(lián)的剔除緩沖器值(220)。根據(jù)一些方面,GPU48為剔除緩沖器值編索引,使得GPU48可識(shí)別出第二工作項(xiàng)對(duì)應(yīng)于相同輸入數(shù)據(jù)且取決于第一工作項(xiàng)。因此,GPU48可基于剔除緩沖器值確定是否執(zhí)行所述第二工作項(xiàng)(224)。
[0117]根據(jù)一些實(shí)例,GPU48可在GPU48基于剔除緩沖器值確定第二工作項(xiàng)相關(guān)的情況下執(zhí)行所述第二工作項(xiàng)(228)。在執(zhí)行所述第二工作項(xiàng)之后,GPU48可開(kāi)始通過(guò)產(chǎn)生表示第二工作項(xiàng)的結(jié)果的特性的剔除值(步驟208)而重復(fù)所述過(guò)程?;蛘?,GPU48可在GPU48基于剔除緩沖器值確定第二工作項(xiàng)無(wú)關(guān)的情況下不執(zhí)行第二工作項(xiàng),且可丟棄所述第二工作項(xiàng)(232)。如果GPU48不執(zhí)行第二工作項(xiàng),則GPU48可直接進(jìn)行到接收下一工作項(xiàng)(216)。
[0118]圖6的方法描述依據(jù)工作項(xiàng)的指令剔除。舉例來(lái)說(shuō),工作項(xiàng)描述為個(gè)別地執(zhí)行,剔除值描述為個(gè)別地產(chǎn)生,等。然而,應(yīng)理解,實(shí)際上,GPU可并行地執(zhí)行一個(gè)以上指令。根據(jù),可實(shí)質(zhì)上同時(shí)將一個(gè)以上值寫(xiě)入到剔除緩沖器76。此外,GPU可實(shí)質(zhì)上同時(shí)分析一個(gè)以上剔除緩沖器值(因其涉及新指令)。如相對(duì)于圖5A到5C所描述,在一些實(shí)例中,GPU48可在執(zhí)行某一數(shù)目的指令之后(例如,在執(zhí)行指令的核心)之后執(zhí)行指令剔除,且可依據(jù)個(gè)別工作項(xiàng)或群組(例如,工作組)執(zhí)行指令剔除。
[0119]圖7是說(shuō)明根據(jù)本發(fā)明的方面的可經(jīng)實(shí)施以剔除指令的指令流250的流程圖。在一些實(shí)例中,指令流250可由例如圖2中所示的GPU48等GPU實(shí)施。因此,僅出于說(shuō)明的目的,將指令流250描述為由圖2中所示的實(shí)例GPU48實(shí)施。圖7依據(jù)工作組和工作項(xiàng)兩者展示指令剔除。然而,應(yīng)理解,例如GPU48等GPU可僅依據(jù)工作組或僅依據(jù)工作項(xiàng)執(zhí)行指令剔除。
[0120]根據(jù)本發(fā)明的方面,GPU48接收指令,且將所述指令組織成一個(gè)或一個(gè)以上工作組(254)。在一些實(shí)例中,GPU48可將指令組織成一個(gè)或一個(gè)以上工作組網(wǎng)格,例如圖4中所示的工作組網(wǎng)格。在已將指令組織成工作組之后,GPU48執(zhí)行工作組剔除(258)。舉例來(lái)說(shuō),GPU48可通過(guò)分析存儲(chǔ)在剔除緩沖器76中的值且使所述值與當(dāng)前工作組的組相關(guān)來(lái)執(zhí)行工作組剔除。GPU48可剔除GPU48識(shí)別為完全由無(wú)關(guān)指令組成的任何工作組。在剔除工作組之后,GPU48可設(shè)置用于執(zhí)行的工作組(262)。舉例來(lái)說(shuō),GPU48可將剩余工作組重新組織成允許將工作組分配到SP84的配置。
[0121 ] 在一些實(shí)例中,GPU48接著執(zhí)行工作項(xiàng)剔除(266)。GPU48可依據(jù)工作組執(zhí)行工作項(xiàng)剔除。舉例來(lái)說(shuō),GPU48可分析存儲(chǔ)在剔除緩沖器76中的值,且使所述值與工作組的工作項(xiàng)相關(guān),一次一個(gè)工作組。GPU48可剔除GPU識(shí)別為無(wú)關(guān)(例如,根據(jù)剔除緩沖器值)的任何工作項(xiàng)。在剔除工作項(xiàng)之后,GPU48可設(shè)置用于執(zhí)行的工作項(xiàng)(270)。舉例來(lái)說(shuō),GPU48可將剩余工作項(xiàng)重新組織成允許將工作組建置成線(xiàn)程且由SP84執(zhí)行的配置。
[0122]接下來(lái),GPU48可執(zhí)行一個(gè)或一個(gè)以上工作組和相關(guān)聯(lián)的工作項(xiàng)(274)。在執(zhí)行指令之后,GPU48可更新用于剔除后續(xù)工作組和工作項(xiàng)的值(278)。舉例來(lái)說(shuō),GPU48可用表示所執(zhí)行指令的結(jié)果的特性的值更新剔除緩沖器76。
[0123]本發(fā)明的技術(shù)大體上包含使用一個(gè)以上核心執(zhí)行用于處理輸入數(shù)據(jù)的應(yīng)用程序。在執(zhí)行第一核心的工作項(xiàng)和工作組之后,GPU可即刻設(shè)定表示第二核心的工作項(xiàng)和工作組是否相關(guān)的剔除緩沖器值。即,GPU可基于第一核心的結(jié)果設(shè)定剔除緩沖器值,所述剔除緩沖器值表示與第一核心的工作項(xiàng)和工作組中的每一者的相同輸入數(shù)據(jù)相關(guān)聯(lián)的第二核心的相應(yīng)工作項(xiàng)和工作組是否相關(guān)。因此,在執(zhí)行第一核心之后,GPU48可利用所述剔除緩沖器值來(lái)剔除第二核心中的無(wú)關(guān)工作項(xiàng)和工作組,使得不執(zhí)行所述無(wú)關(guān)工作項(xiàng)和工作組。
[0124]因此,本發(fā)明的方面大體上涉及指令剔除。應(yīng)理解,相對(duì)于上圖描述的實(shí)例和方面僅提供為實(shí)例。本發(fā)明的方面還涉及執(zhí)行指令剔除的其它方式。舉例來(lái)說(shuō),盡管將指令剔除描述為完全由GPU進(jìn)行,但在另一實(shí)例中,指令可由計(jì)算組件或裝置的組合來(lái)進(jìn)行。在一個(gè)實(shí)例中,例如圖2中所示的剔除模塊80和剔除緩沖器76等剔除模塊和剔除緩沖器可實(shí)施于在GPU外部的組件中。在此實(shí)例中,中央處理單元或主機(jī)處理器可存取剔除緩沖器,且在將指令提供到GPU之前實(shí)施指令剔除。
[0125]此外,應(yīng)理解,本發(fā)明的方面大體上涉及在無(wú)關(guān)工作項(xiàng)和工作組被執(zhí)行之前剔除無(wú)關(guān)工作項(xiàng)和工作組。如上所述,術(shù)語(yǔ)“工作項(xiàng)”大體上描述界定用于處理輸入數(shù)據(jù)的功能的一個(gè)或一個(gè)以上指令,其可包含一個(gè)或一個(gè)以上個(gè)別指令?!肮ぷ黜?xiàng)”在一些架構(gòu)中還可稱(chēng)為“線(xiàn)程”。此外,應(yīng)理解,術(shù)語(yǔ)“工作組”大體上是指工作項(xiàng)的預(yù)定義群組?!肮ぷ鹘M”在一些架構(gòu)中還可稱(chēng)為“線(xiàn)程塊”。[0126]在一個(gè)或一個(gè)以上實(shí)例中,所描述的功能可以硬件、在硬件上執(zhí)行的軟件、在硬件上執(zhí)行的固件或其任何組合來(lái)實(shí)施。在一些實(shí)例中,存儲(chǔ)在計(jì)算機(jī)可讀媒體上的指令可致使硬件組件執(zhí)行上文所描述的其相應(yīng)功能。計(jì)算機(jī)可讀媒體可包含計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)媒體。數(shù)據(jù)存儲(chǔ)媒體可為可由一個(gè)或一個(gè)以上計(jì)算機(jī)或一個(gè)或一個(gè)以上處理器存取以檢索用于實(shí)施本發(fā)明中描述的技術(shù)的指令、代碼和/或數(shù)據(jù)結(jié)構(gòu)的任何可用的媒體。借助于實(shí)例而非限制,此些計(jì)算機(jī)可讀媒體可包括RAM、ROM、EEPROM、CD-ROM或其它光盤(pán)存儲(chǔ)裝置、磁盤(pán)存儲(chǔ)裝置或其它磁性存儲(chǔ)裝置、快閃記憶體,或可用以攜載或存儲(chǔ)呈指令或數(shù)據(jù)結(jié)構(gòu)的形式且可由計(jì)算機(jī)存取的所需程序代碼的任何其它媒體。上述各項(xiàng)的組合也應(yīng)包含在計(jì)算機(jī)可讀媒體的范圍內(nèi)。
[0127]代碼可由一個(gè)或一個(gè)以上處理器執(zhí)行,所述一個(gè)或一個(gè)以上處理器例如一個(gè)或一個(gè)以上DSP、通用微處理器、ASIC、FPGA,或其它等效集成或離散邏輯電路。因此,術(shù)語(yǔ)“處理器”在本文中使用時(shí)可指前文結(jié)構(gòu)或適合于實(shí)施本文中所描述的技術(shù)的任何其它結(jié)構(gòu)中的任一者。另外,在一些方面中,本文所述的功能性可在經(jīng)配置用于編碼和解碼的專(zhuān)用硬件和/或軟件模塊內(nèi)提供,或者并入在組合編解碼器中。并且,可將所述技術(shù)完全實(shí)施于一個(gè)或一個(gè)以上電路或邏輯元件中。
[0128]本發(fā)明的技術(shù)可在廣泛多種裝置或設(shè)備中實(shí)施,包括無(wú)線(xiàn)手持機(jī)、集成電路(IC)或一組IC(例如,芯片組)。本發(fā)明中描述各種組件、模塊或單元是為了強(qiáng)調(diào),其經(jīng)配置以執(zhí)行所揭示的技術(shù)的裝置的功能方面,但未必需要通過(guò)不同硬件單元實(shí)現(xiàn)。確切地說(shuō),如上所述,各種單元可由互操作式硬件單元(包含如上所述的一個(gè)或一個(gè)以上處理器)的集合結(jié)合適當(dāng)?shù)能浖?或固件來(lái)加以組合。
[0129]已描述本發(fā)明的各種實(shí)例和方面。這些以及其它實(shí)例和方面在所附權(quán)利要求書(shū)的范圍內(nèi)。
【權(quán)利要求】
1.一種用圖形處理單元GPU處理數(shù)據(jù)的方法,所述方法包括: 用所述GPU的著色器處理器執(zhí)行第一工作項(xiàng),其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令; 基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng),其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)的所述一個(gè)或一個(gè)以上指令相異的一個(gè)或一個(gè)以上指令。
2.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括基于所述確定從指令流移除所述第二工作項(xiàng)。
3.根據(jù)權(quán)利要求2所述的方法,其中從所述指令流移除所述第二工作項(xiàng)進(jìn)一步包括在調(diào)度所述第二工作項(xiàng)以由所述著色器處理器執(zhí)行之前移除所述第二工作項(xiàng)。
4.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括將基于所述第一工作項(xiàng)的所述結(jié)果的所述一個(gè)或一個(gè)以上值存儲(chǔ)在緩沖器中。
5.根據(jù)權(quán)利要求4所述的方法,其中確定是否執(zhí)行所述第二工作項(xiàng)進(jìn)一步包括讀取存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值。
6.根據(jù)權(quán)利要求4所述的方法,其進(jìn)一步包括: 用所述GPU的所述著色器處理器執(zhí)行第三工作項(xiàng),其中所述第三工作項(xiàng)包含用于處理所述輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令; 基于所述第三工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性; 基于所述第三工作項(xiàng)的所述結(jié)果更新存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第四工作項(xiàng)。
7.根據(jù)權(quán)利要求1所述的方法,其中所述一個(gè)或一個(gè)以上值指示所述第二工作項(xiàng)的結(jié)果將含有相關(guān)數(shù)據(jù),且在所述第二工作項(xiàng)的所述結(jié)果將不含有相關(guān)數(shù)據(jù)的情況下確定不執(zhí)行所述第二工作項(xiàng)。
8.根據(jù)權(quán)利要求1所述的方法,其中所述第一工作項(xiàng)與應(yīng)用程序的第一核心相關(guān)聯(lián),且所述第二工作項(xiàng)與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第一工作項(xiàng)和所述第二工作項(xiàng)經(jīng)配置以處理所述輸入數(shù)據(jù)。
9.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包括: 用所述GPU的所述著色器處理器執(zhí)行第一工作組,其中所述第一工作組與應(yīng)用程序的第一核心相關(guān)聯(lián),且其中所述第一工作組包括包含用于處理輸入數(shù)據(jù)的所述第一工作項(xiàng)的多個(gè)指令; 基于所述第一工作組的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作組,其中所述第二工作組與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第二工作組包括包含用于處理所述輸入數(shù)據(jù)的所述第二工作項(xiàng)的多個(gè)指令。
10.一種用圖形處理單元GPU處理數(shù)據(jù)的設(shè)備,所述設(shè)備包括: 著色器處理器,其經(jīng)配置以執(zhí)行包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令的第一工作項(xiàng),且基于所述第一指令的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 剔除模塊,其經(jīng)配置以基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行包含與所述第一工作項(xiàng)的所述一個(gè)或一個(gè)以上指令相異的一個(gè)或一個(gè)以上指令的第二工作項(xiàng)。
11.根據(jù)權(quán)利要求10所述的設(shè)備,其中所述剔除模塊進(jìn)一步經(jīng)配置以基于所述確定從指令流移除所述第二工作項(xiàng)。
12.根據(jù)權(quán)利要求11所述的設(shè)備,其中所述剔除模塊經(jīng)配置以在調(diào)度所述第二工作項(xiàng)以由所述著色器處理器執(zhí)行之前從所述指令流移除所述第二工作項(xiàng)。
13.根據(jù)權(quán)利要求10所述的設(shè)備,其進(jìn)一步包括剔除緩沖器,所述剔除緩沖器經(jīng)配置以基于所述第一工作項(xiàng)的所述結(jié)果存儲(chǔ)所述一個(gè)或一個(gè)以上值。
14.根據(jù)權(quán)利要求13所述的設(shè)備,其中所述剔除模塊經(jīng)配置以通過(guò)讀取存儲(chǔ)在所述剔除緩沖器中的所述一個(gè)或一個(gè)以上值來(lái)確定是否執(zhí)行所述第二工作項(xiàng)。
15.根據(jù)權(quán)利要求13所述的方法,其中所述著色器處理器進(jìn)一步經(jīng)配置以執(zhí)行第三工作項(xiàng),其中所述第三工作項(xiàng)包含一個(gè)或一個(gè)以上指令,所述一個(gè)或一個(gè)以上指令用于處理所述輸入數(shù)據(jù)以:基于所述第三工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及基于所述第三工作項(xiàng)的所述結(jié)果更新存儲(chǔ)在所述剔除緩沖器中的所述一個(gè)或一個(gè)以上值,且其中所述剔除模塊進(jìn)一步經(jīng)配置以基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第四工作項(xiàng)。
16.根據(jù)權(quán)利要求10所述的設(shè)備,其中所述一個(gè)或一個(gè)以上值指示所述第二工作項(xiàng)的結(jié)果是否將含有相關(guān)數(shù)據(jù),且其中所述剔除模塊經(jīng)配置以在所述第二工作項(xiàng)的所述結(jié)果將不含有相關(guān)數(shù)據(jù)的情況下確定不執(zhí)行所述第二工作項(xiàng)。
17.根據(jù)權(quán)利要求10所述的設(shè)備,其中所述第一工作項(xiàng)與應(yīng)用程序的第一核心相關(guān)聯(lián),且所述第二工作項(xiàng)與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第一工作項(xiàng)和所述第二工作項(xiàng)經(jīng)配置以處理所述輸入數(shù)據(jù)。
18.根據(jù)權(quán)利要求10所述的設(shè)備,其進(jìn)一步包括:與第一核心相關(guān)聯(lián)的第一工作組,其中所述第一工作組包括包含所述第一工作項(xiàng)的多個(gè)指令;以及與第二核心相關(guān)聯(lián)的第二工作組,其中所述第二工作組包括包含所述第二工作項(xiàng)的多個(gè)指令,且其中所述著色器處理器進(jìn)一步經(jīng)配置以執(zhí)行所述第一工作組且基于所述第一工作組的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性,且其中所述剔除模塊進(jìn)一步經(jīng)配置以基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行所述第二工作組。
19.根據(jù)權(quán)利要求10所述的設(shè)備,其中所述著色器處理器和剔除模塊包含在便攜式計(jì)算裝置中。
20.一種計(jì)算機(jī)可讀存儲(chǔ)媒體,所述計(jì)算機(jī)可讀存儲(chǔ)媒體編碼有用于致使計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器進(jìn)行以下操作的指令: 執(zhí)行第一工作項(xiàng),其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令; 基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng),其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)相異的一個(gè)或一個(gè)以上指令。
21.根據(jù)權(quán)利要求20所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其進(jìn)一步包括用于致使所述計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器基于所述確定從指令流移除所述第二工作項(xiàng)的指令。
22.根據(jù)權(quán)利要求21所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其中從所述指令流移除所述第二工作項(xiàng)進(jìn)一步包括在調(diào)度所述第二工作項(xiàng)以執(zhí)行之前移除所述第二工作項(xiàng)。
23.根據(jù)權(quán)利要求20所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其進(jìn)一步包括用于致使所述計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器將基于所述第一工作項(xiàng)的所述結(jié)果的所述一個(gè)或一個(gè)以上值存儲(chǔ)在緩沖器中的指令。
24.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其中確定是否執(zhí)行所述第二工作項(xiàng)進(jìn)一步包括讀取存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值。
25.根據(jù)權(quán)利要求23所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其進(jìn)一步包括用于致使所述計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器進(jìn)行以下操作的指令: 執(zhí)行第三指令,其中所述第三工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令; 基于所述第三工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性; 基于所述第三工作項(xiàng)的所述結(jié)果更新存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第四工作項(xiàng)。
26.根據(jù)權(quán)利要求20所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其中所述一個(gè)或一個(gè)以上值指示所述第二工作項(xiàng)的結(jié)果是否將含有相關(guān)數(shù)據(jù),且在所述第二工作項(xiàng)的所述結(jié)果將不含有相關(guān)數(shù)據(jù)的情況下確定不執(zhí)行所述第二工作項(xiàng)。
27.根據(jù)權(quán)利要求20所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其中所述第一工作項(xiàng)與應(yīng)用程序的第一核心相關(guān)聯(lián),且所述第二工作項(xiàng)與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第一工作項(xiàng)和所述第二工作項(xiàng)經(jīng)配置以處理所述輸入數(shù)據(jù)。
28.根據(jù)權(quán)利要求27所述的計(jì)算機(jī)可讀存儲(chǔ)媒體,其進(jìn)一步包括用于致使所述計(jì)算裝置的一個(gè)或一個(gè)以上可編程處理器進(jìn)行以下操作的指令: 用所述GPU的所述著色器處理器執(zhí)行第一工作組,其中所述第一工作組與應(yīng)用程序的第一核心相關(guān)聯(lián),且其中所述第一工作組包括包含用于處理輸入數(shù)據(jù)的所述第一工作項(xiàng)的多個(gè)指令; 基于所述第一工作組的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作組,其中所述第二工作組與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第二工作組包括包含用于處理所述輸入數(shù)據(jù)的所述第二工作項(xiàng)的多個(gè)指令。
29.一種用圖形處理單元GPU處理數(shù)據(jù)的設(shè)備,所述設(shè)備包括: 用于執(zhí)行第一工作項(xiàng)的裝置,其中所述第一工作項(xiàng)包含用于處理輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令;用于基于所述第一工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值的裝置,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 用于基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作項(xiàng)的裝置,其中所述第二工作項(xiàng)包含與用于處理所述輸入數(shù)據(jù)的所述第一工作項(xiàng)相異的一個(gè)或一個(gè)以上指令。
30.根據(jù)權(quán)利要求29所述的方法,其進(jìn)一步包括用于基于所述確定從指令流移除所述第二工作項(xiàng)的裝置。
31.根據(jù)權(quán)利要求30所述的方法,其中從所述指令流移除所述第二工作項(xiàng)進(jìn)一步包括在調(diào)度所述第二工作項(xiàng)以執(zhí)行之前移除所述第二工作項(xiàng)。
32.根據(jù)權(quán)利要求29所述的方法,其進(jìn)一步包括用于將基于所述第一工作項(xiàng)的所述結(jié)果的所述一個(gè)或一個(gè)以上值存儲(chǔ)在緩沖器中的裝置。
33.根據(jù)權(quán)利要求32所述的方法,其中確定是否執(zhí)行所述第二工作項(xiàng)進(jìn)一步包括讀取存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值。
34.根據(jù)權(quán)利要求32所述的方法,其進(jìn)一步包括: 用于執(zhí)行第三工作項(xiàng)的裝置,其中所述第三工作項(xiàng)包含用于處理所述輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令; 用于基于所述第三工作項(xiàng)的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值的裝置,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性; 用于基于所述第三工作項(xiàng)的所述結(jié)果更新存儲(chǔ)在所述緩沖器中的所述一個(gè)或一個(gè)以上值的裝置;以及 用于基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第四工作項(xiàng)的裝置,其中所述第四工作項(xiàng)包含用于處理所述輸入數(shù)據(jù)的一個(gè)或一個(gè)以上指令。
35.根據(jù)權(quán)利要求29所述的方法,其中所述一個(gè)或一個(gè)以上值指示所述第二工作項(xiàng)的結(jié)果是否將含有相關(guān)數(shù)據(jù),且在所述第二工作項(xiàng)的所述結(jié)果將不含有相關(guān)數(shù)據(jù)的情況下確定不執(zhí)行所述第二工作項(xiàng)。
36.根據(jù)權(quán)利要求29所述的方法,其中所述第一工作項(xiàng)與應(yīng)用程序的第一核心相關(guān)聯(lián),且所述第二工作項(xiàng)與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第一工作項(xiàng)和所述第二工作項(xiàng)經(jīng)配置以處理所述輸入數(shù)據(jù)。
37.根據(jù)權(quán)利要求29所述的方法,其進(jìn)一步包括: 用于用所述GPU的所述著色器處理器執(zhí)行第一工作組的裝置,其中所述第一工作組與應(yīng)用程序的第一核心相關(guān)聯(lián),且其中所述第一工作組包括包含用于處理輸入數(shù)據(jù)的所述第一工作項(xiàng)的多個(gè)指令; 用于基于所述第一工作組的結(jié)果產(chǎn)生一個(gè)或一個(gè)以上值的裝置,其中所述一個(gè)或一個(gè)以上值表示所述結(jié)果的一個(gè)或一個(gè)以上特性;以及 用于基于所述一個(gè)或一個(gè)以上值確定是否執(zhí)行第二工作組的裝置,其中所述第二工作組與所述應(yīng)用程序的第二核心相關(guān)聯(lián),且其中所述第二工作組包括包含用于處理所述輸入數(shù)據(jù)的所述第二工作項(xiàng)的多個(gè)指令。
【文檔編號(hào)】G06F9/48GK103649917SQ201180072234
【公開(kāi)日】2014年3月19日 申請(qǐng)日期:2011年12月13日 優(yōu)先權(quán)日:2011年7月12日
【發(fā)明者】尤卡·佩卡·阿爾沃 申請(qǐng)人:高通股份有限公司