用于圖形并行處理單元的緩沖器管理的制作方法
【專利摘要】所述技術大體涉及一種用于并行以及以管線方式執(zhí)行圖形數(shù)據(jù)處理操作的方法。在例如GPU(26)的著色器處理器的第一單元(28A)上執(zhí)行第一線程,且在第二單元(28N)上并行執(zhí)行第二線程。通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)接著被所述第二單元執(zhí)行所述第二線程消耗。包含所述GPU的IC(16)內(nèi)的管理單元(18)從所述第一單元接收將由此產(chǎn)生的所述數(shù)據(jù)存儲到所述IC外部的全局存儲器中的緩沖器(22A-22N)中的請求,所述緩沖器包括FIFO緩沖器,其一實例為環(huán)形緩沖器;且確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將被存儲的位置。在從所述第二單元接收到檢索通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)的請求后,所述管理單元即刻確定所述第一線程的所述數(shù)據(jù)是否可用于檢索以供由所述第二線程消耗。
【專利說明】用于圖形并行處理單元的緩沖器管理
[0001]本申請案主張2012年I月27日申請的第61/591,733號美國臨時申請案的權益,所述臨時申請案的全部內(nèi)容全文以引用的方式并入本文中。
【技術領域】
[0002]本發(fā)明涉及存儲器存取管理,且更特定來說涉及圖形處理裝置(GPU)中的存儲器存取管理。
【背景技術】
[0003]圖形處理單元(GPU)正用于除圖形處理以外的用途。舉例來說,非圖形相關應用可通過利用GPU的高度并行性而在增加的速度下執(zhí)行。這已產(chǎn)生提供額外非圖形相關處理功能性且稱為通用GPU(GPGPU)的GPU。舉例來說,GPGPU包含一個或一個以上著色器核心,且著色器核心經(jīng)配置以執(zhí)行例如圖形相關應用和非圖形相關應用等應用。
【發(fā)明內(nèi)容】
[0004]一般來說,本發(fā)明涉及用于利用圖形處理單元(GPU)管理緩沖器的技術,所述緩沖器在全局存儲器中且存儲GPU的數(shù)據(jù)。舉例來說,包含GPU的集成電路(IC)芯片包含管線管理單元。管線管理單元可經(jīng)配置以將一個或一個以上緩沖器的狀態(tài)信息維持在全局存儲器中。當在GPU上執(zhí)行的應用是為存取全局存儲器中的緩沖器時,全局存儲器中的緩沖器的狀態(tài)信息可在IC芯片內(nèi)部可用。以此方式,GPU不需要執(zhí)行芯片外存儲器存取來確定全局存儲器中的緩沖器的狀態(tài)信息。
[0005]在一個實例中,本發(fā)明描述一種用于以管線方式執(zhí)行數(shù)據(jù)處理操作的方法。所述方法包含在圖形處理單元(GPU)的著色器處理器的第一可編程計算單元上執(zhí)行第一線程;以及在GPU的著色器處理器的第二可編程計算單元上執(zhí)行第二線程。所述方法還包含以包含GPU的集成電路(IC)內(nèi)的管理單元接收來自第一可編程計算單元的將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲到IC外部的全局存儲器中的緩沖器中的請求。在此實例中,通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)將被第二可編程計算單元執(zhí)行第二線程消耗。并且,在此實例中,緩沖器包括先進先出(FIFO)緩沖器和環(huán)形緩沖器的一者。所述方法還包含以管理單元確定緩沖器內(nèi)待存儲通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)的位置;以及利用IC將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定位置中。
[0006]在一個實例中,本發(fā)明描述一種設備。所述設備包含包括緩沖器的全局存儲器。在此實例中,緩沖器包括先進先出(FIFO)緩沖器和環(huán)形緩沖器的一者。所述設備還包含集成電路(1C),其包含圖形處理單元(GPU)和管理單元。GPU包含經(jīng)配置以執(zhí)行第一線程的第一可編程計算單元,和經(jīng)配置以執(zhí)行第二線程的第二可編程計算單元。管理單元經(jīng)配置以接收來自第一可編程計算單元的將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲到全局存儲器中的緩沖器中的請求。在此實例中,通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)將被第二可編程計算單元執(zhí)行第二線程消耗。管理單元還經(jīng)配置以確定緩沖器內(nèi)待存儲通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)的位置。在此實例中,IC經(jīng)配置以將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定位置中。
[0007]在一個實例中,本發(fā)明描述一種設備。所述設備包含全局存儲器和集成電路(IC)。全局存儲器包含緩沖器。在此實例中,緩沖器包括先進先出(FIFO)緩沖器和環(huán)形緩沖器的一者。IC包含圖形處理單元(GPU),其包括用于執(zhí)行第一線程的裝置和用于執(zhí)行第二線程的裝置。IC還包含用于接收來自所述用于執(zhí)行第一線程的裝置的將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲到全局存儲器中的緩沖器中的請求。在此實例中,通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)將被所述用于執(zhí)行第二線程的裝置消耗。IC還包含用于確定緩沖器內(nèi)待存儲由所述用于執(zhí)行第一線程的裝置產(chǎn)生的數(shù)據(jù)的位置,以及用于將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定位置中的裝置。
[0008]在一個實例中,本發(fā)明描述一種上面存儲有指令的計算機可讀存儲媒體,所述指令當執(zhí)行時致使一個或一個以上處理器在圖形處理單元(GPU)的著色器處理器的第一可編程計算單元上執(zhí)行第一線程,且在GPU的著色器處理器的第二可編程計算單元上執(zhí)行第二線程。所述指令還致使所述一個或一個以上處理器利用包含GPU的集成電路(IC)內(nèi)的管理單元接收來自第一可編程計算單元的將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲到IC外部的全局存儲器中的緩沖器中的請求。在此實例中,通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)將被第二可編程計算單元執(zhí)行第二線程消耗。并且,在此實例中,緩沖器包括先進先出(FIFO)緩沖器和環(huán)形緩沖器的一者。所述方法還致使所述一個或一個以上處理器以管理單元確定緩沖器內(nèi)待存儲通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)的位置,且利用IC將通過執(zhí)行第一線程而產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定位置中。
[0009]一個或一個以上實例的細節(jié)陳述于附圖和以下描述中。其它特征、目標和優(yōu)點將從描述內(nèi)容和附圖以及從權利要求書中顯而易見。
【專利附圖】
【附圖說明】
[0010]圖1是說明根據(jù)本發(fā)明描述的一個或一個以上實例的裝置的實例的框圖。
[0011]圖2是進一步詳細說明圖形處理單元(GPU)和全局存儲器的框圖。
[0012]圖3是說明根據(jù)本發(fā)明描述的一個或一個以上實例的實例技術的流程圖。
[0013]圖4是說明根據(jù)本發(fā)明描述的一個或一個以上實例的另一實例技術的流程圖。
[0014]圖5是進一步詳細說明圖1的裝置的框圖。
【具體實施方式】
[0015]圖形處理單元(GPU)可包含經(jīng)配置以執(zhí)行一個或一個以上應用的著色器處理器。這些應用的實例包含例如頂點著色器、外殼著色器、片段著色器、幾何著色器和與圖形處理有關的其它此類應用等著色器程序。另外,一些應用開發(fā)者可認為利用GPU的高度并行性且在GPU上執(zhí)行非圖形相關應用是有益的。舉例來說,GPU提供的處理并行性可適于執(zhí)行并行矩陣操作,即使當矩陣操作與圖形處理無關時也如此。非圖形相關應用的其它實例包含與流體動力學或線性代數(shù)有關的技術,其中并行操作的快速執(zhí)行可能是有益的。非圖形相關應用還可在著色器處理器上執(zhí)行。
[0016]能夠執(zhí)行此類非圖形相關應用的GPU可視為通用GPU(GPU)。舉例來說,當GPU正執(zhí)行非圖形相關應用時,GPU正充當GPGPU。幾乎所有GPU可經(jīng)配置以充當GPGPU。
[0017]出于說明的目的,本發(fā)明描述相對于GPU充當GPGPU的技術。然而,所述技術不限于其中GPU充當GPGPU (即,執(zhí)行非圖形相關應用)的例子,且所述技術還可應用于其中GPU執(zhí)行圖形相關應用的例子。此外,本發(fā)明描述的技術可由例如中央處理單元(CPU)、加速器或任何其它定制裝置等任何類型的處理單元實施。雖然所述技術相對于GPU描述,但應理解,所述技術可擴展到其它類型的處理單元。
[0018]GPU內(nèi)的著色器處理器可包含多個著色器核心(也稱為可編程計算單元,以指示這些核心可執(zhí)行針對圖形和非圖形相關應用兩者的指令)??删幊逃嬎銌卧拿恳徽呖砂?jīng)保留用于待由所述可編程計算單元執(zhí)行的指令以及通過執(zhí)行所述指令產(chǎn)生的數(shù)據(jù)(例如,線程的執(zhí)行期間產(chǎn)生的中間結果)的本地存儲器??删幊逃嬎銌卧谋镜卮鎯ζ骺捎善渌删幊逃嬎銌卧嫒?。在一些例子中,待在GPU上執(zhí)行的不同應用可由不同可編程計算單元執(zhí)行。
[0019]在本發(fā)明描述的技術中,圖形相關應用稱為著色器,且非圖形相關應用稱為內(nèi)核。舉例來說,著色器(即,圖形相關應用)的實例包含(但不限于)頂點著色器、片段著色器和幾何著色器。內(nèi)核(即,非圖形相關應用)的實例包含用以執(zhí)行矩陣操作、流體動力學、圖像處理操作、視頻處理操作等的應用。
[0020]此外,內(nèi)核不需要一定限于僅由GPU執(zhí)行的應用,且還包含GPU的固定功能單元(即,非可編程單元)。僅出于說明的目的,本發(fā)明描述的技術相對于內(nèi)核為在GPU上執(zhí)行的應用而描述。舉例來說,所述技術相對于在GPU的著色器處理器上執(zhí)行非圖形相關應用使得GPU充當GPGPU而描述。
[0021]內(nèi)核可包含多個工作組、任務或線程(其全部在本發(fā)明中同義使用)。舉例來說,線程可為內(nèi)核的可獨立于內(nèi)核的其它線程執(zhí)行的指令集。在一些實例中,為執(zhí)行內(nèi)核,可編程計算單元的一者或一者以上可各自執(zhí)行內(nèi)核的一個或一個以上線程。舉例來說,第一可編程計算單元可執(zhí)行內(nèi)核的第一線程,且第二可編程計算單元可執(zhí)行同一內(nèi)核的第二線程。在一些實例中,一個可編程計算單元可執(zhí)行一個內(nèi)核的一個或一個以上線程,而另一可編程計算單元執(zhí)行另一內(nèi)核的一個或一個以上線程。在一些實例中,兩者的組合是可能的(即,一些可編程計算單元正執(zhí)行同一內(nèi)核的不同線程,而一些其它可編程計算單元正執(zhí)行不同內(nèi)核的線程)。
[0022]一般來說,GPU可經(jīng)配置以實施單程序多數(shù)據(jù)(SPMD)編程模型。在SPMD編程模型中,GPU可在多個可編程計算單元上執(zhí)行內(nèi)核(例如,作為線程),其中每一可編程計算單元對其自身數(shù)據(jù)執(zhí)行功能。并且,在SPMD編程模型中,可編程計算單元包含相應程序計數(shù)器,其指示正由可編程計算單元執(zhí)行的當前指令。
[0023]雖然GPU提供處理的高度并行性,但GPU可能不較好地適于以管線方式執(zhí)行內(nèi)核。以管線方式執(zhí)行內(nèi)核意味著執(zhí)行內(nèi)核使得一個內(nèi)核產(chǎn)生的數(shù)據(jù)由另一內(nèi)核消耗。作為另一實例,以管線方式執(zhí)行內(nèi)核意味著執(zhí)行內(nèi)核的產(chǎn)生待由同一內(nèi)核的另一線程消耗的數(shù)據(jù)的線程。在本發(fā)明中,產(chǎn)生所述數(shù)據(jù)的線程可稱為產(chǎn)生者線程,且接收所述數(shù)據(jù)的線程可稱為消耗者線程。
[0024]在一些實例中,產(chǎn)生者線程和消耗者線程可為同一內(nèi)核的線程。在一些實例中,產(chǎn)生者線程和消耗者線程可為不同內(nèi)核的線程,在這些實例中,包含產(chǎn)生者線程的內(nèi)核可稱為產(chǎn)生者內(nèi)核,且包含消耗者線程的內(nèi)核可稱為消耗者內(nèi)核。
[0025]舉例來說,以管線方式執(zhí)行內(nèi)核可預見為第一線程(例如,內(nèi)核的產(chǎn)生者線程)產(chǎn)生由第二線程(例如,同一內(nèi)核或不同內(nèi)核的消耗者線程)消耗的數(shù)據(jù)。此第二線程(其為第一線程的消耗者)可為第三線程的產(chǎn)生者線程(例如,第二線程產(chǎn)生由第三線程消耗的數(shù)據(jù))。第三線程可為不同于包含第一和第二線程的內(nèi)核的內(nèi)核的線程,或可為包含第一和第二線程的內(nèi)核的一者的線程。在此實例中,第一、第二和第三線程可預見為形成處理管線。
[0026]以管線方式執(zhí)行內(nèi)核不應解釋為需要串行(例如,逐個)執(zhí)行內(nèi)核或線程。舉例來說,在以上實例中,有可能GPU并行(例如,同時)執(zhí)行第一、第二和第三線程的兩者或兩者以上。然而,也有可能GPU串行執(zhí)行線程,且仍視為以管線方式執(zhí)行內(nèi)核。
[0027]執(zhí)行內(nèi)核的產(chǎn)生者線程的可編程計算單元可需要將產(chǎn)生的數(shù)據(jù)輸出到全局存儲器(即,在包含GPU的集成電路(IC)外部的芯片外系統(tǒng)存儲器),其中全局存儲器可例如經(jīng)由系統(tǒng)總線存取。執(zhí)行同一內(nèi)核或不同內(nèi)核的消耗者線程的另一可編程計算單元可需要從全局存儲器接收所產(chǎn)生的數(shù)據(jù)。如更詳細描述,對于現(xiàn)有GPU,全局存儲器的管理可計算、時間和/或功率低效,從而導致當以管線方式執(zhí)行內(nèi)核時較差的性能。
[0028]本發(fā)明描述用于對全局存儲器的計算、時間和功率高效管理的技術。如更詳細描述,包含GPU的集成電路(IC)可包含管線管理單元(PMU)?;蛘?,GPU本身可包含PMU。PMU可經(jīng)配置以管理存儲待消耗的所產(chǎn)生的數(shù)據(jù)的全局存儲器的狀態(tài)信息。舉例來說,處理器或GPU本身可保留全局存儲器內(nèi)由可編程計算單元產(chǎn)生的數(shù)據(jù)將存儲在全局存儲器中的位置。全局存儲器內(nèi)這些所保留的位置可視為多個緩沖器。在一些實例中,所述多個緩沖器可形成環(huán)形緩沖器或先進先出(FIFO)緩沖器。環(huán)形緩沖器可視為FIFO緩沖器的一個實例。
[0029]PMU可在IC或GPU內(nèi)部(例如,在芯片上內(nèi)部高速緩沖存儲器中)存儲信息,所述信息指示芯片外全局存儲器中的緩沖器的狀態(tài)信息。作為一個實例,PMU可存儲指示全局存儲器中的緩沖器的開始地址和結束地址的信息。作為另一實例,PMU可存儲所述多個緩沖器內(nèi)待存儲所產(chǎn)生的數(shù)據(jù)的緩沖器的地址,以及所述多個緩沖器內(nèi)待讀取待消耗的數(shù)據(jù)的緩沖器的地址。作為又一實例,PMU可存儲指示產(chǎn)生者內(nèi)核是否完成數(shù)據(jù)的產(chǎn)生使得正執(zhí)行消耗者內(nèi)核的需要所述數(shù)據(jù)的線程的可編程計算單元可繼續(xù)執(zhí)行消耗者內(nèi)核的不需要所述數(shù)據(jù)的其它線程的信息。
[0030]在本發(fā)明描述的技術中,PMU可接收將產(chǎn)生者線程產(chǎn)生的數(shù)據(jù)存儲到緩沖器中的請求,且可接收從緩沖器檢索產(chǎn)生者線程產(chǎn)生的數(shù)據(jù)應該消耗者線程消耗的請求。PMU可基于緩沖器的所存儲的狀態(tài)信息確定緩沖器內(nèi)待存儲通過執(zhí)行產(chǎn)生者線程而產(chǎn)生的數(shù)據(jù)的位置,且基于緩沖器的所存儲的狀態(tài)信息確定緩沖器內(nèi)待從其檢索待由消耗者內(nèi)核消耗的數(shù)據(jù)的位置。
[0031]通過以存儲在包含GPU的IC內(nèi)部或GPU本身內(nèi)部的信息管理全局存儲器的狀態(tài)信息,本發(fā)明描述的技術可使GPU需要存取全局存儲器的次數(shù)最小化。舉例來說,PMU可不需要通過存取包含GPU的IC外部的此信息來確定待存儲或檢索數(shù)據(jù)的地址。使GPU需要存取全局存儲器的次數(shù)最小化可減少功率消耗,減小系統(tǒng)總線帶寬負載和駐留等待時間。
[0032]此外,如下文更詳細描述,在現(xiàn)有GPU中,內(nèi)核需要包含管理全局存儲器的指令。GI3U可浪費時鐘循環(huán)執(zhí)行此類全局存儲器管理指令,這可能計算上低效。利用PMU管理全局存儲器的狀態(tài)信息,內(nèi)核可不需要包含全局存儲器管理指令,這導致不太復雜的內(nèi)核指令,以及較少需要執(zhí)行的內(nèi)核指令。以此方式,本發(fā)明描述的技術可促進計算效率。
[0033]圖1是說明根據(jù)本發(fā)明描述的一個或一個以上實例的裝置的實例的框圖。舉例來說,圖1說明裝置10。裝置10的實例包含(但不限于)例如媒體播放器等視頻裝置、機頂盒、例如移動電話等無線手持機、個人數(shù)字助理(PDA)、臺式計算機、膝上型計算機、游戲控制臺、視頻會議單元、平板計算裝置等。裝置10可包含除圖1中說明的那些組件以外的組件。
[0034]如所說明,裝置10包含集成電路(IC) 12和全局存儲器20。全局存儲器20可視為針對裝置10的存儲器。全局存儲器20可包括一個或一個以上計算機可讀存儲媒體。全局存儲器20的實例包含(但不限于)隨機存取存儲器(RAM)、電可擦除可編程只讀存儲器(EEPROM)、快閃存儲器,或可用于攜載或存儲呈指令和/或數(shù)據(jù)結構的形式的所要程序代碼且可由計算機或處理器存取的任何其它媒體。
[0035]在一些方面中,全局存儲器20可包含致使處理器14和/或GPU16執(zhí)行本發(fā)明中歸于處理器14和GPU16的功能的指令。因此,全局存儲器20可為上面存儲有指令的計算機可讀存儲媒體,所述指令當執(zhí)行時致使一個或一個以上處理器(例如,處理器14和GPU16)執(zhí)行各種功能。
[0036]全局存儲器20可在一些實例中視為非暫時性存儲媒體。術語“非暫時性”可指示存儲媒體不體現(xiàn)在載波或所傳播信號中。然而,術語“非暫時性”不應解釋為表示全局存儲器20不可移動或其內(nèi)容為靜態(tài)的。作為一個實例,全局存儲器20可從裝置10移除,且移動到另一裝置。作為另一實例,全局存儲器(大體類似于全局存儲器20)可插入到裝置10中。在某些實例中,非暫時性存儲媒體可存儲可隨時間改變的數(shù)據(jù)(例如,在RAM中)。
[0037]IC12包含處理器14、圖形處理單元(GPU) 16和管線管理單元(PMU) 18。IC12可為容納或形成處理器14、GPU16和PMU18的任何類型的集成電路。舉例來說,IC12可視為芯片封裝內(nèi)的處理芯片。PMU18可為形成IC12的一部分的硬件單元或GPU16內(nèi)的硬件。有可能PMU18為在IC12內(nèi)或GPU16內(nèi)的硬件上執(zhí)行的軟件。出于說明和描述的目的,相對于PMU18為硬件單元描述所述技術。
[0038]盡管處理器14、GPU16和PMU18說明為單一 IC12的一部分,但本發(fā)明的方面不限于此。在一些實例中,處理器14和GPU16可容納在不同集成電路(即,不同芯片封裝)中。在這些實例中,PMU18可容納在與GPU16相同的集成電路中。在一些實例中,PMU18可形成為GPU16的一部分。作為一個實例,處理器14和GPU16可容納在同一集成電路(B卩,同一芯片封裝)中,且PMU18可形成在GPU16內(nèi)。作為另一實例,處理器14和GPU16可容納在不同集成電路(即,不同芯片封裝)中,且PMU18可形成在GPU16內(nèi)。
[0039]處理器14、GPU16和PMU18的實例包含(但不限于)數(shù)字信號處理器(DSP)、通用微處理器、專用集成電路(ASIC)、現(xiàn)場可編程邏輯陣列(FPGA),或其它等效集成或離散邏輯電路。在一些實例中,GPU16和PMU18可為包含集成和/或離散邏輯電路的專門硬件,所述集成和/或離散邏輯電路向GPU16提供適于圖形處理的高度并行處理能力且向PMU18提供管理全局存儲器20,如下文更詳細描述。在一些例子中,GPU16還可包含通用處理,且當實施通用處理任務(即,非圖形相關任務)時可稱為通用GPU(GPGPU)。
[0040]處理器14 (有時稱為主機)可為裝置10的中央處理單元(CPU)。處理器14可執(zhí)行各種類型的應用。所述應用的實例包含瀏覽器、電子閱讀器、電子郵件應用、電子表格、視頻游戲、視頻重放、音頻重放、文字處理,或產(chǎn)生可觀看對象以供顯示的其它應用,或任何其它類型的應用。全局存儲器20可存儲用于執(zhí)行所述一個或一個以上應用的指令。
[0041]在一些實例中,處理器14可將處理任務卸載到GPU16,例如需要高度并行操作的任務。作為一個實例,圖形處理需要高度并行操作,且處理器14可將此類圖形處理任務卸載到GPU16。在一些實例中,處理器14可將與圖形處理無關的任務卸載到GPU16。舉例來說,矩陣操作需要并行操作,且GPU16可與處理器14相比較好地適于實施此類操作。
[0042]為實施任務,GPU16可經(jīng)配置以執(zhí)行一個或一個以上應用。舉例來說,對于圖形相關處理,GPU16可執(zhí)行例如頂點著色器、片段著色器和幾何著色器等應用。對于非圖形相關處理,GPU16可執(zhí)行經(jīng)設計用于此處理的應用(例如,用于實施矩陣操作的應用或用于流體動力學的應用)。對于任一實例(例如,圖形相關處理或非圖形相關處理),處理器14可指令GPU16執(zhí)行所述一個或一個以上應用。
[0043]處理器14可根據(jù)特定應用處理接口(API)與GPU16通信。舉例來說,處理器14可將指令發(fā)射到GPU16,例如指示GPU16利用API執(zhí)行一個或一個以上應用的指令。此類 API 的實例包含Microsoft?I的 DirectX? AP1、Khronos 組的 OpenGL?,和 Khronos 組的OpcnCC:然而,本發(fā)明的方面不限于DirectX、OpenGL或OpenCL API,且可擴展到已開發(fā)、
當前正開打或將來即將開發(fā)的其它類型的API。此外,本發(fā)明描述的技術不需要根據(jù)API起作用,且處理器14和GPU16可利用任何技術來通信。
[0044]作為一個實例,對于圖形相關應用,處理器14可使用OpenGL API與GPU16通信。對于非圖形相關應用,處理器14可使用OpenCL API與GPU16通信。再次,本發(fā)明描述的技術不一定需要處理器14使用OpenGL和/或OpenCL API與GPU16通信。
[0045]GPU16將執(zhí)行的圖形相關應用可稱為著色器,且GPU16將執(zhí)行的非圖形相關應用可稱為內(nèi)核。舉例來說,全局存儲器20可存儲著色器和內(nèi)核的指令,且在處理器14上執(zhí)行的編譯器可將著色器和內(nèi)核的指令轉換為目標代碼以供在GPU16上執(zhí)行。作為另一實例,全局存儲器20可存儲GPU16檢索和執(zhí)行的著色器和內(nèi)核的目標代碼。
[0046]著色器的實例包含用于圖形相關處理的頂點著色器、片段著色器和幾何著色器。內(nèi)核的實例包含與圖形處理無關的應用(例如,用于線性代數(shù)或流體動力學)。作為額外實例,內(nèi)核包含用于圖像處理和視頻處理的應用。
[0047]GPU16可包含著色器處理器,且著色器處理器可執(zhí)行著色器和內(nèi)核。舉例來說,GPU16的著色器處理器可包含一個或一個以上著色器核心(稱為可編程計算單元),且所述一個或一個以上可編程計算單元的每一者可執(zhí)行內(nèi)核。
[0048]盡管內(nèi)核被描述為在GPU16上執(zhí)行的應用,但內(nèi)核不應被視為限于此。內(nèi)核的其它實例包含GPU16的固定功能單元。舉例來說,GPU16包含可編程計算單元和固定功能單元。可編程計算單元可通過執(zhí)行應用而提供功能靈活性。固定功能單元可為不提供功能靈活性且可被設計用于特性用途的硬件單元。一般來說,術語內(nèi)核指代接收數(shù)據(jù)、處理所述數(shù)據(jù)且輸出所述數(shù)據(jù)用于非圖形相關用途的任何應用或硬件單元。然而,出于說明的目的,本發(fā)明描述的技術以其中內(nèi)核為應用的實例加以描述,應理解這些技術可擴展到其中內(nèi)核為固定功能單元的實例。
[0049]在本發(fā)明描述的技術中,代替于一個可編程計算單元執(zhí)行內(nèi)核的所有指令,有可能多個可編程計算單元執(zhí)行內(nèi)核的部分。內(nèi)核的一部分可稱為工作組、任務或線程(均同義)。舉例來說,內(nèi)核的工作組、任務或線程是可獨立于內(nèi)核的其它工作組、任務或線程執(zhí)行的指令集。
[0050]在一些實例中,一個或一個以上可編程計算單元的第一集合可執(zhí)行內(nèi)核的線程,且一個或一個以上可編程計算單元的第二集合可執(zhí)行內(nèi)核的線程。在一些情況下,可編程計算單元的第一集合和可編程計算單元的第二集合執(zhí)行的線程可為同一內(nèi)核的線程。在一些情況下,可編程計算單元的第一集合和可編程計算單元的第二集合執(zhí)行的線程可為不同內(nèi)核的線程。在這些實例的任一者中,線程的一者可需要將所產(chǎn)生的數(shù)據(jù)輸出到線程的另一者。換句話說,GPU16可以管線方式執(zhí)行內(nèi)核。
[0051]如上文描述,以管線方式執(zhí)行內(nèi)核可意味著執(zhí)行內(nèi)核使得一個線程產(chǎn)生的數(shù)據(jù)由另一線程消耗,且此另一線程產(chǎn)生的數(shù)據(jù)由又一線程消耗,等等。在這些實例中,線程可為不同內(nèi)核、同一內(nèi)核的線程,或一些線程可針對不同內(nèi)核且其它線程可針對同一內(nèi)核。在這些實例中,內(nèi)核可視為形成其中產(chǎn)生和消耗數(shù)據(jù)的管線。舉例來說,同一內(nèi)核或不同內(nèi)核的第一、第二和第三線程可形成管道,其中第一線程產(chǎn)生數(shù)據(jù)且發(fā)射所述數(shù)據(jù)以供由第二線程消耗用于處理。第二線程處理所接收的數(shù)據(jù)以產(chǎn)生數(shù)據(jù),且將所產(chǎn)生的數(shù)據(jù)發(fā)射到第三線程以用于處理,等等。
[0052]在此實例中,第一線程可稱為產(chǎn)生者線程,第二線程可稱為針對第一線程的消耗者線程以及針對第三線程的產(chǎn)生者線程,且第三線程可稱為消耗者線程。在其中第一、第二和第三線程針對不同內(nèi)核(例如,分別第一、第二和第三內(nèi)核)的實例中,第一內(nèi)核可稱為產(chǎn)生者內(nèi)核,第二內(nèi)核可稱為針對第一內(nèi)核的消耗者內(nèi)核以及針對第三內(nèi)核的產(chǎn)生者內(nèi)核,且第三內(nèi)核可稱為消耗者內(nèi)核。
[0053]在現(xiàn)有GPU中,以管線方式執(zhí)行內(nèi)核可在計算和功率方面低效。舉例來說,可編程計算單元的每一者可包含本地存儲器,其用于存儲待由可編程計算單元執(zhí)行的指令,用于存儲待處理的數(shù)據(jù),且用于存儲所產(chǎn)生的數(shù)據(jù)(包含可產(chǎn)生的中間結果)。然而,可編程計算單元的本地存儲器不可由任何其它可編程計算單元存取。
[0054]因此,在一些實例中,為以管線方式執(zhí)行內(nèi)核,GPU16可檢索可編程計算單元的本地存儲器中存儲的所產(chǎn)生的數(shù)據(jù),且將所述所產(chǎn)生的數(shù)據(jù)存儲在全局存儲器20中。將數(shù)據(jù)存儲在全局存儲器20中可稱為芯片外存儲數(shù)據(jù),因為全局存儲器20在容納GPU16的集成電路外部(即,在IC12外部)。GPU16可接著檢索存儲在全局存儲器20中的數(shù)據(jù),且將所檢索的數(shù)據(jù)加載到另一可編程計算單元的本地存儲器中。
[0055]作為說明性實例,假定第一可編程計算單元正執(zhí)行產(chǎn)生者內(nèi)核的線程。在此實例中,第一可編程計算單元可將通過執(zhí)行產(chǎn)生者內(nèi)核的線程而產(chǎn)生的數(shù)據(jù)存儲在第一可編程計算單元的本地存儲器中。GPU16可從第一可編程計算單元的本地存儲器檢索所產(chǎn)生的數(shù)據(jù)且將所產(chǎn)生的數(shù)據(jù)存儲在全局存儲器20中。
[0056]在此實例中,假定第二可編程計算單元正執(zhí)行消耗者內(nèi)核的線程。在此實例中,GPU16可從全局存儲器20檢索產(chǎn)生者內(nèi)核產(chǎn)生的數(shù)據(jù)且將數(shù)據(jù)存儲到第二可編程計算單元的本地存儲器中。消耗者內(nèi)核可接著消耗存儲到第二可編程單元的本地存儲器中的數(shù)據(jù)。
[0057]在以上實例中,GPU16可需要將產(chǎn)生者內(nèi)核產(chǎn)生的數(shù)據(jù)存儲到全局存儲器20中,因為第二可編程計算單元不能存取第一可編程計算單元的本地存儲器。以此方式,全局存儲器20充當隨后待消耗的所產(chǎn)生的數(shù)據(jù)的中間存儲裝置。
[0058]一般來說,管理所產(chǎn)生的數(shù)據(jù)存儲到全局存儲器20的方式和/或所述數(shù)據(jù)待從全局存儲器20檢索的方式可能在處理和計算方面低效。作為一個實例,有可能(盡管低效)內(nèi)核管理數(shù)據(jù)存儲在全局存儲器20中的方式。舉例來說,內(nèi)核可包含致使可編程計算單元的算術邏輯單元(ALU)確定全局存儲器20內(nèi)待存儲數(shù)據(jù)或待檢索所存儲的數(shù)據(jù)的地址(例如,指針)的指令。
[0059]作為另一實例,全局存儲器20可存儲原子計數(shù)器。原子計數(shù)器的值可指示數(shù)據(jù)是否可用于消耗。舉例來說,產(chǎn)生者內(nèi)核可包含讀取存儲在全局存儲器20中的原子計數(shù)器的當前值的指令。產(chǎn)生者內(nèi)核還可包含基于產(chǎn)生者內(nèi)核存儲的數(shù)據(jù)量修改原子計數(shù)器的值的指令,以及將原子計數(shù)器的經(jīng)修改值寫回到全局存儲器20中的指令。
[0060]消耗者內(nèi)核可包含周期性檢查存儲在全局存儲器20中的原子計數(shù)器的值的指令。當原子計數(shù)器的值足夠大時,消耗者內(nèi)核可確定待消耗的數(shù)據(jù)可用。舉例來說,假定原子計數(shù)器的值為X,且產(chǎn)生者內(nèi)核產(chǎn)生了數(shù)據(jù)量N。在此實例中,消耗者內(nèi)核可包含致使正執(zhí)行消耗者內(nèi)核的線程的可編程計算單元周期性檢查原子計數(shù)器的值的指令。當可編程計算單元確定原子計數(shù)器的值為X加N時,可編程計算單元可請求GPU16從全局存儲器20檢索所存儲的數(shù)據(jù)以供消耗。
[0061]以此方式。有可能使用軟件(即,內(nèi)核的指令)來以管線方式執(zhí)行內(nèi)核。然而,可存在為何使用內(nèi)核內(nèi)的指令以管線方式執(zhí)行內(nèi)核很低效的各種原因。舉例來說,將確定在何處存儲數(shù)據(jù)或將數(shù)據(jù)存儲在全局存儲器20中何處的地址的指令包含在內(nèi)核中可需要可編程計算單元的ALU不必要地消耗功率,以及浪費時鐘循環(huán)來處理用于確定全局存儲器20內(nèi)的地址的指令。
[0062]此外,周期性檢查原子計數(shù)器的值需要GPU16在芯片外(即,在全局存儲器20中)存取信息。從全局存儲器20讀取原子計數(shù)器的值以及將原子計數(shù)器的經(jīng)修改值寫入到全局存儲器20可消耗不合需要的功率量。并且,如所說明,IC12經(jīng)由存儲器總線24耦合到全局存儲器20。可存在對于存儲器總線24可處置的數(shù)據(jù)量的帶寬限制。因此,從何時GPU16可讀取和寫入原子計數(shù)器的值可存在延遲。
[0063]此外,因為數(shù)據(jù)可用于由消耗者內(nèi)核消耗的時間未知,所以執(zhí)行消耗者內(nèi)核的可編程計算單元可周期性致使GPU16檢查原子計數(shù)器的值以確定數(shù)據(jù)是否可用于消耗。周期性檢查原子計數(shù)器的值可致使消耗者內(nèi)核的線程保持“旋轉”。舉例來說,如果原子計數(shù)器的所讀取值指示數(shù)據(jù)尚不完全可用于消耗,那么可編程計算單元可暫停消耗者內(nèi)核的線程的執(zhí)行,直到可編程計算單元再次檢查原子計數(shù)器的值為止。如果數(shù)據(jù)仍不可用,那么可編程計算單元再次等待,且致使GPU16再次檢查數(shù)據(jù)是否可用。在此實例中,消耗者內(nèi)核的線程可在待消耗的數(shù)據(jù)在全局存儲器20中不可用的時間期間保持忙碌-等待。換句話說,在旋轉期間,可編程計算單元可不在執(zhí)行任何功能,這可能延遲數(shù)據(jù)的消耗。
[0064]如果可編程計算單元確定數(shù)據(jù)可用(例如,通過讀取原子計數(shù)器的值)的頻率為高,那么GPU16可能由于過于頻繁讀取存儲在全局存儲器20中的原子計數(shù)器的值而浪費功率。如果可編程計算單元確定數(shù)據(jù)可用的頻率為低,那么數(shù)據(jù)可用的時間與GPU16檢索數(shù)據(jù)的時間之間可存在被浪費的時間,這也延遲數(shù)據(jù)的消耗。
[0065]并且,在全局存儲器20存儲原子計數(shù)器的以上技術的一些技術中,當一個內(nèi)核正讀取、修改和寫入原子計數(shù)器的值時,不允許其它內(nèi)核讀取、修改或寫入原子計數(shù)器的值。在此類情況下,當兩個產(chǎn)生者線程需要同時輸出數(shù)據(jù)以供存儲在全局存儲器20中時,線程的一者將能夠輸出數(shù)據(jù),但另一線程可不能輸出數(shù)據(jù),因為此另一線程可不能夠存取原子計數(shù)器。在此類情況下,被拒絕存儲裝置存取的線程可旋轉直到對原子計數(shù)器的存取可用為止,且當原子計數(shù)器可用于存取時,被拒絕存儲裝置存取的線程可將數(shù)據(jù)輸出到全局存儲器20。當兩個消耗者線程試圖同時存取數(shù)據(jù)時,可發(fā)生相同情況。
[0066]本發(fā)明描述的技術可允許GPU16與上文描述的技術相比更有效地以管線方式執(zhí)行內(nèi)核。如更詳細描述,管線管理單元(PMU) 18可經(jīng)配置以存儲各個線程產(chǎn)生的數(shù)據(jù)的狀態(tài)信息和待由各個線程消耗的數(shù)據(jù)。以此方式,GPU16可不需要連續(xù)在芯片外存取信息,從而指示數(shù)據(jù)存儲在何處以及何時數(shù)據(jù)可用于消耗。而是,PMU18可在內(nèi)部存儲此信息(即,在IC12內(nèi))。
[0067]如所說明,全局存儲器20可包含緩沖器22A_22N(統(tǒng)稱為緩沖器22)。緩沖器22可為全局存儲器20內(nèi)的存儲位置。緩沖器22的實例包含先進先出(FIFO)緩沖器或環(huán)形緩沖器。
[0068]處理器14可經(jīng)配置以界定駐留在全局存儲器20內(nèi)的緩沖器的數(shù)目,且在全局存儲器20內(nèi)保留存儲位置。舉例來說,處理器14可界定緩沖器22的開始和結束位置(B卩,開始和結束地址)。處理器14可基于駐留在GPU16的著色器處理器內(nèi)的可編程計算單元的數(shù)目界定駐留在全局存儲器20內(nèi)的緩沖器的數(shù)目。作為一個實例,處理器14可界定駐留在全局存儲器20內(nèi)的緩沖器的數(shù)目使得針對每一可編程計算單元存在一個或一個以上輸入緩沖器22 (即,存儲待由在可編程計算單元上執(zhí)行的內(nèi)核消耗的數(shù)據(jù)的一個或一個以上緩沖器),以及針對每一可編程計算單元存在零個或多個輸入緩沖器22 (即,存儲由在GPU16的可編程計算單元上執(zhí)行的內(nèi)核產(chǎn)生的數(shù)據(jù)的零個或多個緩沖器)。
[0069]另外,處理器14可經(jīng)配置以界定緩沖器的大小。舉例來說,處理器14可經(jīng)配置以界定緩沖器22的每一者內(nèi)的存儲位置的數(shù)目(例如,緩沖器22的長度)。處理器14還可界定可存儲在存儲位置的每一者中的數(shù)據(jù)量(例如,緩沖器22的寬度)。在一些實例中,處理器14可用數(shù)據(jù)預先填充緩沖器22。
[0070]在一些實例中,處理器14可經(jīng)配置以界定緩沖器22的最小數(shù)目。作為一個實例,處理器14可經(jīng)配置以界定最少128個緩沖器22。緩沖器22的最小數(shù)目為128是出于說明的目的而提供且不應視為具有限制性。緩沖器22的最小數(shù)目可大于或小于128。在一些實例中,可不存在對于緩沖器22的最小數(shù)目的要求。
[0071]處理器14還可經(jīng)配置以執(zhí)行各種指令來確定緩沖器22的狀態(tài)。舉例來說,處理器14可執(zhí)行用以將存儲在緩沖器22中的數(shù)據(jù)復制到IC12或GPU16內(nèi)的緩沖器中的指令,和用以將存儲在IC12或GPU16的緩沖器內(nèi)的數(shù)據(jù)復制到緩沖器22中的指令。處理器14還可執(zhí)行界定存儲在緩沖器22中的數(shù)據(jù)量的指令,以及確認緩沖器22的長度和寬度(例如,以確保緩沖器22尚未惡化)的指令。允許處理器14確定緩沖器22的狀態(tài)的指令的此執(zhí)行并非在每個實例中均需要,但可潛在地輔助內(nèi)核的開發(fā)者通過在處理器14而非GPU16上執(zhí)行指令而確定緩沖器22的狀態(tài)。
[0072]在一些實例中,處理器14可經(jīng)配置以界定緩沖器22的放大因子。放大因子可指示可由內(nèi)核的線程產(chǎn)生用于存儲在緩沖器22的一者中的元素的最大數(shù)據(jù)??尚枰龇糯笠蜃佑糜诰彌_器22的待存儲數(shù)據(jù)的一者不能存儲所有所產(chǎn)生的數(shù)據(jù)的情形。這可導致內(nèi)核的執(zhí)行歸因于緩沖器22中不足的存儲空間而停止,且可導致死鎖(例如,內(nèi)核不會再返回到執(zhí)行狀態(tài))。
[0073]為使此死鎖的幾率最小化,處理器14可保留全局存儲器20的大部分(例如,界定足夠大以存儲幾乎任何類型的數(shù)據(jù)的長且寬的緩沖器22)。這對于一些情況可較好運作,但對于不能實現(xiàn)保留全局存儲器20的大部分的其它情況不能較好運作。在一些情況下,開發(fā)者可開發(fā)內(nèi)核使得所述內(nèi)核不產(chǎn)生太多數(shù)據(jù),借此使死鎖的幾率最小化。
[0074]盡管處理器14描述為界定緩沖器22,但本發(fā)明描述的技術不限于此。在一些實例中,除處理器14以外的處理單元可經(jīng)配置以界定緩沖器22。在一些實例中,GPU16有可能界定緩沖器22。然而,為便于描述,相對于處理器14界定緩沖器22來描述所述技術。
[0075]處理器14可將緩沖器22的信息發(fā)射到管線處理單元(PMU) 18。舉例來說,PMU18可接收指示緩沖器22的數(shù)目、緩沖器22的開始和結束地址、緩沖器22的長度和寬度,以及處理器14針對緩沖器22確定的任何其它信息的信息。PMU18可將緩沖器22的此狀態(tài)信息存儲在位于IC12內(nèi)的寄存器內(nèi)。利用來自處理器14的緩沖器22的信息,PMU18可經(jīng)配置以當在可編程計算單元上執(zhí)行的內(nèi)核的線程產(chǎn)生和消耗數(shù)據(jù)時管理緩沖器22的狀態(tài)信肩、O
[0076]舉例來說,在執(zhí)行內(nèi)核的線程的可編程計算單元產(chǎn)生數(shù)據(jù)并輸出所產(chǎn)生的數(shù)據(jù)之后,PMU18可接收數(shù)據(jù)且確定待存儲數(shù)據(jù)的地址。舉例來說,PMU18可確定緩沖器22中的哪一者將存儲所述數(shù)據(jù)。在其中緩沖器22為環(huán)形緩沖器或FIFO緩沖器的實例中,PMU18可存儲識別緩沖器22的開始和結尾的指針的信息。對于環(huán)形緩沖器,PMU18還可存儲識別有效數(shù)據(jù)的開始和有效數(shù)據(jù)的結尾的指針的信息。
[0077]因此,代替于內(nèi)核包含致使可編程計算單元確定將存儲所產(chǎn)生的數(shù)據(jù)或將檢索數(shù)據(jù)以供消耗的地址的指令,PMU18可經(jīng)配置以確定將存儲所產(chǎn)生的數(shù)據(jù)或將檢索數(shù)據(jù)以供消耗的地址。以此方式,GPU16可不浪費時鐘循環(huán),且可編程計算單元的ALU可不浪費處理功率來確定將存儲數(shù)據(jù)或將檢索數(shù)據(jù)的地址。
[0078]此外,PMU18可經(jīng)配置以確定何時待消耗的數(shù)據(jù)準備好供消耗。舉例來說,代替于全局存儲器20存儲原子計數(shù)器,PMU18可將原子計數(shù)器本地存儲在IC12內(nèi)(例如,在IC12內(nèi)的本地高速緩沖存儲器中的寄存器內(nèi))。作為一個實例,當執(zhí)行產(chǎn)生者線程的可編程計算單元輸出數(shù)據(jù)時,PMU18可讀取內(nèi)部存儲的原子計數(shù)器的值,基于所產(chǎn)生數(shù)據(jù)的量修改原子計數(shù)器的值,且在IC12內(nèi)寫入原子計數(shù)器的經(jīng)修改值。在此實例中,當執(zhí)行消耗者線程的可編程計算單元讀取原子計數(shù)器的值時,GPU16可不需要通過存取芯片外全局存儲器20而確定原子計數(shù)器的值。而是,PMU18可提供原子計數(shù)器的值。
[0079]在一些實例中,本地存儲原子計數(shù)器的值的PMU18可減少旋轉。舉例來說,執(zhí)行消耗者線程的可編程計算單元可輸出對于待由消耗者線程消耗的數(shù)據(jù)的請求。在此實例中,PMU18可確定待消耗的數(shù)據(jù)是否可用(例如,基于本地存儲的原子計數(shù)器的值)。
[0080]如果PMU18確定數(shù)據(jù)尚不可用于消耗,那么PMU18可向可編程計算單元指示可編程計算單元應切換到不依賴于所述尚不可用數(shù)據(jù)的(同一內(nèi)核或可能不同內(nèi)核的)不同線程。換句話說,PMU18可指示需要所述尚不可用數(shù)據(jù)的消耗者線程應進入休眠使得可編程計算單元可保持執(zhí)行其它線程。接著,當數(shù)據(jù)可用時,如PMU18基于原子計數(shù)器的本地存儲的值所確定,PMU18可指示可編程計算單元切換回到休眠線程(即,喚醒所述線程)使得可編程計算單元可使用現(xiàn)可用的數(shù)據(jù)執(zhí)行消耗者線程。以此方式,當數(shù)據(jù)尚不可用于消耗時,執(zhí)行消耗者線程的可編程計算單元可能夠執(zhí)行內(nèi)核的其它線程,而不是保持在忙碌-等待狀態(tài)。
[0081]作為另一實例,當在不同可編程計算單元上執(zhí)行的同一內(nèi)核的兩個產(chǎn)生者線程試圖同時將數(shù)據(jù)寫入到緩沖器22的相同一者時,PMU18可允許存取產(chǎn)生者線程的一者且拒絕存取另一產(chǎn)生者線程。在此實例中,PMU18可指示執(zhí)行被拒絕存取的線程的可編程計算單元執(zhí)行內(nèi)核的其它線程。當?shù)骄彌_器22的寫入存取變得可用時,如PMU18所確定,PMU18可向正執(zhí)行被拒絕存取的線程的可編程計算單元指示到緩沖器22的寫入存取現(xiàn)在可用。以此方式,執(zhí)行被拒絕存取的線程的可編程計算單元可能夠執(zhí)行額外線程。
[0082]類似地,當兩個消耗者線程試圖同時從緩沖器22的相同一者讀取數(shù)據(jù)時,PMU18可允許存取消耗者線程的一者且拒絕存取另一消耗者線程。類似于兩個線程正同時寫入的實例,在其中兩個線程正同時讀取的此實例中,PMU18可指示執(zhí)行被拒絕存取的線程的可編程計算單元執(zhí)行其它線程。當?shù)骄彌_器22的讀取存取變得可用時,如PMU18所確定,PMU18可向正執(zhí)行被拒絕存取的線程的可編程計算單元指示到緩沖器22的讀取存取現(xiàn)在可用。以此方式,執(zhí)行被拒絕存取的線程的可編程計算單元可能夠執(zhí)行額外線程。
[0083]以此方式,界定全局存儲器20中的緩沖器22的處理器14,以及管理全局存儲器20中的緩沖器22的狀態(tài)的PMU18可允許由GPU16以管線方式有效執(zhí)行內(nèi)核。作為一個實例,PMU18可使以管線方式執(zhí)行內(nèi)核所需的芯片外存取次數(shù)最小化。作為另一實例,因為PMU18可確定應存儲數(shù)據(jù)或應檢索數(shù)據(jù)的地址,所以GPU16可不通過執(zhí)行內(nèi)核內(nèi)用于確定此類地址的指令而浪費功率和時鐘循環(huán)來確定此類地址。換句話說,PMU18可在線程不包含用于確定將在何處存儲或檢索數(shù)據(jù)的指令的情況下確定待存儲或檢索數(shù)據(jù)的地址。并且,PMU18可允許可編程計算單元在不旋轉的情況下執(zhí)行內(nèi)核的線程。舉例來說,當來自產(chǎn)生者內(nèi)核的數(shù)據(jù)尚不可用時,PMU18可允許消耗者內(nèi)核的其它線程(例如,不需要來自產(chǎn)生者內(nèi)核的數(shù)據(jù)的線程)執(zhí)行。
[0084]圖2是進一步詳細說明圖形處理單元(GPU)和全局存儲器的框圖。舉例來說,圖2進一步詳細說明圖1的GPU16和全局存儲器20。如所說明,GPU16包含著色器處理器26、固定功能單元30、管線管理單元(PMU) 18、高速緩沖存儲器34、調(diào)度器40、寄存器44。在一些實例中,寄存器44可為高速緩沖存儲器34的一部分。在圖2中說明的實例中,PMU18說明為形成在GPU16內(nèi)。然而,如上文描述,PMU18可形成在GPU16外部且在與GPU16相同的集成電路中。
[0085]著色器處理器26可包含可編程計算單元28A-28N (統(tǒng)稱為可編程計算單元28),其可視為著色器核心。固定功能單元30包含固定功能計算單元32A-32N(統(tǒng)稱為固定功能計算單元32)。著色器處理器26和固定功能單元30可包含可編程計算單元28和固定功能單元32的一者或一者以上(例如,多于或少于所說明)。
[0086]可編程計算單元28可如上文描述起作用。舉例來說,可編程計算單元28可執(zhí)行圖形和非圖形相關應用(著色器和內(nèi)核)兩者。舉例來說,可編程計算單元28可執(zhí)行以裝置語言(例如,OpenCL C語言)編寫的內(nèi)核。如上文描述,可編程計算單元28的一者可包含用于存儲中間結果且用于在所述可編程計算單元28上執(zhí)行的內(nèi)核的線程之間共享的本地存儲器??删幊逃嬎銌卧?8的每一者的本地存儲器不可由另一可編程計算單元28存取。在一些實例中,有可能可編程計算單元28的一者調(diào)度可編程計算單元28的另一者將執(zhí)行內(nèi)核的線程的時間。
[0087]在一些例子中,可編程計算單元28的一者可將數(shù)據(jù)發(fā)射到可編程計算單元28的一個或一個以上其它者。舉例來說,為以管線形式執(zhí)行內(nèi)核,執(zhí)行產(chǎn)生者線程的可編程計算單元28的第一者可將數(shù)據(jù)(例如,非圖形相關數(shù)據(jù))發(fā)射到可編程計算單元28的第二者。如上文描述,可編程計算單元28的發(fā)射者(例如,執(zhí)行產(chǎn)生者線程的可編程計算單元)可將數(shù)據(jù)存儲在緩沖器中,例如全局存儲器20的緩沖器22的一者,且可編程計算單元28的接收者(例如,執(zhí)行者消耗者線程的可編程計算單元)可從全局存儲器20的緩沖器22的一者檢索數(shù)據(jù)。
[0088]如圖2中說明,在一些實例中,GPU16可包含內(nèi)部高速緩沖存儲器34。然而,高速緩沖存儲器34可在IC12內(nèi)部而非限于在GPU16內(nèi)部。在一些實例中,代替于在芯片外存儲所產(chǎn)生的數(shù)據(jù)(例如,在全局存儲器20中),也有可能GPU16將數(shù)據(jù)存儲在GPU16或IC12內(nèi)部。舉例來說,可編程計算單元28的發(fā)射者可將數(shù)據(jù)存儲在高速緩沖存儲器34中的緩沖器36A-36N的一者或一者以上(統(tǒng)稱為緩沖器36)中,所述高速緩沖存儲器34在圖2的實例中的GPU16內(nèi),但可在IC12內(nèi)以及GPU16外部??删幊逃嬎銌卧?8的接收者可從高速緩沖存儲器34中的緩沖器36檢索數(shù)據(jù)。高速緩沖存儲器34內(nèi)的緩沖器可為全局存儲器20中的緩沖器22的支持高速緩沖存儲器的緩沖器。換句話說,全局存儲器20的緩沖器22可存儲由產(chǎn)生者線程產(chǎn)生的待由消耗者線程消耗的完整數(shù)據(jù),且緩沖器36可充當存儲所產(chǎn)生數(shù)據(jù)中的一些數(shù)據(jù)以供快速存取(與從全局存儲器20存取數(shù)據(jù)相比)的高速緩沖存儲器。
[0089]高速緩沖存儲器34內(nèi)的緩沖器36可類似于緩沖器22。舉例來說,緩沖器36可為FIFO緩沖器或環(huán)形緩沖器??赡苄枰咚倬彌_存儲器34包含緩沖器36以避免與存取芯片外存儲器(例如,全局存儲器20的緩沖器22)相關聯(lián)的存儲器等待時間和功率消耗。然而,僅利用緩沖器36可能不切實際,因為用于存儲的可用空間有限。以此方式,有可能將一些數(shù)據(jù)存儲在緩沖器36內(nèi)且允許溢出到緩沖器22中。
[0090]緩沖器36和緩沖器22可允許GPU16以管線方式執(zhí)行內(nèi)核。舉例來說,緩沖器36和緩沖器22可被視為允許可編程計算單元28之間的通信的數(shù)據(jù)結構。緩沖器36和緩沖器22可經(jīng)配置以存儲比在可編程計算單元上執(zhí)行的內(nèi)核可輸出(例如,一個以上數(shù)據(jù)單元)的最小數(shù)據(jù)量多的數(shù)據(jù)。以此方式,在可編程計算單元28的一者上執(zhí)行的內(nèi)核的線程可能夠產(chǎn)生存儲在緩沖器36和緩沖器22中且可傳遞到在可編程計算單元28的另一者上執(zhí)行的另一內(nèi)核的線程(以供消耗)的可變數(shù)據(jù)量。
[0091]固定功能計算單元32可提供固定功能性且可形成為硬件單元(作為非限制性實例)。固定功能計算單元32可被視為執(zhí)行使用裝置語言編寫的特定內(nèi)置式內(nèi)核。舉例來說,雖然可編程計算單元28可提供功能靈活性,但固定功能計算單元32的相應功能靈活性可能有限。舉例來說,固定功能計算單元32可包含光柵化單元、圖元裝配單元、視口變換單元,和提供特定圖形功能性的其它此類單元。
[0092]在一些例子中,固定功能計算單元32可經(jīng)硬連線以執(zhí)行其相應特定功能。并且,可能有可能由固定功能計算單元32來調(diào)度固定功能計算單元32的另一者何時將執(zhí)行。此夕卜,在一些情況下,如果GPU16不包含固定功能計算單元32的特定一者,那么有可能開發(fā)執(zhí)行不可用固定功能計算單元的功能的內(nèi)核。換句話說,所述內(nèi)核可模擬不可用固定功能計算單元的固定功能行為。舉例來說,如果固定功能鑲嵌器不可用,那么開發(fā)者可開發(fā)鑲嵌內(nèi)核,其模擬鑲嵌器的固定功能行為并在可編程計算單元28的一者或一者以上之上執(zhí)行內(nèi)核。
[0093]在一些實例中,GPU16可包含調(diào)度器40。調(diào)度器40可將線程和操作指派到各種可編程計算單元28和固定功能單元32。舉例來說,調(diào)度器40可對可編程計算單元28執(zhí)行的任務進行負載平衡使得可編程計算單元28中沒有一者在其它者被利用不足時被過分利用。調(diào)度器40可實施為硬件或在硬件上執(zhí)行的軟件。
[0094]在圖2中,全局存儲器20可包含緩沖器42A_42N(統(tǒng)稱為緩沖器42),且高速緩沖存儲器34可包含緩沖器38A-38N(統(tǒng)稱為緩沖器38)。緩沖器38可不一定在每個實例中,且可形成為用于提供對于存儲在緩沖器42中的命令的支持高速緩沖存儲器的存儲的任選芯片上高速緩沖存儲器。緩沖器42和緩沖器38可視為命令隊列。可存在針對所有可編程計算單元28的命令隊列(例如,緩沖器42和緩沖器38的一者)以及針對每一類型固定功能計算單元32的一個隊列。緩沖器42和緩沖器38可存儲零或更多條目。
[0095]緩沖器42和任選芯片上緩沖器38可輔助組織針對可編程計算單元28和固定功能計算單元32的工作負載調(diào)度。舉例來說,緩沖器42可存儲指示可編程計算單元28和固定功能計算單元32執(zhí)行各種任務的命令。舉例來說,緩沖器42中的每一條目可存儲用于致使可用的一個或一個以上可編程計算單元28執(zhí)行內(nèi)核的線程的信息,以及存儲內(nèi)核幅角值的信息和相依性信息。在一些實例中,可需要在一個或一個以上可編程計算單元28執(zhí)行內(nèi)核之前滿足內(nèi)核的線程之間的相依性。
[0096]緩沖器22可由處理器14(圖1)和GPU16兩者存取。作為一個實例,處理器14可根據(jù)上文描述的各種API使用調(diào)用存取緩沖器22。GPU16可基于可編程計算單元28上執(zhí)行的內(nèi)核存取緩沖器22。舉例來說,可以將所產(chǎn)生的數(shù)據(jù)存儲到全局存儲器20中的功能開發(fā)內(nèi)核。
[0097]如所說明,GPU16還可包含管線管理單元(PMU) 18。如上文描述,PMU18可管理全局存儲器20內(nèi)的緩沖器22的狀態(tài)。另外,PMU18可管理高速緩沖存儲器34內(nèi)的緩沖器36的狀態(tài)。
[0098]舉例來說,PMU18可通過存儲緩沖器22和緩沖器36的長度和寬度(包含可用于存儲所產(chǎn)生的數(shù)據(jù)的緩沖器22和緩沖器36的數(shù)目)來管理緩沖器22和緩沖器36的狀態(tài)。作為一個實例,PMU18可在內(nèi)核在可編程計算單元28上執(zhí)行之前分配緩沖器22,且可在內(nèi)核執(zhí)行結束時解除分配緩沖器22。
[0099]作為另一實例,PMU18可將標頭指針、當如偏移、最大深度等彳目息存儲在芯片上寄存器44中。在一些實例中,PMU18可以與在圖形處理中如何存儲紋理參數(shù)類似的方式存儲緩沖器22和緩沖器36的狀態(tài)信息。
[0100]緩沖器22可需要以下意義上的管理:確定將數(shù)據(jù)存儲到哪些緩沖器22中或從哪些緩沖器22檢索數(shù)據(jù)、確定將數(shù)據(jù)存儲在緩沖器中或從其檢索數(shù)據(jù)的存儲位置(例如,確定地址),以及確??删幊逃嬎銌卧?8的不同者不會試圖從緩沖器存取引起數(shù)據(jù)惡化的信息。PMU18可被分配到此管理任務。舉例來說,在包含PMU18的GPU16或包含包括PMU18的GPU16的IC的情況下,緩沖器22的管理可局限于包含GPU16的IC內(nèi)而非IC外部。這可導致功率消耗減少,以及在可編程計算單元28上執(zhí)行的內(nèi)核的有效執(zhí)行。
[0101]作為一個實例,PMU18可將原子計數(shù)器存儲在寄存器44內(nèi)。寄存器44可為高速緩沖存儲器34的一部分,或GPU16或IC12內(nèi)的某一其它存儲器的一部分。原子計數(shù)器可指示對于可編程計算單元28的一者的存取是否可用(例如,數(shù)據(jù)是否可用于讀取或兩個或兩個以上內(nèi)核是否正試圖同時從同一緩沖器22進行寫入或讀取)。基于原子計數(shù)器,PMU18可能夠適當允許存取可編程計算單元28的一者,同時拒絕存取可編程計算單元28的其它者以避免緩沖器22的數(shù)據(jù)惡化,這可在兩個線程試圖同時寫入的情況下發(fā)生。在一些例子中,當PMU18拒絕對可編程計算單元28的一者的存取時,PMU18可允許請求存取的任務(例如,線程)休眠,且允許可編程計算單元28的被拒絕的一者繼續(xù)執(zhí)行其它任務(例如,線程)。當對可編程計算單元28的被拒絕的一者的存取變?yōu)榭捎脮r,PMU18可喚醒所述任務且將數(shù)據(jù)提供到所述任務以供進一步執(zhí)行。以此方式,可編程計算單元28可不完全閑置,且可編程計算單元28的其它任務可執(zhí)行。
[0102]在一些實例中,當需要從全局存儲器20的一個緩沖器22檢索數(shù)據(jù)時,PMU18可能夠檢索除所需數(shù)據(jù)以外的額外數(shù)據(jù)。舉例來說,PMU18可確定所請求數(shù)據(jù)的開始和結束位置。然而,PMU18可檢索在所請求數(shù)據(jù)的所確定的結束位置之后存儲在緩沖器22中的額外數(shù)據(jù)。PMU18可當PMU18確定緩沖器36中存儲空間可用時檢索此額外數(shù)據(jù)。如上文描述,PMU18可管理全局存儲器20中的緩沖器22以及高速緩沖存儲器34內(nèi)的緩沖器36兩者。PMU18可接著將所檢索的數(shù)據(jù)存儲在高速緩沖存儲器34中。以此方式,當需要此數(shù)據(jù)時,額外數(shù)據(jù)在GPU16內(nèi)已經(jīng)可用。將額外數(shù)據(jù)(例如,除所請求數(shù)據(jù)以外的數(shù)據(jù))存儲在緩沖器36中可進一步減少GPU16必須在芯片外(例如,從全局存儲器20)存取數(shù)據(jù)的次數(shù)。
[0103]為存取數(shù)據(jù),可編程計算單元28可利用指針來存取緩沖器(例如,可開發(fā)內(nèi)核以使用指針存取數(shù)據(jù))。在一些實例中,PMU18可維持指針信息使得可編程計算單元28能夠適當存取數(shù)據(jù)。舉例來說,可編程計算單元28可將請求關于緩沖器22的信息的專門指令輸出到PMU18。此類信息可包含緩沖器內(nèi)元素的數(shù)目、多少數(shù)據(jù)存儲在緩沖器內(nèi)(例如,緩沖器的寬度)、信息存儲在何處的信息和其它此類信息。以此方式,確??删幊逃嬎銌卧?8適當存取緩沖器22可在容納GPU16的IC內(nèi)部執(zhí)行,這可能減少容納GPU16的IC外部的存取。
[0104]作為一個實例,為確保數(shù)據(jù)不會惡化或丟失,可開發(fā)產(chǎn)生者內(nèi)核以包含詢問緩沖器22的范圍(例如,開始和結束點)的指令。在此實例中,正執(zhí)行產(chǎn)生者內(nèi)核的可編程計算單元28的一者可將緩沖器22的范圍的詢問輸出到PMU18。PMU18可已將緩沖器22的范圍的信息存儲在寄存器44中(例如,通過當處理器14界定緩沖器22時從處理器14接收此信息)。PMU18可將緩沖器22的范圍的結果傳回到產(chǎn)生者內(nèi)核。
[0105]作為另一實例,為以管線方式執(zhí)行內(nèi)核,在一些實例中,可能有必要維持管線中數(shù)據(jù)的次序。舉例來說,假定第一內(nèi)核將產(chǎn)生待由第二內(nèi)核消耗的數(shù)據(jù)。然而,在此情況下,有可能第三內(nèi)核在第一和第二內(nèi)核正執(zhí)行的同時也在執(zhí)行。在此情況下,有可能對第一內(nèi)核產(chǎn)生的數(shù)據(jù)和第三內(nèi)核產(chǎn)生的數(shù)據(jù)重新排序,且可能導致第二內(nèi)核消耗不正確的數(shù)據(jù)。
[0106]為確保適當排序,在一些實例中,除指示緩沖器22是否可用于存取的原子計數(shù)器外,PMU18還可將額外原子計數(shù)器存儲在寄存器44中。這些額外原子計數(shù)器可稱為裝置-原子計數(shù)器。舉例來說,可存在與緩沖器22的每一者相關聯(lián)的裝置-原子計數(shù)器。并且,PMU18或調(diào)度器40可經(jīng)配置以將令牌指派到每一內(nèi)核的每一線程,所述令牌界定所述線程產(chǎn)生的數(shù)據(jù)將存儲在緩沖器22中的相對位置。線程的此令牌可為裝置-原子計數(shù)器的當前值。
[0107]舉例來說,PMU18可向將首先消耗數(shù)據(jù)的第一消耗者線程指派令牌值0,向將第二個消耗數(shù)據(jù)的第二消耗者線程指派令牌值1,等等。這些消耗者線程的每一者可向PMU18請求裝置-原子計數(shù)器的值。如果裝置-原子計數(shù)器的當前值等于消耗者線程的令牌值,那么消耗者線程可消耗所述數(shù)據(jù)。否則,消耗者線程可不消耗所述數(shù)據(jù)。
[0108]在令牌值等于裝置-原子計數(shù)器的值的消耗者線程消耗數(shù)據(jù)之后,PMU18可更新裝置-原子計數(shù)器的值。在一些實例中,消耗者線程將消耗的數(shù)據(jù)量可為固定的,且PMU18可在從緩沖器22檢索固定數(shù)據(jù)量之后更新裝置-原子計數(shù)器的值。然而,在一些實例中,消耗者線程將消耗的數(shù)據(jù)量可不是固定的。在這些實例中,在消耗者線程完成接收數(shù)據(jù)之后,消耗者線程可向PMU18指示PMU18應增加裝置-原子計數(shù)器的值使得下一消耗者線程可消耗所述數(shù)據(jù)。以此方式,值可由PMU18存儲在寄存器44中并更新的裝置-原子計數(shù)器可確保維持數(shù)據(jù)將被消耗的次序,且不應不按次序接收數(shù)據(jù)的消耗者線程不會不按次序接收數(shù)據(jù)。
[0109]作為另一實例,PMU18可將信息存儲在寄存器44中以使死鎖的幾率最小化。舉例來說,如上文描述,處理器14可經(jīng)配置以界定緩沖器22的放大因子,其指示可由內(nèi)核的線程產(chǎn)生以供存儲在緩沖器22的一者中的元素的最大數(shù)目。如果內(nèi)核產(chǎn)生比放大因子界定的數(shù)據(jù)多的數(shù)據(jù),那么內(nèi)核可發(fā)生死鎖(例如,停止執(zhí)行)。處理器14可將放大因子的值提供到PMU18,且PMU18可將放大因子的值存儲在寄存器44內(nèi)。
[0110]在一些實例中,為使死鎖的幾率最小化,開發(fā)者可在內(nèi)核中包含請求放大因子的值的指令。執(zhí)行內(nèi)核的可編程計算單元28的一者可將對于放大因子的值的請求輸出到PMU18。PMU18又可向執(zhí)行內(nèi)核的可編程計算單元28的一者指示放大因子的值。如果可編程計算單元28確定由內(nèi)核的線程產(chǎn)生的數(shù)據(jù)量將大于放大因子,那么可編程計算單元28可一旦所產(chǎn)生數(shù)據(jù)的量等于放大因子就停止內(nèi)核的執(zhí)行,且可一旦已產(chǎn)生的數(shù)據(jù)被消耗就調(diào)度內(nèi)核的剩余線程的執(zhí)行。
[0111]除了用以使死鎖最小化的以上技術外或代替于以上技術,PMU18可實施事先調(diào)度,其中PMU18可將數(shù)據(jù)存儲在緩沖器22中直到所產(chǎn)生的數(shù)據(jù)等于放大因子為止。PMU18可接著將剩余數(shù)據(jù)存儲在緩沖器36中。換句話說,PMU18可確保將數(shù)據(jù)存儲在緩沖器22中的請求在“安全”范圍內(nèi),且將數(shù)據(jù)存儲在緩沖器22中的任何請求改為存儲在緩沖器36中。
[0112]圖3是說明根據(jù)本發(fā)明描述的一個或一個以上實例的實例技術的流程圖。如圖3中說明,可編程計算單元28的一者可在GPU16的著色器處理器26上執(zhí)行內(nèi)核的一個或一個以上線程(46)。在IC12內(nèi)或GPU16內(nèi)的PMU18可針對內(nèi)核的所述一個或一個以上線程從可編程計算單元28的所述一者接收將數(shù)據(jù)存儲到全局存儲器20 (其在IC12內(nèi)部)中或從全局存儲器20檢索數(shù)據(jù)的請求(48)。
[0113]PMU18可確定是否允許對請求數(shù)據(jù)的存儲或檢索的可編程計算單元28的所述一者的存取(50)。如果存取不可用(50的否),那么可編程計算單元28的所述一者可執(zhí)行內(nèi)核的額外線程(52)。在此實例中,PMU18可向可編程計算單元的所述一者指示何時存取可用。
[0114]如果存取可用(50的是),那么可編程計算單元28的所述一者可確定全局存儲器20中的緩沖器(例如,緩沖器22的一者)內(nèi)將存儲或檢索數(shù)據(jù)的位置(52)。舉例來說,PMU18可確定全局存儲器20內(nèi)將存儲數(shù)據(jù)或將從其檢索數(shù)據(jù)的位置(即,地址)(54)?;谒_定的位置,GPU16可接著將數(shù)據(jù)存儲到全局存儲器20內(nèi)的緩沖器22的一者內(nèi)的所確定的位置或從所述所確定的位置檢索數(shù)據(jù)(56)。
[0115]在一些實例中,為確定緩沖器22的所述一者內(nèi)的位置,PMU18可在內(nèi)核的所述一個或一個以上線程不指示全局存儲器20中將存儲或檢索數(shù)據(jù)的位置的情況下確定所述位置。以此方式,內(nèi)核不需要包含用于確定全局存儲器20內(nèi)將存儲數(shù)據(jù)或將從其檢索數(shù)據(jù)的位置的指令。
[0116]在一些實例中,PMU18可除所請求數(shù)據(jù)外還檢索數(shù)據(jù)。在這些實例中,PMU18可將額外數(shù)據(jù)存儲在高速緩沖存儲器34中。在一些實例中,PMU18可從處理器14接收緩沖器22的狀態(tài)信息。在這些實例中,PMU18可基于所接收的狀態(tài)信息確定緩沖器22的所述各者內(nèi)將存儲或檢索數(shù)據(jù)的位置。
[0117]圖4是說明根據(jù)本發(fā)明描述的一個或一個以上實例的另一實例技術的流程圖。如所說明,GPU16的著色器處理器26的第一可編程計算單元(例如,可編程計算單元28的一者)可執(zhí)行第一線程(58)。GPU16的著色器處理器26的第二可編程計算單元(例如,可編程計算單元28的另一者)可執(zhí)行第二不同線程(60)。
[0118]在包含GPU16的IC12內(nèi)的PMU18可從第一可編程計算單元接收將第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)存儲到全局存儲器20 (其在IC12外部)中的緩沖器(例如,緩沖器22的一者)的請求(62)。在此實例中,第一線程(例如,產(chǎn)生者線程)的執(zhí)行所產(chǎn)生的數(shù)據(jù)將由第二可編程計算單元執(zhí)行第二線程(例如,消耗者線程)消耗。并且,緩沖器可為先進先出(FIFO)緩沖器和環(huán)形緩沖器,其中環(huán)形緩沖器為FIFO緩沖器的一個實例。
[0119]PMU18可確定緩沖器內(nèi)將存儲第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)的位置出4)。IC12可將第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定的位置中出6)。應理解,將第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)存儲在緩沖器內(nèi)的所確定的位置中的IC12包含存儲數(shù)據(jù)的IC12、存儲數(shù)據(jù)的GPU16,和/或存儲數(shù)據(jù)的PMU18。換句話說,存儲數(shù)據(jù)的IC12表示IC12或IC12內(nèi)存儲數(shù)據(jù)的任何組件。
[0120]在一些實例中,PMU18可將緩沖器22的狀態(tài)信息存儲在IC12內(nèi)(例如,寄存器44內(nèi))。PMU18可從處理器14接收緩沖器22的此狀態(tài)信息。緩沖器22的狀態(tài)信息可包含緩沖器22的開始地址、緩沖器22的結束地址、緩沖器22內(nèi)將存儲所產(chǎn)生的數(shù)據(jù)的地址,以及緩沖器內(nèi)將檢索數(shù)據(jù)的地址中的一者或一者以上。在這些實例中,PMU18可基于緩沖器22的所存儲的狀態(tài)信息確定緩沖器內(nèi)將存儲第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)的位置。此外,在一些實例中,PMU18可在第一線程不指示緩沖器中將存儲數(shù)據(jù)的位置的情況下確定緩沖器內(nèi)將存儲第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)的位置。
[0121]PMU18還可從執(zhí)行第二線程的第二可編程計算單元接收檢索第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)的至少一些的請求。PMU18可確定第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)是否可用于檢索以供由執(zhí)行第二線程的第二可編程計算單元消耗。在一些實例中,PMU18可與從第一可編程計算單元接收存儲第一線程的執(zhí)行所產(chǎn)生的數(shù)據(jù)的請求同時、在此之前或之后接收來自第二可編程計算單元的請求。
[0122]當?shù)诙€程請求的數(shù)據(jù)不可用于檢索以供由執(zhí)行第二線程的第二可編程計算單元消耗時,PMU18可向第二可編程計算單元指示執(zhí)行第三線程。PMU18還可向第二可編程計算單元指示何時第二線程請求的數(shù)據(jù)可用于檢索以供由執(zhí)行第二線程的第二可編程計算單元消耗。當?shù)诙€程請求的數(shù)據(jù)可用于檢索以供由執(zhí)行第二線程的第二可編程計算單元消耗時,PMU18可進一步向第二可編程計算單元指示執(zhí)行第二線程以消耗第二線程請求的數(shù)據(jù)。
[0123]在一些情況下,第一線程可為內(nèi)核的產(chǎn)生者線程,且第二線程可為同一內(nèi)核的消耗者線程。在一些情況下,第一線程可為產(chǎn)生者內(nèi)核的線程,且第二線程可為消耗者內(nèi)核的線程。
[0124]圖5是進一步詳細說明圖1的裝置的框圖。舉例來說,圖5進一步說明裝置10。裝置10的實例包含(但不限于)無線裝置、移動電話、個人數(shù)字助理(PDA)、包含視頻顯示器的視頻游戲控制臺、移動視頻會議單元、膝上型計算機、桌上型計算機、電視機機頂盒、平板計算裝置、電子書閱讀器等。裝置10可包含處理器14、GPU16、全局存儲器20、顯示器68、用戶接口 70和收發(fā)器模塊72。在所說明的實例中,PMU18形成在GPU16內(nèi)。在一些實例中,PMU18可形成在容納GPU16的同一 IC( 即,IC12)內(nèi)。同樣如所說明,GPU16駐留在IC12內(nèi)。然而,處理器14也可駐留在IC12內(nèi)。
[0125]裝置10可包含圖4為清晰起見未圖示的額外模塊或單元。舉例來說,裝置10可包含揚聲器和麥克風(其均未在圖4中展示),以在裝置10為移動無線電話的實例中實行電話通信。此外,裝置10中展示的各個模塊和單元可能并非在裝置10的每個實例中均為必要的。舉例來說,在裝置10為桌上型計算機的實例中,用戶接口 70和顯示器68可在裝置10外部。作為另一實例,在顯示器68為移動裝置的觸敏或存在敏感顯示器的實例中用戶接口 70可為顯示器68的一部分。
[0126]圖4的處理器14、6?譏6、?1^18、和全局存儲器20可類似于圖1的處理器14、GPU16、PMU18、和全局存儲器20。用戶接口 70的實例包含(但不限于)跟蹤球、鼠標、鍵盤和其它類型的輸入裝置。用戶接口 70還可為觸摸屏且可作為顯示器68的一部分并入。收發(fā)器模塊72可包含用以允許裝置10與另一裝置或網(wǎng)絡之間的無線或有線通信的電路。收發(fā)器模塊72可包含調(diào)制器、解調(diào)器、放大器和用于有線或無線通信的其它此類電路。顯示器68可包括液晶顯示器(LCD)、陰極射線管(CRT)顯示器、等離子體顯示器、觸敏顯示器、存在敏感顯示器,或另一類型的顯示裝置。
[0127] 在一個或一個以上實例中,所描述的功能可實施在硬件、軟件、固件或其任何組合中。如果實施在軟件中,那么所述功能可作為一個或一個以上指令或代碼存儲在計算機可讀媒體上或經(jīng)由計算機可讀媒體發(fā)射并由基于硬件的處理單元執(zhí)行。計算機可讀媒體可包含計算機可讀存儲媒體(其對應于例如數(shù)據(jù)存儲媒體等有形媒體)或通信媒體,通信媒體包含促進例如根據(jù)通信協(xié)議將計算機程序從一處傳送到另一處的任何媒體。以此方式,計算機可讀媒體通常可對應于(I)非暫時性的有形計算機可讀存儲媒體,或(2)例如信號或載波等通信媒體。數(shù)據(jù)存儲媒體可為可由一個或一個以上計算機或一個或一個以上處理器存取以檢索指令、代碼和/或數(shù)據(jù)結構供本發(fā)明描述的技術實施的任何可用媒體。計算機程序產(chǎn)品可包含計算機可讀媒體。
[0128]借助實例而非限制,此類計算機可讀存儲媒體可包括RAM、ROM、EEPROM、CD-ROM或其它光盤存儲裝置、磁盤存儲裝置,或其它磁性存儲裝置、快閃存儲器,或可用于存儲指令或數(shù)據(jù)結構的形式的所要程序代碼且可由計算機存取的任何其它媒體。并且,任何連接適當稱為計算機可讀媒體。舉例來說,如果使用同軸電纜、光纖電纜、雙絞線、數(shù)字訂戶線(DSL)或例如紅外線、無線電和微波等無線技術從網(wǎng)站、服務器或其它遠程源發(fā)射軟件,那么同軸電纜、光纖電纜、雙絞線、DSL或例如紅外線、無線電和微波等無線技術包含于媒體的定義中。然而,應理解,計算機可讀存儲媒體和數(shù)據(jù)存儲媒體不包含連接、載波、信號或其它瞬時媒體,而是針對非瞬時有形存儲媒體。如本文中所使用,磁盤和光盤包含緊密光盤(CD)、激光光盤、光學光盤、數(shù)字多功能光盤(DVD)、軟磁盤和藍光光盤,其中磁盤通常以磁性方式再現(xiàn)數(shù)據(jù),而光盤使用激光以光學方式再現(xiàn)數(shù)據(jù)。上文的組合也應包含在計算機可讀媒體的范圍內(nèi)。
[0129]可由例如一個或一個以上數(shù)字信號處理器(DSP)、通用微處理器、專用集成電路(ASIC)、現(xiàn)場可編程邏輯陣列(FPGA)或其它等效集成或離散邏輯電路等一個或一個以上處理器來執(zhí)行所述指令。因此,如本文中所使用的術語“處理器”可指上述結構或適合于實施本文中所描述的技術的任一其它結構中的任一者。另外,在一些方面中,本文描述的功能性可提供在經(jīng)配置用于編碼和解碼的專門硬件和/或軟件模塊內(nèi),或并入在組合式編解碼器中。并且,可將所述技術完全實施于一個或一個以上電路或邏輯元件中。
[0130]本發(fā)明的技術可實施在廣泛多種裝置或設備中,包含無線手持機、集成電路(IC)或IC組(例如,芯片組)。本發(fā)明中描述各種組件、模塊或單元以強調(diào)經(jīng)配置以執(zhí)行所揭示的技術的裝置的功能方面,且不一定需要由不同硬件單元實現(xiàn)。而是,如上文描述,各個單元可組合在編解碼器硬件單元中或由互操作硬件單元的集合(包含如上文描述的一個或一個以上處理器)結合適宜的軟件和/或固件提供。
[0131]已描述了各種實例。這些和其它實例在所附權利要求書的范圍內(nèi)。
【權利要求】
1.一種用于以管線方式執(zhí)行數(shù)據(jù)處理操作的方法,所述方法包括: 在圖形處理單元GPU的著色器處理器的第一可編程計算單元上執(zhí)行第一線程; 在所述GPU的所述著色器處理器的第二可編程計算單元上執(zhí)行第二線程; 以包含所述GPU的集成電路IC內(nèi)的管理單元從所述第一可編程計算單元接收將通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)存儲到所述IC外部的全局存儲器中的緩沖器中的請求,其中通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將被所述第二可編程計算單元執(zhí)行所述第二線程消耗,且其中所述緩沖器包括先進先出FIFO緩沖器和環(huán)形緩沖器中的一者; 以所述管理單元確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將被存儲在所述緩沖器內(nèi)的位置;以及 用所述IC將通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)存儲在所述緩沖器內(nèi)的所述所確定位置中。
2.根據(jù)權利要求1所述的方法,其進一步包括: 以所述管理單元存儲所述IC內(nèi)的所述緩沖器的狀態(tài)信息,其中所述緩沖器的所述狀態(tài)信息包含所述緩沖器的開始地址、所述緩沖器的結束地址、所述緩沖器內(nèi)將存儲所產(chǎn)生的數(shù)據(jù)的地址,以及所述緩沖器內(nèi)將檢索數(shù)據(jù)的地址中的一者或一者以上, 其中確定所述緩沖器內(nèi)的所述位置包括基于所述緩沖器的所述所存儲的狀態(tài)信息確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的位置。
3.根據(jù)權利要求1所述的方法,其進一步包括: 以所述管理單元從執(zhí)行所述第二線程的所述第二可編程計算單元接收檢索通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)的至少一些的請求;以及 以所述管理單元確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)是否可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗。
4.根據(jù)權利要求3所述的方法,其中從所述第二可編程計算單元接收所述請求包括與從所述第一可編程計算單元接收存儲通過所述執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)的所述請求同時、在此之前或之后從所述第二可編程計算單元接收所述請求。
5.根據(jù)權利要求3所述的方法,其進一步包括: 當所述第二線程請求的所述數(shù)據(jù)不可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗時,以所述管理單元向所述第二可編程計算單元指示執(zhí)行第三線程;以所述管理單元向所述第二可編程計算單元指示何時所述第二線程請求的所述數(shù)據(jù)可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗;以及 當所述第二線程請求的所述數(shù)據(jù)可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗時,以所述管理單元向所述第二可編程計算單元指示執(zhí)行所述第二線程以消耗所述第二線程請求的所述數(shù)據(jù)。
6.根據(jù)權利要求3所述的方法,其進一步包括: 以所述管理單元從所述全局存儲器檢索除所述第二線程請求的所述數(shù)據(jù)外的數(shù)據(jù);以及 以所述管理單元將除所述第二線程請求的所述數(shù)據(jù)外的所述數(shù)據(jù)存儲在所述IC內(nèi)的高速緩沖存儲器中。
7.根據(jù)權利要求1所述的方法,其中執(zhí)行所述第一線程包括執(zhí)行內(nèi)核的產(chǎn)生者線程,且其中執(zhí)行所述第二線程包括執(zhí)行所述內(nèi)核的消耗者線程。
8.根據(jù)權利要求1所述的方法,其中執(zhí)行所述第一線程包括執(zhí)行產(chǎn)生者內(nèi)核的所述第一線程,且其中執(zhí)行所述第二線程包括執(zhí)行消耗者內(nèi)核的線程。
9.根據(jù)權利要求1所述的方法,其中所述GPU包含所述管理單元。
10.根據(jù)權利要求1所述的方法,其中確定所述緩沖器內(nèi)的所述位置包括在所述第一線程不指示所述數(shù)據(jù)將存儲在所述緩沖器中的所述位置的情況下確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的所述位置。
11.一種設備,其包括: 包含緩沖器的全局存儲器,其中所述緩沖器包括先進先出FIFO緩沖器和環(huán)形緩沖器中的一者; 集成電路1C,其包括: 圖形處理單元GPU,所述GPU包括: 經(jīng)配置以執(zhí)行第一線程的第一可編程計算單元;以及 經(jīng)配置以執(zhí)行第二線程的第二可編程計算單元;以及 管理單元,其經(jīng)配置以: 從所述第一可編程計算單元接收將通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)存儲到所述全局存儲器中的所述緩沖 器中的請求,其中通過執(zhí)行第一線程而產(chǎn)生的所述數(shù)據(jù)將由所述第二可編程計算單元執(zhí)行所述第二線程消耗;且 確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的位置, 其中所述IC經(jīng)配置以將通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)存儲在所述緩沖器內(nèi)的所述所確定位置中。
12.根據(jù)權利要求11所述的設備, 其中所述管理單元經(jīng)配置以存儲所述IC內(nèi)的所述緩沖器的狀態(tài)信息, 其中所述緩沖器的所述狀態(tài)信息包含所述緩沖器的開始地址、所述緩沖器的結束地址、所述緩沖器內(nèi)將存儲所產(chǎn)生的數(shù)據(jù)的地址,以及所述緩沖器內(nèi)將檢索數(shù)據(jù)的地址中的一者或一者以上,且 其中所述管理單元經(jīng)配置以基于所述緩沖器的所述所存儲的狀態(tài)信息確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的位置。
13.根據(jù)權利要求11所述的設備,其中所述管理單元經(jīng)配置以: 從執(zhí)行所述第二線程的所述第二可編程計算單元接收檢索通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)的至少一些的請求;且 確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)是否可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗。
14.根據(jù)權利要求13所述的設備,其中所述管理單元經(jīng)配置以與從所述第一可編程計算單元接收存儲通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)的所述請求同時、在此之前或之后從所述第二可編程計算單元接收所述請求。
15.根據(jù)權利要求13所述的設備,其中所述管理單元經(jīng)配置以: 當所述第二線程請求的所述數(shù)據(jù)不可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗時,向所述第二可編程計算單元指示執(zhí)行第三線程;向所述第二可編程計算單元指示何時所述第二線程請求的所述數(shù)據(jù)可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗;且 當所述第二線程請求的所述數(shù)據(jù)可用于檢索以供由所述第二可編程計算單元執(zhí)行所述第二線程消耗時,向所述第二可編程計算單元指示執(zhí)行所述第二線程以消耗所述第二線程請求的所述數(shù)據(jù)。
16.根據(jù)權利要求13所述的設備,其中所述管理單元經(jīng)配置以: 從所述全局存儲器檢索除所述第二線程請求的所述數(shù)據(jù)外的數(shù)據(jù);且 將除所述第二線程請求的所述數(shù)據(jù)外的所述數(shù)據(jù)存儲在所述IC內(nèi)的高速緩沖存儲器中。
17.根據(jù)權利要求11所述的設備,其中所述第一線程包括內(nèi)核的產(chǎn)生者線程,且所述第二線程包括所述內(nèi)核的消耗者線程。
18.根據(jù)權利要求11所述的設備,其中所述第一線程包括產(chǎn)生者內(nèi)核的線程,且所述第二線程包括消耗者內(nèi)核的線程。
19.根據(jù)權利要求11所述的設備,其中所述GPU包含所述管理單元。
20.根據(jù)權利要求11所述的設備,其中所述管理單元經(jīng)配置以在所述第一線程不指示所述數(shù)據(jù)將存儲在所述緩沖器中的所述位置的情況下確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所 述緩沖器內(nèi)的所述位置。
21.根據(jù)權利要求11所述的設備,其中所述設備包括視頻裝置、機頂盒、無線手持機、個人數(shù)字助理、臺式計算機、膝上型計算機、游戲控制臺、視頻會議單元和平板計算裝置中的一者。
22.—種設備,其包括: 包含緩沖器的全局存儲器,其中所述緩沖器包括先進先出FIFO緩沖器和環(huán)形緩沖器中的一者;以及 集成電路1C,其包括: 圖形處理單元GPU,其包括: 用于執(zhí)行第一線程的裝置;以及 用于執(zhí)行第二線程的裝置;以及 用于從所述用于執(zhí)行所述第一線程的裝置接收將通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)存儲到所述全局存儲器中的所述緩沖器中的請求,其中通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將由所述用于執(zhí)行所述第二線程的裝置消耗; 用于確定由所述用于執(zhí)行所述第一線程的裝置產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的位置;以及 用于將通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)存儲在所述緩沖器內(nèi)的所述所確定位置中的裝置。
23.—種上面存儲有指令的計算機可讀存儲媒體,所述指令當被執(zhí)行時致使一個或一個以上處理器: 在圖形處理單元GPU的著色器處理器的第一可編程計算單元上執(zhí)行第一線程; 在所述GPU的所述著色器處理器的第二可編程計算單元上執(zhí)行第二線程; 用包含所述GPU的集成電路IC內(nèi)的管理單元從所述第一可編程計算單元接收將通過執(zhí)行所述第一線程而產(chǎn)生的數(shù)據(jù)存儲到所述IC外部的全局存儲器中的緩沖器中的請求,其中通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將由所述第二可編程計算單元執(zhí)行所述第二線程消耗,且其中所述緩沖器包括先進先出FIFO緩沖器和環(huán)形緩沖器的一者; 以所述管理單元確定通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)將存儲在所述緩沖器內(nèi)的位置;以及 用所述IC將通過執(zhí)行所述第一線程而產(chǎn)生的所述數(shù)據(jù)存儲在所述緩沖器內(nèi)的所述所確定位置 中。
【文檔編號】G06F9/50GK104081449SQ201380006620
【公開日】2014年10月1日 申請日期:2013年1月24日 優(yōu)先權日:2012年1月27日
【發(fā)明者】阿列克謝·V·布爾多, 維尼特·戈爾 申請人:高通股份有限公司