新四季網

用於異構cpu-gpu計算的執行模型的製作方法

2023-07-06 04:19:21

用於異構cpu-gpu計算的執行模型的製作方法
【專利摘要】技術一般涉及在圖形處理單元GPU上實施數據處理算法的管線拓撲。開發者可以平臺獨立的方式界定所述管線拓撲。處理器可接收所述管線拓撲的指示且產生界定將在所述GPU上實施所述管線拓撲的平臺相依的方式的指令。
【專利說明】用於異構CPU-GPU計算的執行模型
[0001]本申請案主張2012年2月27日申請的美國臨時申請案61/603,771的權益,所述申請案的全部內容在此以全文引用的方式併入本文中。

【技術領域】
[0002]本發明涉及應用的執行,且更確切地說,涉及各種處理單元中的應用的執行。

【背景技術】
[0003]圖形處理單元(GPU)正用於除圖形處理之外的目的。舉例來說,非圖形相關應用可通過採用GPU的大量並行度而以增加的速度執行。此已導致提供額外的非圖形相關處理功能性並且被稱作通用GPU(GPGPU)的GPU。舉例來說,GPGPU包含一或多個著色器核心,並且所述著色器核心經配置以執行例如圖形相關應用以及非圖形相關應用等應用。


【發明內容】

[0004]一般來說,本發明涉及用於產生用於實施計算管線的執行模型的技術。舉例來說,多個數據處理算法可表示為計算管線,其中所述管線的一個單元接收並處理數據,並輸出所述經處理數據以供所述管線的另一單元進一步處理。本發明中描述的技術可允許以一種方式表示所述計算管線,使得其可在各種類型的平行計算裝置上有效地被執行,其一實例是圖形處理單元(GPU)。舉例來說,所述技術可以平臺獨立的方式表示所述計算管線(例如,不取決於將實施所述計算管線的計算裝置)。
[0005]通過所述計算管線的表示,所述技術可利用平臺相依的編譯來產生可用的計算裝置專有的指令,例如可用的GPU或甚至中央處理單元(CPU)。舉例來說,所述計算管線可以平臺獨立的方式來界定並且編譯器產生將在其上實施所述計算管線的平臺專有的指令。
[0006]在一個實例中本發明描述一種用於異構計算的方法。所述方法包含使用處理器接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲。所述方法還包含使用所述處理器產生指令,所述指令指示將在圖形處理單元(GPU)上實施所述執行模型的管線拓撲的平臺相依的方式。在此實例中,將在所述GPU上實施所述執行模型的管線拓撲的所述平臺相依的方式是基於GPU的平臺。所述方法還包含使用所述處理器將所述指令傳輸到所述GPU。
[0007]在一個實例中,本發明描述一種設備。所述設備包含圖形處理單元(GPU)和處理器。所述處理器經配置以接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲的指示。所述處理器還經配置以產生指令,所述指令指示將在GPU上實施所述執行模型的管線拓撲的平臺相依的方式。在此實例中,將在所述GPU上實施所述執行模型的管線拓撲的所述平臺相依的方式是基於GPU的平臺。所述處理器還經配置以將所述指令傳輸到所述GPU。
[0008]在一個實例中,本發明描述一種計算機可讀存儲媒體,所述計算機可讀存儲媒體具有儲存在其上的指令,所述指令在由一或多個處理器執行時致使所述一個或多個處理器接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲。所述指令還致使所述一個或多個處理器產生指令,所述指令指示將在圖形處理單元(GPU)上實施所述執行模型的所述管線拓撲的平臺相依的方式。在此實例中,將在所述GPU上實施所述執行模型的管線拓撲的所述平臺相依的方式是基於GPU的平臺。所述指令還致使所述一個或多個處理器將所述指令傳輸到所述GPU。
[0009]在一個實例中,本發明描述一種設備。所述設備包含圖形處理單元(GPU)和處理器。所述處理器包含用於接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲的裝置。所述處理器還包含用於產生指令的裝置,所述指令指示將在GPU上實施所述執行模型的管線拓撲的平臺相依的方式。在此實例中,將在所述GPU上實施所述執行模型的管線拓撲的所述平臺相依的方式是基於GPU的平臺。所述處理器還包含用於將所述指令傳輸到所述GPU的裝置。所述處理器還包含用於將所述指令傳輸到所述GPU的裝置。
[0010]一個或一個以上實例的細節陳述於附圖及以下描述中。其它特徵、目標和優點將從所述描述和圖式以及權利要求書而顯而易見。

【專利附圖】

【附圖說明】
[0011]圖1是說明執行模型的實例的概念圖。
[0012]圖2是說明根據本發明中所描述的一或多個實例的裝置的實例的框圖。
[0013]圖3是說明根據本發明所描述的一或多個實例的實例技術的流程圖。
[0014]圖4是進一步詳細地說明圖2的裝置的框圖。

