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