【具體實施方式】
[0015]圖形處理單元(GPU)可經配置以並行地快速並且有效地處理數據。開發者可以在GPU上執行的應用的形式開發數據處理算法。舉例來說,GPU可包含著色器處理器,其經配置以執行一或多個應用。這些應用的實例包含著色器程序,例如頂點著色器、殼著色器、幾何著色器、以及與圖形處理相關的其它此類應用。
[0016]此外,某些應用開發者可認為採用GPU的大型並行度且在GPU上執行非圖形相關應用是有益的。舉例來說,由GPU提供的處理平行度可適合於執行並行矩陣操作,甚至當所述矩陣操作與圖形處理不相關時也如此。非圖形相關應用的其它實例包含與流體動力學或線性代數相關的技術,其中並行操作的快速執行可為有益的。所述非圖形相關應用還可在所述著色器處理器上執行。
[0017]能夠執行此類非圖形相關應用的GPU可被視為通用GPU(GPGPU)。舉例來說,當GPU執行非圖形相關應用時相關申請案所述GPU充當GPGPU。大部分GPU可經配置以充當GPGPU。
[0018]出於說明的目的,本發明相對於充當GPGPU的GPU描述多種技術。然而,所述技術不限於其中GPU充當GPGPU(即,執行非圖形相關應用)的例子,並且所述技術還可適用於其中GPU執行圖形相關應用的例子。此外本發明中描述的技術可由任何類型的處理單元實施,例如中央處理單元(CPU)、加速器、或任何其它定製的裝置。雖然相對於GPU所述技術,但應理解,所述技術可擴展到其它類型的處理單元。
[0019]GPU內的著色器處理器可包含多個著色器核心(還被稱作可編程計算單元以指示這些核心可執行用於圖形及非圖形相關應用兩者的指令)。所述可編程計算單元中的每一者可包含為了將由所述可編程計算單元執行的指令以及由指令的執行而產生的數據(例如,在指令的執行期間而產生的中間結果)而保留的本地存儲器。所述可編程計算單元的本地存儲器可能不可由其它可編程計算單元存取。在一些情況下,將在GPU上執行的不同應用可由不同可編程計算單元執行。
[0020]在本發明中描述的技術中,圖形相關應用被稱作著色器,並且非圖形相關應用被稱作內核。舉例來說,著色器(即,圖形相關應用)的實例包含(但不限於)頂點著色器、片段著色器及幾何著色器。內核(即,非圖形相關應用)的實例包含用以執行矩陣操作、流體動力學、圖像處理操作、視頻處理操作及類似者的應用。
[0021]此外,所述內核不一定需要限於僅由執行的應用,而是還包含GPU的固定功能單元(即,非可編程單元)。僅出於說明的目的,本發明中描述的技術是相對於所述內核是在GPU上執行的應用來描述的。舉例來說,所述技術是相對於在GPU的著色器處理器上執行的非圖形相關應用來描述的,使得GPU充當GPGPU。
[0022]內核可包含工作群組、任務或線程(其全部在本發明中同義地使用)。舉例來說,線程可為所述內核的可與所述內核的另一線程獨立地執行的一組指令。在一些實例中,為了執行內核,可編程計算單元中的一或多者可各自執行所述內核的一或多個線程。舉例來說第一可編程計算單元可執行所述內核的第一線程,並且第二可編程計算機單元可執行同一內核的第二線程。在一些實例中,一個可編程計算單元可執行一個內核的一或多個線程,而另一可編程計算單元執行另一內核的一或多個線程。在一些實例中,所述兩者的組合可為可能的(即,某些可編程計算單元執行同一內核的不同線程,而某些其它可編程計算單元執行不同內核的線程)。
[0023]雖然GPU提供處理的大規模平行度,但例如內核的開發者等開發者可認為難以開發在各種類型的GPU上以管線方式有效地執行的內核。以管線方式執行內核意味著執行內核以使得由一個內核產生的數據由另一內核消耗。作為另一實例,以管線方式執行內核意味著執行內核的線程,其產生將由同一內核的另一線程消耗的數據。在本發明中,產生所述數據的線程可被稱為產生者線程並且接收所述數據的線程可被稱為消費者線程。
[0024]在一些實例中,所述產生者線程及所述消費者線程可為同一內核的線程。在一些實例中,所述產生者線程及所述消費者線程可為不同內核的線程。在這些實例中,包含所述產生者線程的內核可被稱為產生者內核,並且包含所述消費者線程的內核可被稱為消費者內核。
[0025]作為一個實例,為了實施數據處理算法,例如圖像處理或視頻處理,開發者可開發多個內核,其中每一內核實施整個算法的一部分。第一內核可接收待處理的數據(例如,非圖形相關數據)、處理所述數據,並且輸出所述數據以供第二內核消耗。所述第二內核可接收由所述第一內核輸出的數據、進一步處理所述數據,並且輸出所述數據以供第三內核消耗,以此類推。
[0026]在此實例中,所述第一、第二和第三內核可被設想為形成管線,藉此第一內核(例如,產生者內核)產生將由第二內核(例如,從第一內核的角度的消費者內核)消耗的數據。所述第二內核產生將由第三內核消耗的數據。在此實例中,所述第二內核是從所述第三內核的角度的產生者內核,並且所述第三內核是消費者內核。以此方式,GPU可以管線方式執行所述第一、第二和第三內核。
[0027]在一些實例中,以管線方式執行內核可意味著依序執行所述內核(例如,執行第一內核,接著執行第二內核,接著執行第三內核,以此類推)。然而,本發明中描述的技術不限於此。在一些實例中,以管線方式執行內核可意味著並行地(例如,同時或在實際上重疊)執行內核。舉例來說,GPU可同時執行所述第一、第二和第三內核中的兩者或更多者,即使第二內核是第一內核的消費者內核,並且第三內核是第二內核的消費者內核也如此。
[0028]雖然開發者可能夠開發以管線方式執行以實施數據處理算法的內核,但開發者可能不能夠確保所述內核跨各種類型的GPU的最佳執行。舉例來說,開發者可編寫在處理器上執行的指令。這些指令致使處理器指令所述GPU何時執行內核。如上文所描述,所述內核可在一或多個計算單元上執行;然而,開發者可能不知道特定GPU上可用的計算單元的數目,或更一般來說,不知道特定GPU的並行處理能力。
[0029]在此情況下,開發者可不能夠預先確定內核應何時執行,因為開發者不知曉所述GPU的處理能力。此可導致開發者編寫不同指令,所述指令各自指定給不同類型的GPU。舉例來說,開發者可編寫在所述處理器上執行的第一組指令,所述指令特定針對於第一 GPU類型。舉例來說,如果第一類型包含三個計算單元,那麼所述第一組指令可界定將在GPU上使用三個計算單元執行內核的方式。開發者還可編寫在處理器上執行的第二組指令,所述指令特定針對於第二 GPU類型。舉例來說,如果第二類型包含四個計算單元,那麼所述第二組指令可界定將在GPU上使用四個計算單元執行內核的方式。
[0030]在一些實例中,不針對不同的GPU類型編寫指令,開發者可僅針對一種類型的GPU (例如,假定最差情況情境GPU)編寫指令。在這些實例中,僅一種類型的GPU可能夠有效地實施數據處理算法,並且其它GPU類型可能不有效地實施所述數據處理算法。
[0031]換句話說,可能不存在開發者可編寫指令的致使內核以有效方式在GPU上執行的平臺獨立方式。而是,開發者可能編寫在其它GPU類型上低效地執行的通用指令(例如,其不取決於GPU類型)。否則,開發者可編寫產生非便攜指令的平臺相依的指令。舉例來說,開發者可能必須針對不同GPU類型中的每一者編寫單獨的指令,其可為過度繁瑣的。
[0032]本發明中描述的技術允許有效地執行內核而以平臺獨立方式實施數據處理算法(即,用於異構計算)。在本發明中描述的技術中,異構計算涉及以平臺獨立方式進行計算。如更詳細描述的,根據本發明中描述的技術,開發者指定內核的管線執行模型來用於實施所述數據處理算法。
[0033]為了指定所述管線執行模型,開發者可界定所述管線的拓撲。所述管線的拓撲可被視為包含互連的內核及緩衝器的執行圖表。舉例來說,如果第一內核將產生將由第二內核消耗的數據。開發者可界定所述拓撲以使得所述第一內核耦合到緩衝器,例如先入先出(FIFO)緩衝器,並且所述緩衝器耦合到所述第二內核。在此實例中,所述執行圖表可指示第一內核將把數據輸出到緩衝器,並且第二內核將從緩衝器接收數據。
[0034]除了界定所述拓撲之外,開發者還可界定所述拓撲的特徵以作為執行模型的一部分。作為一個實例,開發者可界定每一內核的放大因數。所述放大因數可指示所述內核將針對所述內核將接收的給定量的數據而產生的最大量的數據。舉例來說,如果所述放大因數對於內核是五,並且所述內核接收兩個數據包,那麼所述內核將產生的最大量的數據是十個數據包。
[0035]作為另一實例,開發者可界定所述緩衝器的大小。舉例來說,開發者可界定緩衝器的寬度(例如,可存儲在緩衝器的存儲位置內的數據的量)及緩衝器的長度(例如,緩衝器內的存儲位置的數目)。
[0036]以此方式,開發者可界定用於數據處理算法的平臺獨立的執行模型。舉例來說,開發者可不需要顧及將在其上實施數據處理算法的特定GPU。而是,每一 GPU類型的執行模型可為相同的。
[0037]本發明中描述的技術可允許開發者以有限制的方式界定執行模型。舉例來說,開發者可充分界定需要哪些內核,且哪些內核形成為產生者內核及哪些內核形成為消費者內核。以有限制的方式界定所述執行模型可被視為界定靜態執行模型(例如,在執行之前界定的執行模型)。
[0038]以有限制的方式界定所述執行模型與以無限制的方式界定執行模型相比可實現計算效率上的增益。在執行模型的無限制的界定中,開發者在執行之前可不界定將需要的內核的數目,或哪些內核將是產生者內核及哪些內核將是消費者內核(即,不界定所述內核之間的互連)。與有限制的執行模型相比,此可產生無限制的執行模型的次最佳性能。
[0039]舉例來說,在本發明中描述的技術中,處理器可接收執行模型且可將所述執行模型編譯為可由GPU處理的目標代碼(即,二進位代碼)。所述編譯步驟可為平臺相依的步驟。舉例來說,處理器可被預先配置有信息,所述信息指示將在其上實施數據處理算法的GPU的處理能力。作為一個實例,處理器可被預先配置有指示GPU內的計算單元的數目的信肩、O
[0040]在編譯步驟中,處理器可產生用於元調度器的指令。元調度器可為在GPU上執行的軟體或可為GPU內的硬體。用於所述元調度器的指令可界定將執行所述執行模型的方式。在此實例中,因為所述執行模型可為有限制的(例如,內核的數目及內核的互連是已知的)且處理器可被預先配置有指示的處理能力的信息,所以編譯器可能夠界定用於所述元調度器的指令,所述指令優化GPU實施所述執行模型的方式。對於無限制的執行模型,內核的數目及其相應的互連可不是已知的,且編譯器可不能夠恰當地優化GPU上的執行模型的執行。
[0041]圖1是說明執行模型的實例的概念圖。舉例來說,圖1說明執行模型10。開發者可界定用以實施數據處理算法的執行模型10。舉例來說,開發者可界定用以實施圖像處理、視頻處理、線性代數操作,或計算流體動力學的算法的執行模型10。一般來說開發者可界定用以實施任何數據處理算法的執行模型10,所述數據處理算法利用由圖形處理單元(GPU)提供的大規模並行計算效率,包含用於非圖形相關目的。在其中GPU實施非圖形相關算法的實例中,GPU可被視為像通用GPU(GPGPU) —樣起作用。
[0042]如所說明,執行模型10包含緩衝器12A到12D及內核14A到14C。在一些實例中,可存在比圖1中說明的緩衝器及內核更多或更少的緩衝器及內核。緩衝器12A到12D的實例包含(但不限於)先入先出(FIFO)緩衝器及環形緩衝器。
[0043]內核14A-14C的實例包含由開發者開發的應用,所述應用實施執行模型10經界定以實施的整個數據處理算法的至少一部分。開發者可利用任何程式語言來開發內核14A到14C。
[0044]可存在開發者可界定執行模型10的各種方式。作為一個實例,開發者可在例如桌上型計算機或膝上型計算機等計算裝置上界定執行模型。開發者可在呈現圖形用戶接口(GUI)的計算裝置上執行應用。開發者可利用所述GUI以圖1中所說明的方式將緩衝器12A到12D及內核14A到14C互連。此外,開發者可利用所述⑶I界定緩衝器12A到12D及內核14A到14D的特性。
[0045]作為另一實例,開發者可根據特定應用處理接口(API)來界定利用命令的執行模型。此類API的實例包含Microsoft?的DirectX? AP1、Khronos集團的OpenGL?,及Khronos集團的OpcnCL? ;然而,本發明的方面不限於DirectX、OpenGL或OpenCL API,而是可擴展到已經開發、當前正在開發,或將來待開發的其它類型的API。此外,不需要本發明中描述的技術根據API而起作用。
[0046]舉例來說,命令可包含指示開發者正在界定執行模型的命令。所述命令還可包含允許開發者界定緩衝器12A到12D及內核14A到14C屬於執行模型10且界定將緩衝器12A到12D及內核14A到14C互連的方式的命令。
[0047]在任一實例(即,基於GUI或基於命令)中,在其上開發者界定的執行模型10可轉換執行模型10的計算裝置包含指定執行模型10的拓撲的命令列表。舉例來說,如所說明,內核14A接收來自緩衝器12A的數據、處理所述數據,且將所述數據存儲在緩衝器12B及12C中。內核14B接收來自緩衝器12B的數據、處理所述數據,且將所述數據存儲在緩衝器12D中。內核14C接收來自緩衝器12D及12C的數據且處理所述數據。
[0048]以此方式,緩衝器12A到12D以及內核14A到14C經配置為計算管線。舉例來說,內核14A是內核14B和14C的產生者內核。內核14B是內核14A的消費者內核及內核14C的產生者內核。內核14C是內核14A和14B兩者的消費者內核。
[0049]為了輔助理解,圖1可被視為說明執行模型10的管線拓撲。舉例來說,開發者可被視為界定執行圖表,所述執行圖表界定執行模型10的管線拓撲。在此執行圖表中,內核14A到14C可被視為與緩衝器12A到12D互連的節點。
[0050]在一些實例中,開發者還可將不同的執行模型互連。舉例來說,不是界定用於數據處理算法的一個執行模型,開發者可開發多個執行模型,其中每一執行模型實施數據處理算法的一部分。在這些實例中,執行模型中的每一者內的內核可實施整個數據處理算法的所述部分的子部分。開發者可以類似於將內核14A到14C及緩衝器12A到12D互連的方式將實施執行模型互連。舉例來說,開發者可將緩衝器12A互連到另一執行模型且/或將內核14C互連到另一執行模型。
[0051]界定多個執行模型可為有益的。如更詳細地描述,處理器可將例如執行模型10等執行模型編譯為目標代碼且存儲所得的目標代碼。在其中執行模型10是多個執行模型中的一者的實例中,處理器可能不需要重新編譯執行模型10。換句話說,可將執行模型視為用於整個數據處理算法的建築塊,或可界定數據處理算法的整體。於是不需要針對其中使用執行模型的每個例子重新編譯通常使用的執行模型。
[0052]除了界定執行模型10的拓撲之外,開發者還可界定緩衝器12A到12D及內核14A到14D的特性。開發者可使用上文所描述的GUI或基於命令的格式來界定所述特性。開發者可界定緩衝器12A到12D內的存儲位置的數目(即,緩衝器12A到12D的長度)。開發者還可界定可存儲於緩衝器12A到12D的每一存儲位置內的數據量(即,緩衝器12A到12D的寬度)。
[0053]在一些實例中,開發者可界定緩衝器12A到12D的尺寸。舉例來說,例如卷積等一些圖像處理技術發生在像素塊(例如,7X7像素塊)上。在這些實例中,緩衝器12A到12D是二維緩衝器從而以塊形式存儲像素可為有益的。舉例來說,如果像素塊是7X7像素塊,那麼緩衝器12A到12D中的一或多者可被配置有7X7個存儲位置(即,配置為二維緩衝器),而不是具有49個存儲位置的線性緩衝器。
[0054]對於內核14A到14C,作為一個實例,開發者可界定放大因數。所述放大因數可指示所述內核針對所述內核所消耗的給定數據量而產生的最大數據量。舉例來說,如果內核14B的所述放大因數是二,並且內核14B從緩衝器12B接收五個數據包,那麼內核14B將產生的最大數據量是十個數據包。作為另一實例,對於內核14A到14C中的一或多者,開發者還可界定內核將產生的最大數據量(例如,獨立於所接收的數據量)。
[0055]作為又另一實例,開發者可將相對重要性指派給內核14A到14C。舉例來說,所述重要性可指示內核14A到14C中的哪一者應無中斷地執行,使得內核14A到14C中的更重要的內核無中斷地執行,而內核14A到14C中的較不重要的內核可無中斷地或中斷地執行(即,間歇地暫停所述執行以可用於其它執行)。
[0056]內核14A到14C及緩衝器12A到12D的特性是出於說明的目的而描述,切不應被視為是限制性的。開發者可能不需要界定上文所描述的所有實例特性。舉例來說,開發者可能界定緩衝器12A到12D的大小(例如,長度和寬度),且不界定內核14A到14C的任何特性。在這些實例中,內核14A到14C產生或消耗的數據量可為不重要的,因為緩衝器12A到12D的大小已經界定。作為另一實例,開發者可界定內核14A到14C產生的數據的放大因數或最大量,且不界定緩衝器12A到12D的任何特性。在這些實例中,編譯執行模型10的處理器可能夠基於內核14A到14C產生的數據的所述放大因數和/或最大量而確定緩衝器12A到12D的大小。而且,在這些實例中,編譯執行模型10的處理器可能夠確定緩衝器12A到12D是應為一維(即,線性)緩衝器還是多維緩衝器。
[0057]一般來說,開發者或處理器可確定內核14A到14C和緩衝器12A到12D的特性以避免「死鎖」情形,同時確保緩衝器12A到12D不過大。當消費者內核期望未存儲於消費者內核從其接收數據的緩衝器中的數據時,或當緩衝器數據溢出時(因為產生者內核比消費者內核消耗數據更快地存儲數據),可發生死鎖情形。在死鎖情形中,內核可「懸掛」,且停止實施數據處理算法,除非採取額外的步驟來確保內核不在死鎖情形中懸掛。在一些例子中,界定內核14A到14C及緩衝器12A到12D的特性可為較佳的,使得不發生死鎖,而不是配置GPU來實施額外的任務來避免在發生死鎖時懸掛。
[0058]開發者或處理器界定大小相對大的緩衝器12A到12D來減輕死鎖可為可能的。然而,如果緩衝器12A到12D的大小不必要地大,那麼處理器可能要比所需的存儲器空間為緩衝器12A到12D保留多得多的存儲器空間,這可導致低效的存儲器使用。
[0059]因此,通過界定緩衝器12A到12D和/或內核14A到14C的特性,開發者可能夠界定執行模型10,使得降低死鎖的機會,同時有效地使用存儲器。以此方式,開發者可界定完全有限制的靜態執行模型10。舉例來說,開發者可在實施之前界定實施執行模型10所需的內核14A到14C及緩衝器12A到12D的數目以及緩衝器12A到12D和/或內核14A到14C的特性,而不是動態地(即,在實施期間)界定實施執行模型10所需的內核和緩衝器的數目。
[0060]開發者可將執行模型10存儲在包含實施數據處理算法的GPU的裝置上。舉例來說,開發者可存儲命令列表,所述命令列表指定包含GPU的裝置上的執行模型10的管線拓撲。在一些實例中,開發者不將執行模型10存儲在裝置上,裝置的用戶可下載執行模型10以供存儲在裝置上。一般來說,包含實施數據處理算法的GPU的裝置存儲執行模型10的方式可不是對本發明中所描述的技術的約束。換句話說,可利用任何技術將執行模型10(例如,執行模型10的命令的列表)存儲在包含將在其上實施數據處理算法的GPU的裝置上。舉例來說,開發者在其上界定執行模型10的計算裝置是包含將實施數據處理算法的GPU的相同計算裝置可甚至是可能的。
[0061]如更詳細地描述,包含GPU的裝置還可包含處理器。所述處理器可接收執行模型10且將執行模型10編譯為目標代碼,GPU將執行所述目標代碼來實施由執行模型10界定的數據處理算法。根據本發明中所描述的技術,處理器可在慮及GPU的處理能力的情況下編譯執行模型10。
[0062]因此,開發者可以平臺獨立的方式界定執行模型10的管線拓撲(即,不考慮將實施數據處理算法的GPU的類型)。包含GPU的裝置的處理器可基於執行模型10產生指令,所述指令界定GPU將實施執行模型10的方式。舉例來說,處理器可編譯執行模型10,且產生指令以作為所述編譯的部分。在執行模型10的編譯期間,處理器可慮及GPU的處理能力。以此方式,處理器可優化執行模型10以用於在GPU上實施。這可允許開發者將執行模型10開發為產生高度便攜的執行模型的靈活且容易理解的方式(即,可有效地實施於不同類型的GPU上以用於異構計算的模型)。開發者可不需要在GPU的平臺專有或實施方案界定的行為中關注自身。
[0063]此外,以有限制的方式界定孩子廈門行10可允許對執行模型10進行某一內置的調試。作為一個實例,界定執行模型10可減少死鎖的機會,如上文所描述。另外,對於無限制的執行模型,以下情況可為可能的:開發者界定第一內核以輸出將由第二內核消耗的數據,且在實施期間無意地界定第二內核以致使第一內核執行,使得所述第一內核消耗由第二內核產生的數據。這實際上產生無限循環。對於無限制的執行模型,可不存在在實施之前確定此情形存在的方式。
[0064]然而,在有限制的執行模型10的情況下,開發者可能夠容易地避免產生此類無限循環。舉例來說,開發者可能夠在CTI上查看他或她曾創建此無限循環。作為另一實例,當應用將執行模型10的管線拓撲轉換為執行模型10的命令列表時,所述應用可能夠確定是否存在任何此類無限循環。
[0065]圖2是說明根據本發明中所描述的一或多個實例的裝置的實例的框圖。舉例來說,圖2說明裝置16。裝置16的實例包含,但不限於,例如媒體播放器等視頻裝置、機頂盒、例如行動電話等無線手持機、個人數字助理(PDA)、桌上型計算機、膝上型計算機、遊戲控制臺、視頻會議單元、平板計算裝置等。裝置16可包含除了圖2中所說明的組件之外的組件。
[0066]如所說明,裝置16包含集成電路(IC) 18和全局存儲器20。全局存儲器20可被視為裝置16的存儲器。舉例來說,全局存儲器20可在IC 18的外部,且IC 18和全局存儲器20可經由系統總線36進行通信。存儲裝置20可包括一或多個計算機可讀存儲媒體。全局存儲器20的實例包含,但不限於,隨機存取存儲器(RAM),或可用於以指令和/或數據結構的形式攜載或存儲所需的程序代碼且可由計算機或處理器存取的任何其它媒體。
[0067]在一些方面中,全局存儲器20可包含致使處理器22和/或圖形處理單元(GPU) 24執行歸於本發明中的處理器22和GPU 24的功能的指令。因此,全局存儲器20可為其上存儲有指令的計算機可讀存儲媒體,所述指令在被執行時致使一或多個處理器(例如,處理器22和GPU 24)執行各種功能。
[0068]在一些實例中,全局存儲器20可被視為非暫時性存儲媒體。術語「非暫時性」可指示所述存儲媒體未體現於載波或所傳播信號中。然而,術語「非暫時性」不應被解釋為意味著全局存儲器20是非可移動的或其內容是靜態的。作為一個實例,全局存儲器20可從裝置16被移除,且移動到另一裝置。作為另一實例,大體上類似於全局存儲器20的全局存儲器可插入到裝置16中。在某些實例中,非暫時性存儲媒體可存儲可隨著時間改變的數據(例如,在RAM中)。
[0069]IC 18包含處理器22和圖形處理單元(GPU) 24。IC 18可包含額外的組件,例如用以與全局存儲器20通信的接口單元、用以管理全局存儲器20內的存儲器的單元,及例如顯示器處理器等其它處理單元。IC 18可為收容或形成處理器22和GPU 24的任何類型的集成電路。舉例來說,IC 18可被視為晶片封裝內的處理晶片。
[0070]雖然處理器22和GPU 24被說明為單個IC 18的部分,但本發明的方面不限於此。在一些實例中,處理器22和GPU 24可被收容在不同的集成電路(B卩,不同的晶片封裝)中。
[0071]處理器22和GPU 24的實例包含,但不限於,數位訊號處理器(DSP)、通用微處理器、專用集成電路(ASIC)、現場可編程邏輯陣列(FPGA)或其它等效集成或離散邏輯電路。在一些實例中,GPU 24可為專用硬體,其包含向GPU 24提供適合於圖形處理的大規模並行處理能力的集成和/或離散邏輯電路。在一些例子中,GPU 24還可在實施通用處理任務(即,非圖形相關任務)時包含通用處理,且可被稱作通用GPU(GPGPU)。
[0072]處理器22 (有時被稱作主機)可為裝置16的中央處理單元(CPU)。處理器22可執行各種類型的應用。所述應用的實例包含網絡瀏覽器、電子閱讀器、電子郵件應用、電子表格、視頻遊戲、視頻回放、音頻回放、文字處理、產生可觀看的對象以供顯示的其它應用,或任何其它類型的應用。全局存儲器20可存儲用於執行一或多個應用的指令。
[0073]在一些實例中,處理器22可將處理任務卸載到GPU 24,例如需要大規模並行操作的任務。作為一個實例,圖形處理需要大規模並行操作,且處理器22可將此些圖形處理任務卸載到GPU 24。在一些實例中,處理器22可將與圖形處理無關的任務卸載到GPU 24。舉例來說,例如矩陣操作、圖像處理及視頻處理等數據處理算法需要並行操作,且GPU 24與處理器22相比可更好地適合於實施此些操作。
[0074]為了實施任務,GPU 24可經配置以執行一或多個應用。舉例來說,對於圖形相關處理,GPU 24可執行例如頂點著色器、片段著色器和幾何著色器等應用。對於非圖形相關應用,GPU 24可執行針對此處理設計的應用(例如,用於實施矩陣操作的應用或用於流體動力學的應用)。對於任一實例(例如,圖形相關處理或非圖形相關處理),處理器22可指令GPU 24執行所述一或多個應用,如下文更詳細地描述。
[0075]處理器22可根據特定應用處理接口(API)與GPU 24通信。舉例來說,處理器22可將指令傳輸到GPU 24,例如指令GPU 24執行利用API的一或多個應用的指令。此類API的實例包含 Microsoft? 的 DirectX? AP1、Khronos 集團的 OpenGL?,及 Khronos 集團的
OpenCL? ;然而,本發明的方面不限於DirectX、OpenGL或OpenCLAPI,而是可擴展到已經開發、當前正在開發,或將來待開發的其它類型的API。此外,不需要本發明中描述的技術根據API而起作用,且處理器22和GPU 24可利用任何技術進行通信。
[0076]作為一個實例,對於圖形相關應用,處理器22可使用OpenGLAPI與GPU 24通信。對於非圖形相關應用,處理器22可使用OpenCLAPI與GPU 24通信。再次,本發明中所描述的技術不一定需要處理器22使用OpenGL和/或OpenCLAPI與GPU 24通信。
[0077]GPU 24將執行的圖形相關應用可被稱作著色器,且GPU 24將執行的非圖形相關應用可被稱作內核。舉例來說,全局存儲器20可存儲著色器和內核的指令,且在處理器14上執行的編譯器可將著色器和內核的指令轉換為目標代碼以供在GPU 16上執行。作為另一實例,全局存儲器20可存儲GPU 16檢索且執行的著色器和內核的目標代碼。
[0078]如圖2中所說明,全局存儲器20存儲執行模型10(圖1)。舉例來說,全局存儲器20可存儲界定執行模型10的管線拓撲的命令列表。如上文所描述,開發者可已將執行模型10的管線拓撲界定為包含內核14A到14C。因此,全局存儲器20可存儲內核14A到14C的原始碼。替代地或另外,全局存儲器20可存儲內核14A到14C的經預編譯的原始碼(即,內核14A到14C的目標代碼)。應理解,如果開發者將執行模型界定為包含更多或更少的內核或不同的內核,那麼全局存儲器20可存儲那些內核的原始碼和/或目標代碼。內核14A和14C之間的橢圓形指示內核14B也包含於全局存儲器20中。
[0079]在此實例中,處理器22可從全局存儲器20檢索執行模型10的管線拓撲。基於執行模型10的管線拓撲,處理器22可確定執行模型10包含緩衝器12A到12D。在此實例中,處理器22可為緩衝器12A到12D保留全局存儲器20中的存儲位置。舉例來說,執行模型10的部分可包含緩衝器12A到12D的大小,例如緩衝器12A到12D的大小。在此實例中,處理器22可基於緩衝器12A到12D的特性來保留全局存儲器20中的存儲位置。緩衝器12A和12D之間的橢圓形指示緩衝器12B和12C也包含於全局存儲器20中。
[0080]作為另一實例,執行模型10的部分可包含內核14A到14C的特性,例如內核14A到14C產生的數據的放大因數和/或最大量。在此實例中,處理器22可基於內核14A到14C的特性來保留全局存儲器20中的存儲位置。舉例來說,基於放大因數和/或指示內核14A到14C產生的數據的最大量的值,處理器22可確定緩衝器12A到12D的適當大小且基於所確定的大小來保留全局存儲器20內的存儲位置。
[0081]應注意,雖然處理器22被描述為為緩衝器12A到12D保留全局存儲器20內的存儲位置,但本發明的方面不限於此。在一些實例中,IC 18或GPU 24可包含管理單元(圖2中未展示),所述管理單元經配置以管理由GPU 24用來實施由執行模型10界定的數據處理算法的緩衝器。在這些實例中,處理器22可關於緩衝器12A到12D的大小來指令管理單元,且管理單元可經配置以為緩衝器12A到12D保留全局存儲器內的存儲位置。
[0082]此管理單元可經配置以執行其它功能,例如高速緩衝支持存儲於緩衝器12A到12D中的數據和/或IC 18或GPU 24的高速緩衝存儲器內的內核14A到14C的指令。此管理單元還可存儲指示存儲於緩衝器12A到12D中的每一者中的數據的量的信息。此管理單元可經配置以當在GPU 24上執行時管理內核14A到14C之間的數據傳遞。舉例來說,如圖1中所說明,執行模型10的管線拓撲指示內核14A輸出到緩衝器12B且內核14B從緩衝器12B接收數據。管理單元可經配置以管理由內核14B產生的數據在緩衝器12B中的存儲,及內核14B從緩衝器12B對數據的檢索,且在一些實例中,管理存儲於緩衝器12B中的數據的量的存儲。關於管理單元的技術還描述於2013年I月23日申請的標題為「圖形處理單元緩衝器管理(GRAPHICS PROCESSING UNIT BUFFER MANAGEMENT) 」 的第 13/747,947 號共同待決的美國專利申請案中,所述申請案的內容以全文引用的方式併入。
[0083]提供對管理單元的利用以用於實例目的,且不應被視為限制性的。舉例來說,將管理單元描述為除了處理器22之外的單元保留全局存儲器20中的用於緩衝器12A到12D的存儲位置的一個實例方式。然而,本發明的方面不限於此,且處理器22或甚至GPU 24可經配置以執行此些功能。舉例來說,當GPU 24將數據存儲在緩衝器12A到12D中時,GPU 24可經配置以還存儲GPU 24存儲於緩衝器12A到12D中的量的數據。為了易於描述,關於執行此些功能的處理器22或GPU 24來描述所述技術。
[0084]根據本發明中所描述的的技術,處理器22可接收由執行模型10界定的管線拓撲的指示(例如,作為一個實例,執行模型10的命令列表)。處理器22可產生界定GPU 24將實施管線拓撲的方式的指令。
[0085]舉例來說,如所說明,處理器22可執行編譯器28。編譯器28以虛線展示以指示編譯器28未形成於處理器22內。而是,全局存儲器20可存儲編譯器28的對象,處理器22檢索且執行所述對象。
[0086]編譯器28可經配置以編譯執行模型10(例如,執行模型10的命令列表)以產生GPU24將執行的目標代碼,以及界定GPU 24將實施執行模型10的方式的指令。作為用以產生界定GPU 24將實施執行模型10的方式的指令的編譯的部分,編譯器28可慮及GPU24的處理能力。
[0087]舉例來說,如所說明,全局存儲器20可存儲GPU配置32。GPU配置32可為界定或指示GPU 24的處理能力的配置信息。作為一個實例,GPU配置32可指示GPU 24內的可編程計算單元的數目。如上文所描述,內核在GPU內的一或多個可編程計算單元上執行。
[0088]作為另一實例,GPU配置32可指示GPU 24能夠並行地處理數據的方式。舉例來說,GPU 24可經配置以實施單程序多數據(SPMD)編程模型或單指令多數據(SMD)編程模型。作為實例,如果GPU 24經配置以用於SMD編程模型,那麼GPU配置32可包含指示GPU24內的用於實施SMD編程模型的通道的數目的配置信息(例如,8通道SMD)。
[0089]GPU信息32可包含額外的或不同於上文所描述的信息的GPU 24的配置信息。一般來說,GPU配置32可包含描述GPU 24的處理能力的任何配置信息。
[0090]此外,雖然GPU配置32被說明為存儲於全局存儲器20中,但本發明的方面不限於此。在一些實例中,IC 18內的寄存器或高速緩衝存儲器可存儲GPU配置32。在一些實例中,GPU 24內的寄存器或高速緩衝存儲器可存儲GPU配置32。在這些實例兩者中,處理器22可從寄存器而不是從全局存儲器20讀取GPU配置32的信息。在一些實例中,處理器22甚至有可能被預先配置有GPU配置32。
[0091]編譯器28可利用GPU配置32的信息以及執行模型10的信息來編譯執行模型10。編譯的結果可為GPU 24將執行的目標代碼,以及用於GPU 24將實施執行模型10的方式的指令。舉例來說,除了目標代碼之外,編譯器28的輸出可為處理器22存儲在全局存儲器20中的元調度器指令34。元調度器指令34可為用於元調度器30的指令,如更詳細地描述,其指示GPU 24實施執行模型10的方式。
[0092]舉例來說,元調度器指令34可指示GPU 24將實施類似於卡恩處理網絡(KPN)的執行模型10。舉例來說,KPN確定包含數據的通道、識別用於所述通道的消費者、執行所述消費者以用於某一量的數據,且重複這些步驟,直到所有數據被處理為止。執行模型10的拓撲可界定內核(類似於KPN的過程)及緩衝器(類似於KPN的通道)。以此方式,執行模型10指示用於緩衝器中的每一者的消費者內核。如更詳細地描述,在實施執行模型10中,GPU 24可識別緩衝器12A到12D中的包含數據的一者,且可執行將消耗緩衝器12A到12D中的所識別的一者的數據的消費者內核(例如,內核14A到14C中的一者)。應理解,僅出於實例原因而提供KPN的描述且輔助理解。本發明中所描述的技術不應被視為受限於或等同於KPN的技術。
[0093]根據所述技術,元調度器指令34可為裝置-目標二進位的。換句話說,在執行模型10可為平臺獨立的時(即,非GPU 24專有的),元調度器指令34是平臺相依的(B卩,GPU24專有的)。舉例來說,編譯器28可利用來自GPU配置32的信息來優化執行模型10在GPU24上的實施。
[0094]作為一個實例,編譯器28可利用例如GPU 24的可編程計算單元的數目等信息來確定內核14A到14C將在GPU 24的可編程計算單元上執行的時間。舉例來說,如上文所描述,由執行模型10界定的數據處理算法的管線實施方案可包含對內核14A到14C中的一或多者的並行執行(例如,同時)或對內核14A到14C中的一或多者的依序執行(例如,一個接一個)。在此實例中,編譯器28可產生元調度器指令34,所述元調度器指令指示在不存在許多可用的可編程計算單元的情況下內核14A到14C應依序執行或在存在許多可用的可編程計算單元的情況下應並行地執行。
[0095]作為另一實例,編譯器28可利用來自執行模型10的指示內核14A到14C中的某些內核比其它內核更重要的信息。舉例來說,假設內核14B比內核14C更重要。在此實例中,編譯器28可利用來自GPU配置34的信息來產生元調度器指令34,所述元調度器指令確保內核14B無中斷地執行,即使其導致內核14C以某些中斷執行也如此。
[0096]舉例來說,可編程計算單元可能有可能從一個內核的執行線程切換到另一內核的執行線程,且隨後切換回。在此情況下,可編程計算單元從其切換的內核可被視為中斷的且處於暫停狀態中,直到可編程計算單元切換回以執行所述內核的線程為止。在一些實例中,編譯器28可產生元調度器指令34,所述元調度器指令指示執行重要內核的線程的可編程計算單元將不切換到執行另一內核的線程。
[0097]作為又另一實例,編譯器28可利用來自GPU配置34的指示GPU 24內的數據通道的數目的信息。舉例來說,假設GPU配置34指示GPU 24是八通道SMD GPU。在此實例中,編譯器28可產生元調度器指令34,所述元調度器指令指示GPU 24不應執行消費者內核,直到在耦合到消費者內核的緩衝器中存在至少八個入口為止。舉例來說,如圖1中所說明,內核14B是內核14A的消費者內核,且從緩衝器12B接收數據。假設GPU 24是八通道SMDGPU,編譯器28可產生元調度器指令34,所述元調度器指令指示GPU 24不應執行內核14B,直到存在存儲於緩衝器12B中的至少八個數據項目為止。
[0098]作為額外的實例,編譯器28可慮及緩衝器12A到12D的大小。舉例來說,編譯器28可利用關於緩衝器12A到12D的大小的信息來確定內核14A到14C應何時執行,使得死鎖的改變被最小化。在此實例中,編譯器28可產生指示內核14A到14C執行以使得不發生死鎖的次序的元調度器指令34。
[0099]在一些實例中,編譯器28可經配置以確定在於GPU 24上實施執行模型10中是否存在任何錯誤。舉例來說,編譯器28可經配置以確定是否存在作為執行模型10的部分但未耦合到內核14A到14D中的任一者的任何緩衝器12A到12D。作為另一實例,編譯器28可經配置以確定內核14A到14C中的任一者是否試圖存取不存在的緩衝器,或試圖存取緩衝器內的出界的存儲位置。在編譯器28在編譯時間驗證執行模型10的功能性的情況下,編譯器28可不需要在元調度器指令34中包含致使GPU 24驗證執行模型10的功能性的指令。
[0100]在處理器22經由編譯器28產生元調度器指令34之後,處理器22可指令GPU 24檢索元調度器指令34以供執行。如所說明,GPU 24包含元調度器30。元調度器30可為GPU 24內的硬體、在GPU 24內的硬體上執行的固件,或在GPU 24內的硬體上執行的軟體。元調度器30可經配置以執行元調度器指令34的指令。
[0101]在本發明中所描述的技術中,元調度器30可經配置以確定GPU 24的哪些可編程計算單元應執行內核14A到14C的哪些線程以及在什麼時間執行。換句話說,元調度器30可經配置以在GPU 24上調度內核14A到14C的執行,以致使GPU 24實施由執行模型10的管線拓撲界定的數據處理算法。根據本發明中所描述的技術,元調度器30可基於元調度器指令34來確定在GPU 24上執行內核14A到14C的調度。
[0102]舉例來說,元調度器指令34可指示將並行地或依序執行內核14A到14C中的一或多者。在此實例中,元調度器30可確定哪些可編程計算單元應執行內核14A到14C的線程以實現並行或依序執行。作為另一實例,元調度器指令34可指示內核14A到14C的重要性。在此實例中,元調度器30可確定哪些可編程計算單元應執行內核14A到14C的線程,使得執行重要的內核的可編程計算單元在執行內核時不被中斷。作為另一實例,元調度器指令34可基於GPU 24的SMD或SPMD能力來指示內核14A到14C中的一者將何時執行。在此實例中,元調度器30可基於元調度器指令34的指令來確定哪些可編程計算單元在什麼時間執行線程。元調度器30還可利用元調度器指令34中的指示內核14A到14C應何時執行的時序的指令來避免死鎖。
[0103]重申,編譯器28可已基於在產生元調度器指令34中的GPU配置32中的信息而考慮到GPU 24的計算能力。因此,本發明中所描述的技術提供了元調度器30將能夠適當地分配可編程計算單元從而以元調度器34所指示的方式執行內核14A到14C的某一確保水平。舉例來說,如上文所描述,編譯器28可慮及若干因素,例如GPU 24內的可編程計算單元的數目、緩衝器12A到12D的大小、GPU 24的SIMD或SPMD能力,或內核14A到14C的重要性(作為一些說明性實例),從而產生元調度器指令34。當GPU 24的元調度器30利用元調度器指令34來確定將如何執行內核14A到14C時,可存在內核14A到14C將在GPU 24上有效地執行的某一保證。
[0104]以此方式,處理器22可接收執行模型10的管線拓撲的指示,其中執行模型10是以平臺獨立的方式界定的。處理器22可執行編譯器28,所述編譯器慮及GPU 24的處理能力而產生元調度器指令34,這以平臺特定的方式界定將在GPU 24上如何實施執行模型10的管線拓撲。GPU 24的元調度器30可接收元調度器指令34且基於元調度器指令34的指令來確定哪些可編程計算單元以及在什麼時間執行內核14A到14C的線程。
[0105]因為元調度器指令34是平臺專有的,所以元調度器指令34可界定將執行內核14A至丨J 14C的方式,其導致GPU 24上的執行模型10的管線拓撲的最佳實施。舉例來說,如果元調度器指令34是由與GPU 24不同類型的GPU使用,那麼此不同類型的GPU可能不有效地實施執行模型10的管線拓撲,因為元調度器指令34是GPU 24的平臺專有的。
[0106]在一些實例中,元調度器30可經配置以實施執行政策。舉例來說,可能不需要在編譯器28的每個實例中確切地界定何時將執行內核14A到14C。而是,編譯器28產生的元調度器指令34可指示內核14A到14C將在GPU 24上執行且可指示哪些內核14A到14C是產生者內核且哪些是消費者內核。
[0107]在這些實例中,元調度器30可經配置以實施指示內核14A到14C何時將執行的執行政策。執行政策的一個實例是元調度器30確定緩衝器12A到12D中的哪些緩衝器存儲數據,且執行內核14A到14C中的從存儲數據的緩衝器12A到12D接收數據的一或多個內核。舉例來說,元調度器30可以循環的方式檢查緩衝器12A到12D,且可執行消耗來自存儲數據的緩衝器12A到12D的數據的所有內核。
[0108]作為執行政策的另一實例,元調度器30可基於內核14A到14C的重要性而確定哪些緩衝器12A到12D存儲數據。內核14A到14C的重要性可由內核14A到14C的優先級界定。元調度器30可首先檢查緩衝器12A到12D中的內核14A到14D中的具有最高優先級的內核從其接收數據的緩衝器。如果所述緩衝器正在存儲數據,那么元調度器30可執行具有最高優先級的內核。接下來,元調度器30可檢查緩衝器12A到12D中的內核14A到14D中的具有下一最高優先級的內核從其接收數據的緩衝器。如果所述緩衝器正在存儲數據,那么元調度器30可執行具有所述下一最高優先級的內核,且依此類推。
[0109]作為執行政策的又另一實例,元調度器30可確定緩衝器12A到12D中的哪一者存儲最多量的數據。元調度器30可執行內核14A到14C中的從緩衝器12A到12D中的存儲最多量的數據的緩衝器接收數據的內核。作為一個實例,當GPU 24將數據寫入到緩衝器12A到12D中的一者時,GPU 24可存儲指示存儲於緩衝器12A到12D中的GPU 24曾將數據寫入到的緩衝器中的數據量的信息。在這些實例中,元調度器30可經配置以基於GPU 24存儲的指示緩衝器12A到12D內的數據量的信息來確定緩衝器12A到12D中的哪一者存儲最多量的數據。
[0110]然而,不需要預先配置元調度器30來實施執行政策。而是,編譯器28可有可能確定元調度器30的執行政策以作為由編譯器28產生的元調度器指令34的指令。
[0111]另外,開發者可有可能界定元調度器30的執行政策。舉例來說,開發者可界定元調度器30的執行政策以作為執行模型10的部分,且編譯器28可利用此開發者界定的執行政策來產生元調度器指令34的指令,所述指令關於開發者界定的執行政策來指令元調度器30。
[0112]然而,開發者不界定執行政策可為更合適的。舉例來說,如果開發者將界定執行政策,那麼所述執行政策可能不以平臺獨立的方式良好地起作用。開發者可能難以開發針對所有GPU類型良好地起作用且產生決定性應用中的相同功能結果(例如,針對相同應用跨不同的GPU類型的相同結果)的執行政策。
[0113]—般來說,只要內核14A到14C適當地執行以實施由執行模型10界定的數據處理算法,開發者可能不特定關注於執行政策。因此,可能並不關注開發者是否無法界定執行政策以及編譯器28確定執行政策。
[0114]在上文所描述的實例中,編譯器28編譯執行模型10以產生將在GPU 24上執行的目標代碼且產生元調度器指令34。在一些實例中,編譯器28可將待在GPU 24上執行的目標代碼存儲在全局存儲器20中。在其中執行模型10是多個執行模型中的一個執行模型的實例中,編譯器28可能不需要重新編譯執行模型10。換句話說,可有可能通過組合多個執行模型,且在一些實例中,通過組合存儲在全局存儲器20中的執行模型的目標代碼,來創建較大的數據處理算法。舉例來說,可從存儲在全局存儲器20中的執行模型的目標代碼創建數據處理算法。數據處理算法的此創建對於其中GPU 24是FPGA或嵌入式裝置的實例來說可為有用的。
[0115]在本發明中所描述的技術中,除了指令GPU 24檢索元調度器30的元調度器指令34之外,處理器22可向GPU 24提供GPU 24執行內核14A到14C所需的任何額外信息。舉例來說,除了來自緩衝器12A到12D的數據之外,內核14A到14C可能需要額外的信息(例如,自變量)以起作用。處理器22可將此額外的信息提供給GPU 24。
[0116]處理器22可隨後指令GPU 24實施執行模型10。GPU 24可隨後基於元調度器指令34的指令以及處理器22作為編譯器28的編譯過程的部分而產生的目標代碼來實施執行模型10。在一些實例中,GPU 24可能夠在不與處理器22進行任何同步的情況下實施執行模型10。舉例來說,處理器22可起始執行模型10的實施,且GPU 24可在不與處理器22進行任何同步的情況下實施執行模型10。
[0117]另外,在一些實例中,可有可能在調試模式中配置編譯器28和元調度器30。舉例來說,在開發者開發執行模型10之後,開發者可能需要在發行之前測試執行模型在GPU上的實施。為了測試,開發者可將執行模型10加載在例如裝置16等裝置上,且在GPU24上測試執行模型10。作為測試的部分,開發者可利用調試模式。在調試模式中,編譯器28可產生元調度器指令34,所述元調度器指令將緩衝器12A到12D的存儲位置的範圍縮減到單個存儲位置(例如,將NDrange大小減小到最小值)。元調度器指令34還可指示一次僅內核14A到14C中的一者將執行。
[0118]在調試模式中,開發者可能夠跟蹤將數據存儲在緩衝器12A到12D中的方式以及在GPU 24上執行內核14A到14C中的每一者的方式。此可允許開發者解決內核14A到14C中的任何問題或執行模型10中的任何問題。
[0119]如上文所描述,編譯器28可產生元調度器指令34。以下內容是執行模型10的元調度器指令34的實例偽代碼。在一些實例中,編譯器28產生元調度器指令34而不是給予開發者產生元調度器指令34的能力可為有益的。舉例來說,如果開發者將產生元調度器指令34,那麼執行模型10可不是便攜的且可導致混亂及難以調試的用戶錯誤。
[0120]在以下偽代碼中,Fl是指緩衝器12A,F2是指緩衝器12B,F3是指緩衝器12C,且F4是指緩衝器12D。Kl是指內核14A,K2是指內核14B,且K3是指內核14C。
[0121]

【權利要求】
1.一種用於異構計算的方法,所述方法包括: 使用處理器接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲; 使用所述處理器產生指示將在圖形處理單元GPU上實施所述執行模型的所述管線拓撲的平臺相依的方式的指令,其中將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式是基於所述GPU的平臺;及使用所述處理器將所述指令傳輸到所述GPU。
2.根據權利要求1所述的方法,其中產生指令包括: 編譯指定所述執行模型的所述管線拓撲的命令列表以產生所述指令。
3.根據權利要求2所述的方法,其中編譯所述命令列表包括: 至少基於所述GPU的配置信息來編譯所述命令列表以產生界定將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式的所述指令。
4.根據權利要求3所述的方法,其中所述GPU的所述配置信息包括以下各者中的一或多者: 所述GPU內的可編程計算單元的數目;及 所述GPU中的數據通道的數目。
5.根據權利要求2所述的方法,其中編譯所述命令列表包括: 至少基於以下各者中的一或多者來編譯所述命令列表: 所述執行模型的所述管線拓撲中所識別的緩衝器的大小;及 所述執行模型的所述管線拓撲中所識別的內核的重要性。
6.根據權利要求1所述的方法,其中接收所述管線拓撲包括: 接收命令列表,所述命令列表指示經互連以形成所述管線拓撲的一或多個內核及一或多個緩衝器。
7.一種設備,其包括: 圖形處理單元GPU;及 處理器,其經配置以: 接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲的指示; 產生指示將在所述GPU上實施所述執行模型的所述管線拓撲的平臺相依的方式的指令,其中將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式是基於所述GPU的平臺;及 將所述指令傳輸到所述GPU。
8.根據權利要求7所述的設備,其中,為了產生所述指令,所述處理器經配置以: 編譯指定所述執行模型的所述管線拓撲的命令列表。
9.根據權利要求8所述的設備,其中,為了編譯所述命令列表,所述處理器經配置以: 至少基於所述GPU的配置信息來編譯所述命令列表以產生界定將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式的所述指令。
10.根據權利要求9所述的設備,其中所述GPU的所述配置信息包括以下各者中的一或多者: 所述GPU內的可編程計算單元的數目;及 所述GPU中的數據通道的數目。
11.根據權利要求8所述的設備,其中,為了編譯所述命令列表,所述處理器經配置以: 至少基於以下各者中的一或多者來編譯所述命令列表: 所述執行模型的所述管線拓撲中所識別的緩衝器的大小;及 所述執行模型的所述管線拓撲中所識別的內核的重要性。
12.根據權利要求7所述的設備,其中,為了接收所述管線拓撲,所述處理器經配置以: 接收命令列表,所述命令列表指示經互連以形成所述管線拓撲的一或多個內核及一或多個緩衝器。
13.根據權利要求7所述的設備,其中所述設備包括以下各者中的一者: 媒體播放器; 機頂盒; 無線手持機; 桌上型計算機; 膝上型計算機; 遊戲控制臺; 視頻會議單元;及 平板計算裝置。
14.一種計算機可讀存儲媒體,所述計算機可讀存儲媒體上存儲有指令,所述指令在由一或多個處理器執行時致使所述一個或多個處理器: 接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲; 產生指示將在圖形處理單元GPU上實施所述執行模型的所述管線拓撲的平臺相依的方式的指令,其中將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式是基於所述GPU的平臺;及將所述指令傳輸到所述GPU。
15.根據權利要求14所述的計算機可讀存儲媒體,其中所述致使所述一或多個處理器產生指令的指令包括: 致使所述一或多個處理器編譯指定所述執行模型的所述管線拓撲的命令列表以產生所述指令的指令。
16.根據權利要求15所述的計算機可讀存儲媒體,其中所述致使所述一或多個處理器編譯所述命令列表的指令包括: 致使所述一或多個處理器至少基於所述GPU的配置信息來編譯所述命令列表以產生界定將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式的所述指令的指令。
17.根據權利要求16所述的計算機可讀存儲媒體,其中所述GPU的所述配置信息包括以下各者中的一或多者: 所述GPU內的可編程計算單元的數目;及 所述GPU中的數據通道的數目。
18.根據權利要求15所述的計算機可讀存儲媒體,其中所述致使所述一或多個處理器編譯所述命令列表的指令包括: 致使所述一或多個處理器至少基於以下各者中的一或多者來編譯所述命令列表的指 令: 所述執行模型的所述管線拓撲中所識別的緩衝器的大小;及 所述執行模型的所述管線拓撲中所識別的內核的重要性。
19.一種設備,其包括: 圖形處理單元GPU;及 處理器,其包括: 用於接收以平臺獨立的方式界定數據處理算法的執行模型的管線拓撲的裝置; 用於產生指示將在所述GPU上實施所述執行模型的所述管線拓撲的平臺相依的方式的指令的裝置,其中將在所述GPU上實施所述執行模型的所述管線拓撲的所述平臺相依的方式是基於所述GPU的平臺;及 用於將所述指令傳輸到所述GPU的裝置。
20.根據權利要求19所述的設備,其中所述用於產生指令的裝置包括: 用於編譯指定所述執行模型的所述管線拓撲的命令列表以產生所述指令的裝置。
【文檔編號】G06F9/45GK104137070SQ201380010528
【公開日】2014年11月5日 申請日期:2013年2月27日 優先權日:2012年2月27日
【發明者】阿列克謝·V·布爾德, 威廉·F·託爾澤弗斯基 申請人:高通股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