專利名稱:多處理器上的并行運(yùn)行時執(zhí)行的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及數(shù)據(jù)并行計算,更具體而言,本發(fā)明涉及跨CPU(中央處理單 元)和GPU(圖形處理單元)兩者的數(shù)據(jù)并行運(yùn)行時執(zhí)行。
背景技術(shù):
隨著GPU繼續(xù)演進(jìn)成高性能并行計算裝置,越來越多的應(yīng)用被寫入以在與通用 計算裝置類似的GPU中執(zhí)行數(shù)據(jù)并行計算。如今,這些應(yīng)用被設(shè)計成在使用供應(yīng)商特定 接口的特定GPU上運(yùn)行。因此,它們既不能在數(shù)據(jù)處理系統(tǒng)具有GPU和CPU兩者時平衡 (leverage) CPU,也不能在這樣的應(yīng)用正運(yùn)行在來自不同供應(yīng)商的GPU上時被平衡。然而,隨著越來越多的CPU包括多個核心來執(zhí)行數(shù)據(jù)并行模型的計算,通過可用 的CPU和/或GPU的任一者可以支持越來越多的處理任務(wù)。傳統(tǒng)上,GPU和CPU是通過相 互不兼容的分開的編程環(huán)境來配置的。大多數(shù)GPU需要供應(yīng)商特定的專用程序。結(jié)果,應(yīng) 用很難在處理資源方面平衡CPU和GPU兩者,例如具有數(shù)據(jù)并行計算能力的GPU連同多核 CPU。因此,需要現(xiàn)代的數(shù)據(jù)處理系統(tǒng)來克服以上問題以允許應(yīng)用在能夠執(zhí)行任務(wù)的任 何可用處理資源(例如CPU或一個或多個GPU)中執(zhí)行該任務(wù)。
發(fā)明內(nèi)容
本發(fā)明的一個實施例包括響應(yīng)于來自主處理單元中運(yùn)行的應(yīng)用的API請求,加載 用于該應(yīng)用的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體的方法和設(shè)備。響應(yīng)于來自該應(yīng)用的另 一API請求,所加載的可執(zhí)行體中的一個被選擇以在附接到該主處理單元的諸如CPU或GPU 之類的另一處理單元中被執(zhí)行。在一個可替換實施例中,主處理單元中運(yùn)行的應(yīng)用程序生成API請求,以用來加 載用于數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體。然后,由該應(yīng)用程序生成第二 API,用來選擇 所加載的可執(zhí)行體中的一個以用于在附接到該主處理單元的諸如CPU或GPU之類的另一處 理單元中執(zhí)行。在一個可替換實施例中,用于目標(biāo)處理單元的源在運(yùn)行時期間基于加載到處理單 元的可執(zhí)行體被編譯。處理單元和目標(biāo)處理單元可以是中央處理單元(CPU)或圖形處理單 元(GPU)。處理單元和目標(biāo)處理單元之間的差異被檢測以從所加載的可執(zhí)行體取出源。
在一個可替換實施例中,響應(yīng)于來自應(yīng)用的API請求,利用包括多個可執(zhí)行體的 新任務(wù)來更新與諸如CPU或GPU之類的多個處理單元相關(guān)聯(lián)的任務(wù)隊列。判斷對在多個處 理單元中執(zhí)行來自隊列的新任務(wù)進(jìn)行調(diào)度的條件?;谒袛喑龅臈l件,選擇與新任務(wù)相 關(guān)聯(lián)的多個可執(zhí)行體中的一個以用于執(zhí)行。在一個可替換實施例中,響應(yīng)于來自應(yīng)用的API請求,從該應(yīng)用加載用于執(zhí)行數(shù)據(jù)處理功能的源,以在諸如CPU或GPU之類的多個目標(biāo)數(shù)據(jù)處理單元的一個或多個中執(zhí)行 可執(zhí)行體。自動確定多種類型的目標(biāo)數(shù)據(jù)處理單元?;谀繕?biāo)處理單元的一個或多個中所 要執(zhí)行的所確定的類型來編譯可執(zhí)行體。在一個可替換實施例中,源和針對多個處理單元編譯出的一個或多個相應(yīng)的可執(zhí) 行體被存儲在API庫中來實現(xiàn)API函數(shù)。響應(yīng)于從主處理器(host processor)中運(yùn)行的 應(yīng)用對API庫的請求,從API庫中取出該源和該API函數(shù)的一個或多個相應(yīng)可執(zhí)行體。針 對這多個單元中未包括的附加處理單元,從所取出的源在線編譯出附加可執(zhí)行體。根據(jù)API 函數(shù),在附加處理單元中和一個或多個處理單元中一起并發(fā)地執(zhí)行附加可執(zhí)行體和一個或 多個所取出的可執(zhí)行體。在一個可替換實施例中,在主處理器上接收API調(diào)用來執(zhí)行應(yīng)用,該應(yīng)用具有多 個用于執(zhí)行的線程。主處理器耦合CPU和GPU。這多個線程被異步調(diào)度以用于CPU和GPU 上的并行執(zhí)行。如果GPU忙于圖形處理線程,則被調(diào)度要在GPU上執(zhí)行的線程可以在CPU 中被執(zhí)行。在一個可替換實施例中,在主處理器上接收API調(diào)用來執(zhí)行應(yīng)用,該應(yīng)用具有多 個用于執(zhí)行的線程。主處理器耦合到CPU和GPU。這多個線程被異步初始化以用于CPU和 GPU上的并行執(zhí)行。如果GPU忙于圖形處理線程,則被初始化要在GPU上執(zhí)行的線程可以在 CPU中被執(zhí)行。從附圖和以下詳細(xì)描述中,本發(fā)明的其他特征將顯而易見。
在附圖的示圖中通過示例而非限制來圖示本發(fā)明,相似的標(biāo)號表示相似的元素, 附圖中圖1是圖示出用于配置包括CPU和/或GPU的計算裝置來執(zhí)行應(yīng)用的數(shù)據(jù)并行計 算的系統(tǒng)的一個實施例的框圖;圖2是圖示出具有多個并行操作來并發(fā)地執(zhí)行多個線程的計算處理器的計算裝 置的示例的框圖;圖3是圖示出經(jīng)由計算裝置標(biāo)識符被配置為邏輯計算裝置的多個物理計算裝置 的一個實施例的框圖;圖4是圖示出通過匹配從應(yīng)用接收到的能力需求來利用計算裝置標(biāo)識符配置多 個物理計算裝置的處理的一個實施例的流程圖;圖5是圖示出在邏輯計算裝置中執(zhí)行計算可執(zhí)行體的處理的一個實施例的流程 圖;圖6是圖示出加載可執(zhí)行體的運(yùn)行時處理的一個實施例的流程圖,該處理包括針 對被確定來執(zhí)行該可執(zhí)行體的一個或多個物理計算裝置來編譯源;
圖7是圖示出從執(zhí)行隊列中選擇計算內(nèi)核執(zhí)行實例以在與和該執(zhí)行實例相關(guān)聯(lián) 的邏輯計算裝置相對應(yīng)的一個或多個物理計算裝置中執(zhí)行的處理的一個實施例的流程 圖;圖8A是圖示出建立API (應(yīng)用編程接口 )庫的處理的一個實施例的流程圖,該處 理根據(jù)多個物理計算裝置將用于一個或多個API的多個可執(zhí)行體和源存儲在庫中;圖8B是圖示出應(yīng)用執(zhí)行多個可執(zhí)行體中的一個和基于API請求從API庫所取出 的相應(yīng)源的處理的一個實施例的流程圖;圖9是圖示出多個物理計算裝置中所要執(zhí)行的計算內(nèi)核可執(zhí)行體的計算內(nèi)核源 的示例的樣本源代碼;圖10是圖示出通過調(diào)用API來配置用于在多個物理計算裝置中執(zhí)行多個可執(zhí)行 體中的一個的邏輯計算裝置的示例的樣本源代碼;圖11圖示出可以與在此所述的實施例結(jié)合使用的、具有多個CPU和GPU(圖形處 理單元)的典型計算機(jī)系統(tǒng)的一個示例。
具體實施例方式在此描述用于多處理器上的數(shù)據(jù)并行計算的方法和設(shè)備。在以下描述中,闡述了 大量特定細(xì)節(jié)以提供對本發(fā)明實施例的透徹說明。然而,對于本領(lǐng)域技術(shù)人員顯而易見的 是,可以實行本發(fā)明實施例而不用這些特定細(xì)節(jié)。在其它實例中,沒有詳細(xì)示出公知的組 件、結(jié)構(gòu)和技術(shù)以免使對本描述的理解模糊。在說明書中,提及“一個實施例,,或“實施例,,意味著結(jié)合該實施例描述的具體特 征、結(jié)構(gòu)或特征可以包括在本發(fā)明的至少一個實施例中。在說明書中的各個地方出現(xiàn)的短 語“在一個實施例中,,不一定涉及同一個實施例。通過包括硬件(例如,電路、專用邏輯等)、軟件(例如在通用計算機(jī)系統(tǒng)或?qū)S脵C(jī) 器上運(yùn)行的軟件)或這兩者的組合的處理邏輯來執(zhí)行以下示圖中所描述的處理。盡管以下 根據(jù)某些順序操作來描述處理,但是應(yīng)當(dāng)明白,可以以不同的順序來執(zhí)行所述操作中的某 些操作。并且,可以并行地而不是順序地執(zhí)行某些操作。圖形處理單元(GPU)可以是執(zhí)行諸如2D、3D圖形操作之類的高效圖形操作和/ 或數(shù)字視頻相關(guān)功能的專用圖形處理器。GPU可以包括用來執(zhí)行諸如位塊傳輸(blitter) 操作、紋理映射、多邊形渲染(rendering)、像素著色(shading)和頂點(diǎn)著色之類的圖形操 作的專門的(可編程的)硬件。已知GPU從幀緩沖器中獲取數(shù)據(jù)并且將像素混合到一起 來將圖像背景渲染到該幀緩沖器中以用于顯示。GPU還可以控制該幀緩沖器并且允許該 幀緩沖器被用來刷新諸如CRT或LCD顯示器之類的顯示器,CRT或LCD顯示器是需要至 少20Hz的速率的刷新(例如,每1/30秒,利用來自幀緩沖器的數(shù)據(jù)刷新該顯示器)的短 存留顯示器。通常,GPU可以從與GPU耦合的CPU獲取圖形處理任務(wù),通過顯示控制器向 顯示裝置輸出光柵圖形圖像。在本說明書中提及的“GPU”可以是如Lindholdm等的美國 專禾丨J No. 7015913 "Method and Apparatus for Multitheraded Processing of Data In aProgrammable Graphics Processor”(用于可編程圖形處理器中的數(shù)據(jù)的多線程處理的 方法和設(shè)備)和 Swan 等的美國專利 No. 6970206 "Method forDeinterlacing Interlaced Video by A Graphics Processor”(用于通過圖形處理器對交織后的視頻進(jìn)行去交織的方法)中所描述的圖像處理器或可編程圖形處理器,這兩個專利被通過引用結(jié)合于此。在一個實施例中,多個不同類型的處理器(例如CPU或GPU)可以并發(fā)地執(zhí)行一個或多個應(yīng)用的數(shù)據(jù)并行處理任務(wù)來增大數(shù)據(jù)處理系統(tǒng)中可用處理資源的利用效率。數(shù)據(jù)處 理系統(tǒng)的處理資源可以是基于多個物理計算裝置的。物理計算裝置可以是CPU或GPU。在 一個實施例中,數(shù)據(jù)并行處理任務(wù)可以委托給多種類型的處理器,例如能夠執(zhí)行該任務(wù)的 CPU或GPU。數(shù)據(jù)處理任務(wù)可以從處理器要求某些特定處理能力。處理能力例如可以是專 用紋理(texturing)硬件支持、雙精度浮點(diǎn)運(yùn)算、專用本地存儲器、流數(shù)據(jù)緩存或同步原語 (synchronization primitives)。不同類型的處理器可以提供不同但是重疊的處理能力 集。例如,CPU和GPU兩者都能執(zhí)行雙精度浮點(diǎn)計算。在一個實施例中,應(yīng)用能夠平衡可用 的CPU或GPU中的任一者來執(zhí)行數(shù)據(jù)并行處理任務(wù)。在另一實施例中,可以在運(yùn)行時期間自動執(zhí)行對用于數(shù)據(jù)并行處理任務(wù)的多種不 同類型的處理資源的選擇和分配。應(yīng)用可以通過API (應(yīng)用程序接口)向數(shù)據(jù)處理系統(tǒng)的 運(yùn)行時平臺發(fā)送包括數(shù)據(jù)處理任務(wù)所希望的能力需求列表的提示。相應(yīng)地,運(yùn)行時平臺可 以確定多個當(dāng)前可用的、具有與所接收到的提示相匹配的能力的CPU和/或GPU來委托該 應(yīng)用的數(shù)據(jù)處理任務(wù)。在一個實施例中,該能力需求列表可以依賴于基礎(chǔ)的數(shù)據(jù)處理任務(wù)。 能力需求列表可以適用例如包括來自不同供應(yīng)商的具有不同版本的GPU和多核CPU的不同 處理器集合。因此,可以防止應(yīng)用提供以特定類型CPU或GPU為目標(biāo)的程序。圖1是圖示出用于配置包括CPU和/或GPU的計算裝置來執(zhí)行應(yīng)用的數(shù)據(jù)并行計 算的系統(tǒng)的一個實施例的框圖。系統(tǒng)100可以實現(xiàn)并行計算體系結(jié)構(gòu)。在一個實施例中, 系統(tǒng)100可以是包括一個或多個主處理器的圖形系統(tǒng),這些主處理器通過數(shù)據(jù)總線113與 一個或多個中央處理器117和諸如媒體處理器115之類的一個或多個其它處理器耦合。多 個主處理器可以在托管系統(tǒng)(hosting system) 101中被連到一起。這多個中央處理器117 可以包括來自不同供應(yīng)商的多核CPU。媒體處理器可以是具有專用紋理渲染硬件的GPU。另 一媒體處理器可以是支持專用紋理渲染硬件和雙精度浮點(diǎn)體系結(jié)構(gòu)兩者的GPU。多個GPU 可以連接到一起以用于可擴(kuò)縮連接接口(SLI)或CrossFire配置。在一個實施例中,托管系統(tǒng)101可以支持軟件棧,軟件棧包括軟件棧組件,例如應(yīng) 用103、計算平臺層111、計算運(yùn)行時層109、計算編譯器107和計算應(yīng)用庫105。應(yīng)用103 可以通過API (應(yīng)用程序接口)調(diào)用與其它棧組件連接??梢詾橥泄芟到y(tǒng)101中的應(yīng)用103 并發(fā)地運(yùn)行一個或多個線程。計算平臺層111可以維護(hù)數(shù)據(jù)結(jié)構(gòu)、或計算裝置數(shù)據(jù)結(jié)構(gòu),存 儲每個附接的物理計算裝置的處理能力。在一個實施例中,應(yīng)用可以通過計算平臺層111 來取出有關(guān)托管系統(tǒng)101的可用處理資源的信息。應(yīng)用可以通過計算平臺層111來選擇和 指定用于執(zhí)行處理任務(wù)的能力需求。因此,計算平臺層111可以針對該處理任務(wù)來確定物 理計算裝置的配置以從所附接的CPU 117和/或GPU 115中分配和初始化處理資源。在一 個實施例中,計算平臺層111可以針對與所配置的一個或多個實際的物理計算裝置相對應(yīng) 的應(yīng)用來生成一個或多個邏輯計算裝置。計算運(yùn)行時層109可以根據(jù)所配置的用于應(yīng)用103的處理資源,例如一個或多個 邏輯計算裝置來管理處理任務(wù)的執(zhí)行。在一個實施例中,執(zhí)行處理任務(wù)可以包括創(chuàng)建代表 處理任務(wù)的計算內(nèi)核對象和分配例如保存可執(zhí)行體、輸入/輸出數(shù)據(jù)等的存儲資源。被加 載用于計算內(nèi)核對象的可執(zhí)行體可以是計算內(nèi)核對象。計算可執(zhí)行體可以被包括在諸如CPU或GPU之類的計算處理器中所要執(zhí)行的計算內(nèi)核對象中。計算運(yùn)行時層109可以與所 分配的物理裝置進(jìn)行交互來執(zhí)行處理任務(wù)的實際執(zhí)行。在一個實施例中,計算運(yùn)行時層109 可以根據(jù)針對處理任務(wù)而配置的每個處理器(例如,CPU或GPU)的運(yùn)行時狀態(tài)來協(xié)調(diào)執(zhí)行 來自不同應(yīng)用的多個處理任務(wù)。計算運(yùn)行時層109可以基于運(yùn)行時狀態(tài)從被配置來執(zhí)行處 理任務(wù)的物理裝置中選擇一個或多個處理器。執(zhí)行處理任務(wù)可以包括并發(fā)地在多個物理處 理裝置中執(zhí)行一個或多個可執(zhí)行體的多個線程。在一個實施例中,計算運(yùn)行時層109可以 通過監(jiān)視每個處理器的運(yùn)行時執(zhí)行狀況來跟蹤所執(zhí)行的每個處理任務(wù)的狀況。運(yùn)行時層可以從應(yīng)用103加載與處理任務(wù)相對應(yīng)的一個或多個可執(zhí)行體。在一個 實施例中,計算運(yùn)行時層109自動地從計算應(yīng)用庫105加載執(zhí)行處理任務(wù)所需要的附加可 執(zhí)行體。計算運(yùn)行時層109可以從應(yīng)用103或計算應(yīng)用庫105中加載計算內(nèi)核對象的可執(zhí) 行體及其相應(yīng)的源程序兩者。計算內(nèi)核對象的源程序可以是計算內(nèi)核程序。根據(jù)被配置為 包括多種類型和/或不同版本的物理計算裝置的邏輯計算裝置,可以基于單個源程序來加 載多個可執(zhí)行體。在一個實施例中,計算運(yùn)行時層109可以激活計算編譯器107來將所加 載的源程序在線編譯成最優(yōu)用于被配置來執(zhí)行可執(zhí)行體的目標(biāo)處理器(例如,CPU或GPU) 的可執(zhí)行體。除了根據(jù)相應(yīng)源程序的現(xiàn)有可執(zhí)行體以外,在線編譯出的可執(zhí)行體還可以被存儲 以用于將來的調(diào)用。此外,計算可執(zhí)行體可以被離線編譯并且經(jīng)由API調(diào)用被加載到計算 運(yùn)行時109。計算應(yīng)用庫105和/或應(yīng)用103可以響應(yīng)于來自應(yīng)用的庫API請求來加載相 關(guān)聯(lián)的可執(zhí)行體??梢詾橛嬎銘?yīng)用庫105或應(yīng)用103動態(tài)更新新編譯出的可執(zhí)行體。在一 個實施例中,計算運(yùn)行時109可以用通過新升級版本的計算裝置的計算編譯器107在線編 譯出的新可執(zhí)行體來替換應(yīng)用中的現(xiàn)有計算可執(zhí)行體。計算運(yùn)行時109可以插入在線編譯 出的新可執(zhí)行體來更新計算應(yīng)用庫105。在一個實施例中,計算運(yùn)行時109可以在加載處理 任務(wù)的可執(zhí)行體時調(diào)用計算編譯器107。在另一個實施例中,計算編譯器107可以被離線調(diào) 用來建立用于計算應(yīng)用庫105的可執(zhí)行體。計算編譯器107可以編譯并且鏈接計算內(nèi)核程 序來生成計算內(nèi)核可執(zhí)行體。在一個實施例中,計算應(yīng)用庫105可以包括多個用來支持例 如開發(fā)工具箱和/或圖像處理的函數(shù)。每個庫函數(shù)可以對應(yīng)于針對多個物理計算裝置的計 算應(yīng)用庫105中所存儲的計算源程序和一個或多個可執(zhí)行體。圖2是圖示出具有多個計算處理器的計算裝置的示例的框圖,這多個計算處理器 并行地進(jìn)行操作來并發(fā)地執(zhí)行多個線程。每個計算處理器可以并行地(或并發(fā)地)執(zhí)行多 個線程。可以并行執(zhí)行的線程可以稱為線程塊。計算裝置可以具有能被并行執(zhí)行的多個線 程塊。例如,示出在計算裝置205中,M個線程作為一個線程塊執(zhí)行。多個線程塊中的線程, 例如,計算處理器_1 205的線程1和計算處理器_L 203的線程N(yùn),可以在一個計算裝置上 分別的計算處理器上或在多個計算裝置上并行地執(zhí)行。在多個計算處理器上的多個線程塊 可以并行地執(zhí)行計算內(nèi)核可執(zhí)行體。多于一個計算處理器可以是基于例如ASIC(專用集成 電路)裝置的單個芯片的。在一個實施例中,可以在跨越多個芯片的多于一個的計算處理 器上并發(fā)地執(zhí)行來自應(yīng)用的多個線程。計算裝置可以包括一個或多個計算處理器,例如計算處理器_1 205和計算處理 203。本地存儲器可以與計算處理器耦合??梢杂膳c計算處理器耦合的本地存儲器來
支持在計算處理器中運(yùn)行的單個線程塊中線程之間的共享存儲器??缭讲煌木€程塊的多個線程,例如線程1 213和線程N(yùn)209可以共享與計算裝置201耦合的流存儲器217中所存 儲的流。流可以是計算內(nèi)核可執(zhí)行體能夠?qū)ζ溥M(jìn)行操作的元素的集合,例如圖像流或變量 流。變量流可以被分配用于存儲處理任務(wù)期間對其進(jìn)行操作的全局變量。圖像流可以是可 用于圖像緩沖、紋理緩沖或幀緩沖的緩沖器。在一個實施例中,計算處理器的本地存儲器可以實現(xiàn)為專用本地存儲裝置,例如 處理器_1的本地共享存儲器219和處理器立的本地共享存儲器211。在另一實施例中, 計算處理器的本地存儲器可以實現(xiàn)為用于計算裝置的一個或多個計算處理器2的流存儲 器的流讀_寫緩存,例如用于計算裝置201中的計算處理器205203的流數(shù)據(jù)緩存215。在 另一實施例中,本地存儲器可以實現(xiàn)在與本地存儲器耦合的計算處理器中運(yùn)行的線程塊中 的線程之間共享的專用本地存儲裝置,例如與計算處理器_1 205耦合的本地共享存儲器 219。專用本地存儲裝置可以不被跨越不同線程塊的線程共享。如果計算處理器(例如處 理器_1 205m)的本地存儲器被實現(xiàn)為流讀-寫緩存(例如,流數(shù)據(jù)緩存215),則在本地存 儲器中聲明的變量可以被從流存儲器217中分配并且被存儲到所實現(xiàn)的實現(xiàn)本地存儲器 的流讀-寫緩存(例如,流數(shù)據(jù)緩存215)中。當(dāng)例如流讀-寫緩存和專用本地存儲裝置對 于相應(yīng)的計算裝置都不可用時,線程塊內(nèi)的線程可以共享流存儲器217中所分配的本地變 量。在一個實施例中,每個線程與私有(private)存儲器相關(guān)聯(lián),私有存儲器用來存儲由線 程中所調(diào)用的函數(shù)使用的線程私有變量。例如,私有存儲器1 211可以只被線程1 213訪 問。圖3是圖示出經(jīng)由計算裝置標(biāo)識符而被配置為邏輯計算裝置的多個物理計算裝 置的一個實施例的框圖。在一個實施例中,應(yīng)用303和平臺層305可以在主CPU 301中運(yùn) 行。應(yīng)用303可以是圖1的應(yīng)用103中的一個。托管系統(tǒng)101可以包括主CPU 301。物理計 算裝置 Physical_Compute_Device_1305. . . Physical_Compute_Device-N 311 中的每一個 可以是圖1的CPU 117或GPU 115中的一個。在一個實施例中,計算平臺層111可以響應(yīng)于 來自應(yīng)用303的API請求來生成計算裝置標(biāo)識符307,以用于根據(jù)API請求中所包括的能力 需求的列表來配置數(shù)據(jù)并行處理資源。計算裝置標(biāo)識符307可以涉及根據(jù)計算平臺層111 進(jìn)行的配置來選擇實際的物理計算裝置Physical_Compute_Device-1305. . . Physical, Compute_Device-N 311。在一個實施例中,邏輯計算裝置309可以代表與主CPU 301分離 的一組所選擇的實際物理計算裝置。圖4是圖示出用于通過匹配從應(yīng)用接收到的能力需求、利用計算裝置標(biāo)識符來配 置多個物理計算裝置的處理的實施例的流程圖??梢愿鶕?jù)圖1的系統(tǒng)100,在由托管系統(tǒng) 101托管的數(shù)據(jù)處理系統(tǒng)中執(zhí)行處理400。數(shù)據(jù)處理系統(tǒng)可以包括托管平臺層(例如圖1 的計算平臺層111)的主處理器和多個附接到主處理器的物理計算裝置(例如,圖1的CPU 117 和 GPU115)。在塊401中,在一個實施例中,處理400可以建立代表與一種或多種相應(yīng)的能力相 關(guān)聯(lián)的多個物理計算裝置的數(shù)據(jù)結(jié)構(gòu)(或計算裝置數(shù)據(jù)結(jié)構(gòu))。各個物理計算裝置可以附 接到執(zhí)行處理400的處理系統(tǒng)。諸如CPU或GPU之類的物理計算裝置的能力或計算能力可 以包括物理計算裝置是否支持處理特征、存儲器訪問機(jī)制或指定擴(kuò)展。處理特征可以與專 用紋理硬件支持、雙精度浮點(diǎn)運(yùn)算或同步支持(例如互斥)有關(guān)。物理處理裝置的存儲器訪 問機(jī)制可以與變量流緩存的類型、圖像流緩存的類型或?qū)S帽镜卮鎯ζ髦С钟嘘P(guān)。數(shù)據(jù)處理系統(tǒng)的系統(tǒng)應(yīng)用可以響應(yīng)于將新的物理計算裝置附接到數(shù)據(jù)處理系統(tǒng)來更新數(shù)據(jù)結(jié)構(gòu)。 在一個實施例中,可以預(yù)先確定物理計算裝置的能力。在另一實施例中,數(shù)據(jù)處理系統(tǒng)的系 統(tǒng)應(yīng)用可以在運(yùn)行時期間發(fā)現(xiàn)新附接的物理處理裝置。該系統(tǒng)應(yīng)用可以取出新發(fā)現(xiàn)的物理 計算裝置的能力,來更新代表所附接的物理計算裝置及它們的相應(yīng)能力的數(shù)據(jù)結(jié)構(gòu)。根據(jù)一個實施例,在塊403,處理400可以接收來自應(yīng)用的計算能力需求。該應(yīng)用 可以通過調(diào)用API向系統(tǒng)應(yīng)用發(fā)送計算能力需求。該系統(tǒng)應(yīng)用可以與該應(yīng)用的托管系統(tǒng)中 的軟件棧的平臺層相對應(yīng)。在一個實施例中,計算能力需求可以標(biāo)識用于請求處理資源來 執(zhí)行該應(yīng)用的任務(wù)的所需能力的列表。在一個實施例中,該應(yīng)用可以要求所請求的資源在 多個線程中并發(fā)地執(zhí)行任務(wù)。作為響應(yīng),在塊405,處理400可以從所附接的物理計算裝置 中選擇一組物理計算裝置??梢曰谟嬎隳芰π枨笈c能力數(shù)據(jù)結(jié)構(gòu)中所存儲的計算能力之 間的匹配來確定選擇。在一個實施例中,處理400可以根據(jù)通過能力需求提供的提示來執(zhí) 行匹配。處理400可以根據(jù)物理計算裝置和計算能力需求之間所匹配的計算能力的數(shù)目 來確定匹配評分。在一個實施例中,處理400可以選擇具有最高匹配評分的多個物理計算 裝置。在另一實施例中,如果能力需求中的每個能力都被匹配,則處理400可以選擇物理計 算裝置。處理400可以在塊405,確定多組匹配物理計算裝置。在一個實施例中,根據(jù)負(fù)載 均衡能力來選擇每組匹配物理裝置。在一個實施例中,在塊407,處理400可以為塊405處 所選擇的每組物理計算裝置生成計算裝置標(biāo)識符。處理400可以通過調(diào)用API向應(yīng)用返回 所生成的一個或多個計算裝置標(biāo)識符。應(yīng)用可以根據(jù)計算裝置標(biāo)識符來選擇采用哪些處理 資源來執(zhí)行任務(wù)。在一個實施例中,處理400在塊407可以為所接收到的每個能力需求生 成最多一個計算裝置標(biāo)識符。在一個實施例中,在塊409,處理400可以根據(jù)相應(yīng)的計算裝置標(biāo)識符來分配用于 初始化塊405處所選擇的一組物理計算裝置的邏輯計算裝置的資源。處理400可以根據(jù)塊 405處的選擇,響應(yīng)于來自已經(jīng)接收到一個或多個計算裝置標(biāo)識符的應(yīng)用的API請求來執(zhí) 行對邏輯計算裝置的初始化。處理400可以在該應(yīng)用的邏輯計算裝置上創(chuàng)建上下文對象。 在一個實施例中,上下文對象與該應(yīng)用上運(yùn)行的托管系統(tǒng)中的一個應(yīng)用線程相關(guān)聯(lián)。并發(fā) 地執(zhí)行一個邏輯計算裝置中或跨越不同的邏輯計算裝置的處理任務(wù)的多個線程可以基于 分開的上下文對象。在一個實施例中,處理400可以基于包括cuCreateContext、cuRetainContext和 cuReleaseContext的多個API。API cuCreateContext創(chuàng)建計算上下文。計算上下文可以 對應(yīng)于計算上下文對象。API cuRetainContext使用由上下文標(biāo)識的具體計算上下文作為 cuRetainContext的輸入自變量來遞增實例的數(shù)目。API cuCreateContext進(jìn)行隱式保留。 這對于通常獲得由應(yīng)用傳遞給它們的上下文的第三方庫很有幫助。然而,有可能該應(yīng)用會 刪除上下文而不通知庫。允許多個實例附接到上下文并且從上下文釋放解決了由庫使用的 計算上下文不再有效的問題。如果cuRetainContext的輸入自變量與有效計算上下文對象 不相對應(yīng),則 cuRetainContext 返回 CU_INVALID_C0NTEXT。API cuReleaseContext 從有效 計算上下文中釋放實例。如果cuReleaseContext的輸入自變量與有效的計算上下文對象 不相對應(yīng),則 cuReleaseContext 返回 CU_INVALID_C0NTEXT。圖5是圖示出在邏輯計算裝置中執(zhí)行計算可執(zhí)行體的處理的實施例的流程圖。在一個實施例中,可以由數(shù)據(jù)處理系統(tǒng)中的運(yùn)行時層(例如,圖1的計算運(yùn)行時層109)來執(zhí) 行處理500。在塊501處,處理500可以為邏輯計算裝置上要運(yùn)行的計算可執(zhí)行體分配一個 或多個流。處理任務(wù)可以由對流進(jìn)行操作的計算可執(zhí)行體來執(zhí)行。在一個實施例中,處理 任務(wù)可以包括輸入流和輸出流。處理500可以將所分配的流存儲器映射到應(yīng)用的邏輯地址 或從其映射到所分配的流存儲器。在一個實施例中,處理500可以基于來自應(yīng)用的API請 求來執(zhí)行塊501的操作。在塊503處,根據(jù)一個實施例,處理500可以創(chuàng)建邏輯計算裝置的計算內(nèi)核對象。計算內(nèi)核對象可以是針對用于執(zhí)行函數(shù)的相應(yīng)處理任務(wù)的相關(guān)聯(lián)的流和可執(zhí)行體而創(chuàng)建 的對象。處理500可以在塊505為計算內(nèi)核對象建立函數(shù)自變量。函數(shù)自變量可以包括為 函數(shù)輸入或輸出分配的流,例如塊501處分配的流。處理500可以在塊507處將計算內(nèi)核可 執(zhí)行體和/或計算內(nèi)核源加載到計算內(nèi)核對象中。計算內(nèi)核可執(zhí)行體可以是根據(jù)邏輯計算 裝置要被執(zhí)行用于執(zhí)行與內(nèi)核對象相關(guān)聯(lián)的相應(yīng)處理任務(wù)的可執(zhí)行體。在一個實施例中, 計算內(nèi)核可執(zhí)行體可以包括例如與目標(biāo)物理計算裝置的類型、版本和/或編譯選項相關(guān)聯(lián) 的描述數(shù)據(jù)。計算內(nèi)核源可以是從其編譯出計算內(nèi)核可執(zhí)行體的源代碼。處理500可以在 塊507加載與計算內(nèi)核源相對應(yīng)的多個計算內(nèi)核可執(zhí)行體。處理500可以從應(yīng)用或通過諸 如圖1的計算應(yīng)用庫105之類的計算庫來加載計算內(nèi)核可執(zhí)行體。計算內(nèi)核可執(zhí)行體可以 利用相應(yīng)計算內(nèi)核源來加載。在一個實施例中,處理500可以根據(jù)來自應(yīng)用的API請求執(zhí) 行塊503、505和507處的操作。在塊511,處理500可以更新執(zhí)行隊列來利用邏輯計算裝置執(zhí)行計算機(jī)內(nèi)核對象。 處理500可以利用計算運(yùn)行時(例如,圖1的計算運(yùn)行時109)的合適的自變量、響應(yīng)于來 自應(yīng)用或計算應(yīng)用庫(例如,圖1的應(yīng)用103或計算應(yīng)用庫105)的API調(diào)用來執(zhí)行計算內(nèi) 核。在一個實施例中,處理500可以生成執(zhí)行計算內(nèi)核的計算內(nèi)核執(zhí)行實例。對用于執(zhí)行 計算內(nèi)核的計算運(yùn)行時(例如圖1的計算運(yùn)行時109)的API調(diào)用本身實際上可以是異步 的。執(zhí)行實例可以由可由計算運(yùn)行時(例如,圖1的計算運(yùn)行時109)返回的計算事件對象 來標(biāo)識。計算內(nèi)核執(zhí)行實例可以被添加到用于執(zhí)行計算內(nèi)核實例的執(zhí)行隊列。在一個實施 例中,對用于執(zhí)行計算內(nèi)核實例的執(zhí)行隊列的API調(diào)用可以包括計算處理器上同時并行執(zhí) 行的線程的數(shù)目和要使用的計算處理器的數(shù)目。計算內(nèi)核執(zhí)行實例可以包括指示所希望的 用于執(zhí)行相應(yīng)計算內(nèi)核對象的優(yōu)先順序的優(yōu)先值。計算內(nèi)核執(zhí)行實例也可以包括標(biāo)識之前 的執(zhí)行實例的事件對象和/或用于執(zhí)行該執(zhí)行的預(yù)期數(shù)目的線程和預(yù)期數(shù)目的線程塊。可 以在API調(diào)用中指定線程塊的數(shù)目和線程的數(shù)目。在一個實施例中,事件對象可以指示包 括該事件對象的執(zhí)行實例與由事件對象標(biāo)識的另一執(zhí)行實例之間的執(zhí)行順序關(guān)系??梢砸?求包括事件對象的執(zhí)行實例在由該事件對象標(biāo)識的另一執(zhí)行實例完成執(zhí)行之后被執(zhí)行。事 件對象可以稱為queue_after_event_object。在一個實施例中,執(zhí)行隊列可以包括多個用 于執(zhí)行相應(yīng)的計算內(nèi)核對象的計算內(nèi)核執(zhí)行實例。用于一個計算內(nèi)核對象的一個或多個計 算內(nèi)核執(zhí)行實例可以被調(diào)度用于執(zhí)行隊列中的執(zhí)行。在一個實施例中,處理500可以響應(yīng) 于來自應(yīng)用的API請求來更新該執(zhí)行隊列。該執(zhí)行隊列可以由該應(yīng)用所運(yùn)行于的托管數(shù)據(jù) 系統(tǒng)來托管。在塊513,處理500可以從用于執(zhí)行的執(zhí)行隊列中選擇計算內(nèi)核執(zhí)行實例。在一個 實施例中,處理500可以根據(jù)相應(yīng)邏輯計算裝置來選擇多于一個要被并發(fā)執(zhí)行的計算內(nèi)核執(zhí)行實例。處理500可以判斷是否基于計算內(nèi)核執(zhí)行實例與執(zhí)行隊列中其他執(zhí)行實例相 關(guān)聯(lián)的優(yōu)先順序和依賴關(guān)系而從執(zhí)行隊列中選擇了計算內(nèi)核執(zhí)行實例??梢酝ㄟ^根據(jù)加載 到相應(yīng)計算內(nèi)核對象的可執(zhí)行體來執(zhí)行該計算內(nèi)核對象,從而執(zhí)行計算內(nèi)核執(zhí)行實例。
在塊517,在一個實施例中,處理500可以選擇加載到與所選擇的計算內(nèi)核實例相 對應(yīng)的計算內(nèi)核對象的多個可執(zhí)行體中的一個可執(zhí)行體,以用于在與該計算內(nèi)核對象的邏 輯計算裝置相關(guān)聯(lián)的物理計算裝置中執(zhí)行。處理500可以針對一個計算內(nèi)核執(zhí)行實例選擇 要在多于一個物理計算裝置中并行執(zhí)行的多于一個可執(zhí)行體。該選擇可以基于與和所選擇 的計算內(nèi)核實例相關(guān)聯(lián)的邏輯計算裝置相對應(yīng)的物理計算裝置的當(dāng)前執(zhí)行狀況。物理計算 裝置的執(zhí)行狀況可以包括運(yùn)行的線程的數(shù)目、本地存儲器利用水平和處理器利用水平(例 如,每單位時間的操作的峰值數(shù)目)等。在一個實施例中,該選擇可以是基于預(yù)定的利用水 平的。在另一個實施例中,該選擇可以是基于與計算內(nèi)核執(zhí)行實例相關(guān)聯(lián)的線程的數(shù)目和 線程塊的數(shù)目。處理500可以從物理計算裝置取出執(zhí)行狀況。在一個實施例中,處理500 可以執(zhí)行用于從執(zhí)行隊列中選擇計算內(nèi)核執(zhí)行實例的操作,以在塊513 517處與托管系統(tǒng) 中運(yùn)行的應(yīng)用異步地執(zhí)行。在塊519,處理500可以檢查被調(diào)度用于該執(zhí)行隊列中的執(zhí)行的計算內(nèi)核執(zhí)行實 例的狀況??梢杂晌ㄒ坏挠嬎闶录ο髞順?biāo)識各個執(zhí)行實例。當(dāng)相應(yīng)的計算內(nèi)核執(zhí)行實例 根據(jù)計算運(yùn)行時(例如,圖1的運(yùn)行時109)被排隊時,事件對象可以被返回給調(diào)用用于執(zhí) 行該執(zhí)行實例的API的應(yīng)用或計算應(yīng)用庫(例如,圖5的應(yīng)用103或計算應(yīng)用庫105)。在 一個實施例中,處理500可以響應(yīng)于來自應(yīng)用的API請求來進(jìn)行執(zhí)行狀況檢查。處理500 可以通過查詢標(biāo)識該計算內(nèi)核執(zhí)行實例的計算事件對象的狀況來確定執(zhí)行計算內(nèi)核執(zhí)行 實例的完成。處理500可以等待直到計算內(nèi)核執(zhí)行實例的執(zhí)行被完成為止,以返回來自應(yīng) 用的API調(diào)用。處理500可以基于事件對象來控制從各種流的處理執(zhí)行實例讀和/或?qū)?。在塊521,根據(jù)一個實施例,處理500可以取出執(zhí)行計算內(nèi)核執(zhí)行實例的結(jié)果。隨 后,處理500可以清理被分配用于執(zhí)行該計算內(nèi)核執(zhí)行實例的處理資源。在一個實施例中, 處理500可以將保存執(zhí)行計算內(nèi)核可執(zhí)行體的結(jié)果的流存儲器拷貝到本地存儲器中。處理 500可以刪除在塊501處所分配的變量流或圖像流。處理500可以刪除用于在計算內(nèi)核執(zhí) 行被完成時刪除的內(nèi)核事件對象。如果與特定計算內(nèi)核對象相關(guān)聯(lián)的各個計算內(nèi)核執(zhí)行實 例已經(jīng)被完整執(zhí)行,則處理500可以刪除特定計算內(nèi)核對象。在一個實施例中,處理500可 以基于由應(yīng)用發(fā)起的API請求來執(zhí)行塊521處的操作。圖6是圖示出加載可執(zhí)行體的運(yùn)行時處理的實施例的流程圖,該運(yùn)行時處理包括 將源編譯用于被確定來執(zhí)行該可執(zhí)行體的一個或多個物理計算裝置。處理600可以作為圖 5的塊507處的處理500的一部分而被執(zhí)行。在一個實施例中,處理600可以在塊601處為 各個與邏輯計算裝置相關(guān)聯(lián)的物理計算裝置選擇一個或多個與該物理計算裝置相兼容的 現(xiàn)有計算內(nèi)核可執(zhí)行體。計算內(nèi)核可執(zhí)行體可以在相兼容的物理計算裝置中被執(zhí)行。該現(xiàn) 有計算內(nèi)核可執(zhí)行體可以從應(yīng)用或通過例如圖1的計算應(yīng)用庫105的計算庫獲得。所選擇 的計算內(nèi)核可執(zhí)行體中的每一個計算內(nèi)核可執(zhí)行體可以由至少一個物理計算裝置執(zhí)行。在 一個實施例中,該選擇可以是基于與現(xiàn)有計算內(nèi)核可執(zhí)行體相關(guān)聯(lián)的描述數(shù)據(jù)的。如果存在被選擇的現(xiàn)有計算內(nèi)核對象,則處理600可以在塊603處判斷所選擇的 計算內(nèi)核可執(zhí)行體中的任何一者是否對于物理計算裝置是最優(yōu)的。該判斷例如可以是基于物理計算裝置的版本的。在一個實施例中,如果描述數(shù)據(jù)中的目標(biāo)物理計算裝置的版本與物理計算裝置的版本相匹配,則處理600可以判斷出現(xiàn)有計算內(nèi)核可執(zhí)行體對于該物理計 算裝置是最優(yōu)的。在塊605,在一個實施例中,處理600可以使用在線編譯器(例如圖1的計算編譯 器107)來從相應(yīng)的計算機(jī)內(nèi)核源建立對于物理計算裝置最優(yōu)的新的計算內(nèi)核可執(zhí)行體。 如果在塊603處發(fā)現(xiàn)所選擇的計算內(nèi)核可執(zhí)行體中沒有計算內(nèi)核可執(zhí)行體對于物理計算 裝置是最優(yōu)的,則處理600可以執(zhí)行在線建立。在一個實施例中,如果在塊601處發(fā)現(xiàn)現(xiàn)有 計算內(nèi)核可執(zhí)行體中沒有計算內(nèi)核可執(zhí)行體與物理計算裝置相兼容,則處理600可以執(zhí)行 在線建立。計算內(nèi)核源可以從應(yīng)用或通過諸如圖1的計算應(yīng)用庫105之類的計算庫來獲得。如果塊605處的建立是成功的,則在一個實施例中,處理600可以在塊607處將新 建立的計算內(nèi)核可執(zhí)行體加載到相應(yīng)的計算內(nèi)核對象中。否則,處理600可以在塊609處 將所選擇的計算內(nèi)核可執(zhí)行體加載到內(nèi)核對象。在一個實施例中,如果計算內(nèi)核可執(zhí)行體 還未被加載,則處理600可以將計算內(nèi)核可執(zhí)行體加載到計算內(nèi)核對象。在另一實施例中, 如果計算內(nèi)核對象的現(xiàn)有計算內(nèi)核可執(zhí)行體中沒有與物理計算裝置相兼容的計算內(nèi)核可 執(zhí)行體,并且相應(yīng)計算內(nèi)核源不可獲得,則處理600可以生成錯誤消息。圖7是圖示出從執(zhí)行隊列中選擇計算內(nèi)核執(zhí)行實例以在與和該執(zhí)行實例相關(guān)聯(lián) 的邏輯計算裝置相對應(yīng)的一個或多個物理計算裝置中執(zhí)行的處理的一個實施例的流程圖。 處理700可以作為圖5的塊513處的處理500的一部分被執(zhí)行。在一個實施例中,處理700 可以在塊701處標(biāo)識執(zhí)行隊列中當(dāng)前所調(diào)度的計算內(nèi)核執(zhí)行實例之間的依賴條件。計算內(nèi) 核執(zhí)行實例的依賴條件可以防止計算內(nèi)核執(zhí)行實例的執(zhí)行,如果該條件未完成的話。在一 個實施例中,依賴關(guān)系可以是基于由輸出流饋送的輸入流之間的關(guān)系的。在一個實施例中, 處理700可以根據(jù)執(zhí)行實例的相應(yīng)函數(shù)的輸入流和輸出流來檢測執(zhí)行實例之間的依賴關(guān) 系。在另一個實施例中,具有較低優(yōu)先級的執(zhí)行實例可以與具有高優(yōu)先級的另一執(zhí)行具有 依賴關(guān)系。在塊703,在一個實施例中,處理700可以從多個被調(diào)度的計算內(nèi)核執(zhí)行實例中選 擇沒有任何未完成的依賴條件的計算內(nèi)核執(zhí)行實例用于執(zhí)行。該選擇可以是基于被指派給 執(zhí)行實例的優(yōu)先級的。在一個實施例中,所選擇的計算內(nèi)核執(zhí)行實例可以與多個計算內(nèi)核 執(zhí)行實例中的最高優(yōu)先級相關(guān)聯(lián)而沒有未完成的依賴條件。在塊705,處理700可以取出 與所選擇的計算內(nèi)核執(zhí)行實例相對應(yīng)的物理計算裝置的當(dāng)前執(zhí)行狀況。在一個實施例中, 物理計算裝置的執(zhí)行狀況可以是從預(yù)定的存儲位置中取出的。在另一實施例中,處理700 可以向物理計算裝置發(fā)送狀況請求來接收執(zhí)行狀況報告。處理700可以在塊707處基于所 取出的執(zhí)行狀況,指派物理計算裝置中的一個或多個來執(zhí)行所選擇的計算內(nèi)核執(zhí)行實例。 在一個實施例中,物理計算裝置可以根據(jù)與其他物理計算裝置的負(fù)載均衡而被指派用于執(zhí) 行。所選擇的物理計算裝置可以與滿足預(yù)定標(biāo)準(zhǔn)(例如,在預(yù)定處理器利用水平和/或存 儲器利用水平以下)的執(zhí)行狀況相關(guān)聯(lián)。在一個實施例中,預(yù)定標(biāo)準(zhǔn)可以依賴于與所選擇 的計算內(nèi)核執(zhí)行實例相關(guān)聯(lián)的線程的數(shù)目和線程塊的數(shù)目。處理700可以將用于相同的執(zhí) 行實例或多個實例的分開的計算內(nèi)核可執(zhí)行體加載到一個或多個所指派的物理計算裝置, 以在多個線程中并行執(zhí)行。圖8A是圖示出建立API (應(yīng)用編程接口 )庫的處理的一個實施例的流程圖,該處理根據(jù)多個物理計算裝置將用于一個或多個API的多個可執(zhí)行體和源存儲在庫中。處理 800A可以在塊801處被離線執(zhí)行以將API函數(shù)的源代碼加載到數(shù)據(jù)處理系統(tǒng)中。源代碼 可以是在一個或多個物理計算裝置中所要執(zhí)行的計算內(nèi)核源。在一個實施例中,處理800A 可以在塊803處針對API函數(shù)指派多個目標(biāo)物理計算裝置??梢愿鶕?jù)類型(例如,CPU或 GPU)、版本或供應(yīng)商來指派目標(biāo)物理計算裝置。處理800A可以在塊805處針對各個所指派 的目標(biāo)物理計算裝置將源代碼編譯成可執(zhí)行體,例如,計算內(nèi)核可執(zhí)行體。在一個實施例 中,處理800A可以基于在線編譯器(例如圖1的計算編譯器107)來離線執(zhí)行編譯。在塊 807,處理800A可以將API函數(shù)的源代碼與針對所指派的目標(biāo)物理計算裝置所編譯出的相 應(yīng)可執(zhí)行體存儲到API庫中。在一個實施例中,可以存儲各個可執(zhí)行體與描述數(shù)據(jù),描述數(shù) 據(jù)例如包括目標(biāo)物理計算裝置的類型、版本和供應(yīng)商和/或編譯選項。通過運(yùn)行時期間的 處理(例如,圖5的處理500)可以取出描述數(shù)據(jù)。圖8B是圖示出應(yīng)用執(zhí)行多個可執(zhí)行體中的一個和基于API請求從API庫所取出 的相應(yīng)源的處理的一個實施例的流程圖。在一個實施例中,處理800B在包括API庫(例 如,圖1的計算應(yīng)用庫105)的數(shù)據(jù)處理系統(tǒng)中(例如,圖1的托管系統(tǒng)101中)運(yùn)行應(yīng)用 程序(例如,圖1的應(yīng)用103)。在塊811處,處理800B可以基于API請求從API庫中取出 源(例如,計算內(nèi)核源)和一個或多個相應(yīng)可執(zhí)行體(例如,計算內(nèi)核可執(zhí)行體),例如圖 5的塊507處的處理500。各個可執(zhí)行體可以與一個或多個目標(biāo)物理計算裝置相關(guān)聯(lián)。在 一個實施例中,計算內(nèi)核可執(zhí)行體可以與多種版本的物理計算裝置后向兼容。在塊813處, 處理800B可以在多個物理計算裝置中執(zhí)行基于API請求所取出的可執(zhí)行體中的一個來執(zhí) 行相關(guān)聯(lián)的API函數(shù),例如圖5的塊517處的處理500。處理800B可以與在塊813處執(zhí)行 API函數(shù)異步地在塊809處執(zhí)行應(yīng)用。圖9是圖示出多個物理計算裝置中所要執(zhí)行的計算內(nèi)核可執(zhí)行體的計算內(nèi)核源 的示例的樣本源代碼。示例900可以是具有包括變量901和流903的自變量(arguments)的 API函數(shù)。示例900可以是基于諸如圖1的系統(tǒng)101之類的并行計算環(huán)境的編程語言。在一個實施例中,可以利用被設(shè)計來實現(xiàn)在此所述實施例中的一個或多個實施例的附加擴(kuò)展 和限制,根據(jù)ANSI (美國國家標(biāo)準(zhǔn)學(xué)會)C標(biāo)準(zhǔn)來指定并行編程語言。這些擴(kuò)展可以包括用 來指定計算裝置中所要執(zhí)行的計算內(nèi)核函數(shù)的函數(shù)限定符(qualifier),例如限定符905。 計算內(nèi)核函數(shù)可以不由其它計算內(nèi)核函數(shù)調(diào)用。在一個實施例中,可以由并行程序語言的 主函數(shù)(host function)來調(diào)用計算內(nèi)核函數(shù)。主函數(shù)可以是常規(guī)的ANSI C函數(shù)。主函 數(shù)可以在與執(zhí)行計算內(nèi)核函數(shù)的計算裝置相分離的主處理器中被執(zhí)行。在一個實施例中, 這些擴(kuò)展可以包括本地限制符,以描述需要被分配到與由線程塊的所有線程共享的計算裝 置相關(guān)聯(lián)的本地存儲器中的變量??梢栽谟嬎銉?nèi)核函數(shù)內(nèi)部聲明本地限制符。對并行編程 語言的限制可以在編譯器時間或運(yùn)行時間期間被增強(qiáng)以在這些限制被違反時,生成錯誤狀 況,例如,輸出錯誤消息或退出執(zhí)行。圖10是圖示出通過調(diào)用API來配置用于在多個物理計算裝置中計算多個可執(zhí)行 體中的一個的邏輯計算裝置的示例的樣本源代碼。示例1000可以由附接了多個物理計算 裝置的主機(jī)系統(tǒng)(例如,圖1的托管系統(tǒng)101)中運(yùn)行的應(yīng)用來執(zhí)行。示例1000可以指定 并行編程語言的主函數(shù)。示例1000中的處理操作可以通過諸如圖5的處理500之類的處 理、作為API調(diào)用被執(zhí)行。分配流1001和加載流圖像1003的處理操作可以通過圖5的塊501處的處理500被執(zhí)行。創(chuàng)建計算內(nèi)核對象1005的處理操作可以通過圖5的塊503處的 處理500被執(zhí)行。處理操作1007可以將諸如圖9的示例900之類的計算內(nèi)核源加載到所 創(chuàng)建出的計算內(nèi)核對象。處理操作1009可以從所加載的計算內(nèi)核源中顯式地建立計算內(nèi) 核可執(zhí)行體。在一個實施例中,處理操作1009可以將所建立的計算內(nèi)核可執(zhí)行體加載到所 創(chuàng)建的計算內(nèi)核對象。隨后,處理操作1011可以顯式地選擇所建立的計算內(nèi)核可執(zhí)行體以 用于執(zhí)行所創(chuàng)建的計算內(nèi)核對象。在一個實施例中,處理操作1013可以附加變量和流作為所創(chuàng)建的計算內(nèi)核對象的函數(shù)自變量。處理操作1013可以通過圖5的框505處的處理500被執(zhí)行。處理操作1015 可以執(zhí)行所創(chuàng)建的計算內(nèi)核對象。在一個實施例中,處理操作1015可以通過圖5的塊511 處的處理500被執(zhí)行。處理操作1015可以使得執(zhí)行隊列被利用與所創(chuàng)建的計算內(nèi)核對象 相應(yīng)的計算內(nèi)核執(zhí)行實例而被更新。處理操作1017可以同步地等待所創(chuàng)建的計算內(nèi)核對 象的執(zhí)行的完成。在一個實施例中,處理操作1019可以從計算內(nèi)核對象的執(zhí)行中取出結(jié) 果。隨后,處理操作1021可以清理所分配的用于執(zhí)行計算內(nèi)核對象的資源,例如事件對象、 所創(chuàng)建的計算內(nèi)核對象和所分配的存儲器。在一個實施例中,處理操作1017可以基于內(nèi)核 事件對象是否被設(shè)置。處理操作1017可以通過圖5的塊519處的處理500被執(zhí)行。圖11示出可以與本發(fā)明一個實施例一起使用的計算機(jī)系統(tǒng)的一個示例。首先, 系統(tǒng)1100可以被實現(xiàn)為圖1中所示的系統(tǒng)的一部分。注意,盡管圖11圖示出計算機(jī)系統(tǒng) 的各種組件,但是其不意圖代表互連這些組件的任何具體的體系結(jié)構(gòu)或方式,因為這些細(xì) 節(jié)對于本發(fā)明并沒有密切的關(guān)系。還要明白,還可以與具有更少組件或可能更多組件的網(wǎng) 絡(luò)計算機(jī)和其他數(shù)據(jù)處理系統(tǒng)(例如,手持計算機(jī)、個人數(shù)字助理(PDA)、蜂窩電話、娛樂系 統(tǒng)、消費(fèi)電子設(shè)備等)一起來實現(xiàn)本發(fā)明的一個或多個實施例。如圖11中所示,作為一種形式的數(shù)據(jù)處理系統(tǒng)的計算機(jī)系統(tǒng)1101包括耦合到 諸如CPU和/或GPU之類的(一個或多個)微處理器1105的總線1103、R0M(只讀存儲 器)1107、易失性RAM 1109和非易失性存儲器1111。微處理器1103可以從存儲器1107、 1109,1111取出指令并且執(zhí)行這些指令來執(zhí)行上述操作??偩€1103將這各種組件互連到 一起,并且還將這些組件1105、1107、1109和1111與顯示控制器和顯示裝置1113以及外 圍裝置互連,外圍裝置例如是可以是鼠標(biāo)、鍵盤、調(diào)制解調(diào)器、網(wǎng)絡(luò)接口、打印機(jī)的輸入/輸 出(I/O)裝置和本領(lǐng)域公知的其他裝置。通常輸入/輸出裝置915通過輸入/輸出控制器 1117耦合到該系統(tǒng)。易失性RAM(隨機(jī)存取存儲器)1109通常被實現(xiàn)為持續(xù)地需要電力以 刷新或維護(hù)存儲器中的數(shù)據(jù)的動態(tài)RAM(DRAM)。與顯示裝置1108耦合的顯示控制器可以可 選地包括一個或多個GPU來處理顯示數(shù)據(jù)??蛇x地,可以提供GPU存儲器1111來支持顯示 裝置1108中所包括的GPU。海量存儲裝置1111通常是在即使電力被從系統(tǒng)移除后仍然能夠維護(hù)數(shù)據(jù)(例如, 大量數(shù)據(jù))的磁硬盤驅(qū)動器或磁光驅(qū)或光驅(qū)或DVD RAM或閃存或其它類型的存儲系統(tǒng)。通 常,海量存儲裝置1111也將可以是隨機(jī)存取存儲器,盡管這不被要求。盡管圖11示出海量 存儲裝置1111是直接耦合到數(shù)據(jù)處理系統(tǒng)中的其余組件的本地裝置,然而,將明白,本發(fā) 明可以利用遠(yuǎn)離該系統(tǒng)的非易失性存儲器,例如通過諸如調(diào)制解調(diào)器或以太網(wǎng)接口或無線 連網(wǎng)接口之類的網(wǎng)絡(luò)接口耦合到數(shù)據(jù)處理系統(tǒng)的網(wǎng)絡(luò)存儲裝置??偩€1103可以包括通過 本領(lǐng)域公知的各種橋接器、控制器和/或適配器相互連接的一個或多個總線。
可以利用諸如專用邏輯電路之類的邏輯電路或利用微控制器或執(zhí)行程序代碼指 令的其他形式的處理核心來實現(xiàn)上述內(nèi)容的部分。因此,可以利用諸如機(jī)器可執(zhí)行指令之 類的程序代碼來執(zhí)行通過上述討論所教導(dǎo)的處理,機(jī)器可執(zhí)行指令使得執(zhí)行這些指令的機(jī)器執(zhí)行某些功能。在該上下文中,“機(jī)器”可以是將中間形式(或“抽象”)指令轉(zhuǎn)換成處理器 指定指令(例如,諸如“虛擬機(jī)”(例如,Java虛擬機(jī))、解釋程序、共通語言運(yùn)行時(Common Language Runtime)、高級語言虛擬機(jī)等的抽象執(zhí)行環(huán)境)和/或被設(shè)計來執(zhí)行指令的半導(dǎo) 體芯片(例如,用晶體管實現(xiàn)的“邏輯電路”)上所部署的電子電路,例如專用處理器和/或 通用處理器。通過以上討論所教導(dǎo)的處理還可以由被設(shè)計來執(zhí)行這些處理(或這些處理的 一部分)的電子電路(代替機(jī)器或與機(jī)器結(jié)合)來執(zhí)行,而不用執(zhí)行程序代碼。制造品可以被用來存儲程序代碼。存儲程序代碼的制造品可以被實現(xiàn)為,但不限 于,適于存儲電子指令的一個或多個存儲器(例如,一個或多個閃存、隨機(jī)存取存儲器(靜 態(tài)、動態(tài)或其它))、光盤、CD-ROM、DVD R0M、EPR0M、EEPR0M、磁的或光的卡或其它類型的機(jī)器 可讀介質(zhì)。也可以(例如經(jīng)由通信鏈路(例如,網(wǎng)絡(luò)連接))通過傳播介質(zhì)中所實現(xiàn)的數(shù)據(jù) 信號來從遠(yuǎn)程計算機(jī)(例如,服務(wù)器)將程序代碼下載到請求計算機(jī)(例如,客戶端)。按照對計算機(jī)存儲器內(nèi)的數(shù)據(jù)比特的操作的算法和符號表述表示了先前的詳細(xì) 描述。這些算法描述和表述是數(shù)據(jù)處理領(lǐng)域中的那些技術(shù)人員向本領(lǐng)域其它技術(shù)人員最有 效地傳達(dá)它們工作的基本內(nèi)容所使用工具。這里,算法一般被設(shè)想為導(dǎo)致所希望的結(jié)果的 自洽操作序列。這些操作是需要對物理量的物理操作的那些操作。通常,但不一定是必須 的,這些量采用能夠被存儲、被轉(zhuǎn)送、被組合、被比較或以其他方式被操作的電信號或磁信 號的形式。有時候,特別是為了共同使用的原由,已被證實將這些信號提作比特、值、元素、 符號、字符、術(shù)語、數(shù)字等是方便的。然而,應(yīng)該注意的是,所有這些以及相似的術(shù)語中的全部術(shù)語與適當(dāng)?shù)匚锢砹肯?關(guān)聯(lián)并且僅僅是適用這些量的方便標(biāo)簽。除非特別指明或者以其他方式從以上討論顯而易 見,可以明白,在整個說明書中,利用諸如“處理”或“計算”或“判斷”或“顯示”等的術(shù)語的 討論,涉及計算機(jī)系統(tǒng)或類似的電子計算裝置的動作和處理,計算機(jī)系統(tǒng)或類似的電子計 算裝置操作被表示為計算機(jī)系統(tǒng)的寄存器和存儲器內(nèi)的物理(電子)量的數(shù)據(jù)并且將它們 變換成被類似地表示為計算機(jī)系統(tǒng)存儲器或寄存器或其它這樣的信息存儲裝置、發(fā)送或顯 示裝置內(nèi)的物理量的數(shù)據(jù)。本發(fā)明還涉及用于執(zhí)行在此所述的操作的設(shè)備。該設(shè)備可以被特別構(gòu)建用于所需 要的目的,或其可以包括被計算機(jī)內(nèi)所存儲的計算機(jī)程序有選擇地激活或重新配置的通用 計算機(jī)。這樣的計算機(jī)程序可以被存儲在計算機(jī)可讀存儲介質(zhì)中,計算機(jī)可讀存儲介質(zhì)例 如是但不限于任何類型的盤(包括軟盤、光盤、CD-ROM和磁光盤、只讀存儲器(ROM)、RAM、 EPR0M、EEPR0M、磁卡或光卡)或適于存儲電子指令的任何類型的介質(zhì),并且它們各自耦合 到計算機(jī)系統(tǒng)總線。這里表示的處理和顯示不是固有地與任何具體計算機(jī)或其它設(shè)備有關(guān)。各自通用 系統(tǒng)可以與根據(jù)在此的教導(dǎo)的程序一起使用,或者可以證實構(gòu)建更加專門的設(shè)備來執(zhí)行所 述操作是方便的。從以下描述中,用于各種這樣的系統(tǒng)的所需要的結(jié)構(gòu)是明顯的。此外,本 發(fā)明并不是關(guān)于任何具體編程語言來描述的??梢岳斫猓鞣N編程語言都可以用來實現(xiàn)如 在這里所述的發(fā)明的教導(dǎo)。
以上討論僅僅描述了本發(fā)明的某些示例性實施例。本領(lǐng)域技術(shù)人員將容易從這樣的討論認(rèn)識到,可以對附圖和權(quán)利要求進(jìn)行各種修改而不偏離本發(fā)明的精神和范圍。
權(quán)利要求
一種計算機(jī)實現(xiàn)的方法,包括響應(yīng)于來自在第一處理單元中運(yùn)行的應(yīng)用程序的第一API請求,加載用于所述應(yīng)用程序的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體;以及響應(yīng)于來自所述應(yīng)用程序的第二API請求,為第二處理單元選擇所述一個或多個可執(zhí)行體中的一個可執(zhí)行體。
2.根據(jù)權(quán)利要求1所述的計算機(jī)實現(xiàn)的方法,其中所述第一處理單元和所述第二處理 單元是中央處理單元(CPU)或圖形處理單元(GPU)。
3.根據(jù)權(quán)利要求1所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中的所選 擇的一個可執(zhí)行體與所述第二 API請求相關(guān)聯(lián)。
4.根據(jù)權(quán)利要求1所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體包括所述 一個或多個可執(zhí)行體中的至少一個可執(zhí)行體的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所支持的處理 單元的版本和類型。
5.根據(jù)權(quán)利要求1所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體包括源, 所述源被編譯來生成所述一個或多個可執(zhí)行體。
6.根據(jù)權(quán)利要求5所述的計算機(jī)實現(xiàn)的方法,其中所述源是經(jīng)由所述第一API從所述 應(yīng)用程序加載的。
7.根據(jù)權(quán)利要求5所述的計算機(jī)實現(xiàn)的方法,其中所述源是從與所述一個或多個可執(zhí) 行體相關(guān)聯(lián)的庫加載的。
8.根據(jù)權(quán)利要求4所述的計算機(jī)實現(xiàn)的方法,其中所述加載包括比較所述描述數(shù)據(jù)和所述第二處理單元的信息;以及為所述第二處理單元,從所述源在線編譯出所述一個或多個可執(zhí)行體中的所述一個可 執(zhí)行體。
9.根據(jù)權(quán)利要求8所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中的所述 一個可執(zhí)行體與所述第一 API請求相關(guān)聯(lián)。
10.根據(jù)權(quán)利要求8所述的計算機(jī)實現(xiàn)的方法,其中所述編譯基于所述比較指示所述 一個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體并非對于所述第二處理單元是最優(yōu)的。
11.根據(jù)權(quán)利要求8所述的計算機(jī)實現(xiàn)的方法,其中所述編譯基于所述比較指示所述 一個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體不支持所述第二處理單元。
12.根據(jù)權(quán)利要求8所述的計算機(jī)實現(xiàn)的方法,其中所述編譯包括生成所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體的更新后的描述數(shù)據(jù),所述更新 后的描述數(shù)據(jù)包括所述第二處理單元的版本;以及存儲所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體,所述一個或多個可執(zhí)行體中的 所述一個可執(zhí)行體包括所述更新后的描述數(shù)據(jù)。
13.根據(jù)權(quán)利要求12所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中的所 述一個可執(zhí)行體被存儲來替換所述一個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體。
14.根據(jù)權(quán)利要求1所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體包括所 述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體的描述數(shù)據(jù),并且其中,所述選擇是基于所 述描述數(shù)據(jù)的。
15.根據(jù)權(quán)利要求14所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中所選擇的一個可執(zhí)行體基于所述描述數(shù)據(jù)而與用于所述第二處理單元的所述一個或多個可執(zhí) 行體中最新的版本相關(guān)聯(lián)。
16.根據(jù)權(quán)利要求14所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中所選 擇的一個可執(zhí)行體基于所述描述數(shù)據(jù)而與用于所述第二處理單元的所述一個或多個可執(zhí) 行體中最新的版本相關(guān)聯(lián)。
17. 一種計算機(jī)實現(xiàn)的方法,包括從在第一處理單元中運(yùn)行的應(yīng)用程序生成第一 API請求,用來加載用于所述應(yīng)用程序 的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體;以及從所述應(yīng)用程序生成第二 API請求,用來從所述一個或多個可執(zhí)行體中選擇一個可執(zhí) 行體用以在所述第二處理單元中執(zhí)行。
18.根據(jù)權(quán)利要求17所述的計算機(jī)實現(xiàn)的方法,其中所述第一處理單元和所述第二處 理單元是中央處理單元(CPU)或圖形處理單元(GPU)。
19.根據(jù)權(quán)利要求17所述的計算機(jī)實現(xiàn)的方法,其中所述第一API請求與從中編譯出 所述一個或多個可執(zhí)行體的源相關(guān)聯(lián)。
20.根據(jù)權(quán)利要求19所述的計算機(jī)實現(xiàn)的方法,其中所選擇的可執(zhí)行體是從所述源被 離線編譯出的。
21.根據(jù)權(quán)利要求17所述的計算機(jī)實現(xiàn)的方法,其中所選擇的可執(zhí)行體是響應(yīng)于所述 第一 API請求而被離線編譯出的。
22.根據(jù)權(quán)利要求17所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體包括所 選擇的可執(zhí)行體的描述數(shù)據(jù),所述描述數(shù)據(jù)包括與所述第二處理單元兼容的版本和類型。
23. 一種計算機(jī)實現(xiàn)的方法,包括加載從源編譯出的可執(zhí)行體,用于處理單元執(zhí)行目標(biāo)處理單元中的數(shù)據(jù)處理任務(wù);檢測所述處理單元和所述目標(biāo)處理單元之間的差異;以及響應(yīng)于檢測到所述差異,基于所述差異為所述目標(biāo)處理單元編譯所述源。
24.根據(jù)權(quán)利要求23所述的計算機(jī)實現(xiàn)的方法,其中所述可執(zhí)行體是從所述源離線編 譯出的。
25.根據(jù)權(quán)利要求23所述的計算機(jī)實現(xiàn)的方法,其中所述差異基于與所述可執(zhí)行體相 關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所支持的處理單元的版本和類型。
26.根據(jù)權(quán)利要求23所述的計算機(jī)實現(xiàn)的方法,其中所述可執(zhí)行體包括所述源。
27.根據(jù)權(quán)利要求23所述的計算機(jī)實現(xiàn)的方法,其中所述目標(biāo)處理單元是中央處理單 元(CPU)或圖形處理單元(GPU)。
28. 一種計算機(jī)實現(xiàn)的方法,包括響應(yīng)于來自應(yīng)用程序的API請求,利用包括多個可執(zhí)行體的任務(wù)來更新與多個處理單 元相關(guān)聯(lián)的任務(wù)隊列;確定在所述多個處理單元中執(zhí)行所述任務(wù)的條件;以及基于所述條件來選擇所述多個可執(zhí)行體中的一個可執(zhí)行體用以在所述多個處理單元 中執(zhí)行。
29.根據(jù)權(quán)利要求28所述的計算機(jī)實現(xiàn)的方法,其中所述多個可執(zhí)行體中的所選擇的 可執(zhí)行體是通過所述多個處理單元中的多個線程來并發(fā)地執(zhí)行的。
30.根據(jù)權(quán)利要求28所述的計算機(jī)實現(xiàn)的方法,其中所述多個處理單元是中央處理單 元(CPU)或圖形處理單元(GPU)。
31.根據(jù)權(quán)利要求28所述的計算機(jī)實現(xiàn)的方法,其中所述條件包括具有輸出存儲流的 所述隊列中的另一任務(wù)執(zhí)行完畢,所述輸出存儲流是所述任務(wù)的輸入存儲流。
32.根據(jù)權(quán)利要求28所述的計算機(jī)實現(xiàn)的方法,其中所述條件基于與所述任務(wù)相關(guān)聯(lián) 的事件指示符,所述事件指示符用于指示所述隊列中的另一任務(wù)的完成,所述事件指示符 與所述API請求相關(guān)聯(lián)。
33.根據(jù)權(quán)利要求28所述的計算機(jī)實現(xiàn)的方法,其中所述條件包括滿足預(yù)定準(zhǔn)則的所 述多個處理單元的執(zhí)行狀況。
34.根據(jù)權(quán)利要求33所述的計算機(jī)實現(xiàn)的方法,其中所述預(yù)定準(zhǔn)則包括根據(jù)所述API 請求與所述任務(wù)相關(guān)聯(lián)的線程的預(yù)期數(shù)目。
35.根據(jù)權(quán)利要求33所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個可執(zhí)行體中的所 述一個可執(zhí)行體是根據(jù)所述多個可執(zhí)行體中所包括的描述數(shù)據(jù)來選擇的。
36.根據(jù)權(quán)利要求35所述的計算機(jī)實現(xiàn)的方法,其中所述選擇包括根據(jù)所述描述數(shù)據(jù) 來判斷所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體與所述多個處理單元相兼容。
37.一種計算機(jī)實現(xiàn)的方法,包括響應(yīng)于來自包括源的應(yīng)用程序的API請求,加載所述源來執(zhí)行數(shù)據(jù)處理功能;自動確定多種類型的目標(biāo)數(shù)據(jù)處理單元來執(zhí)行所述數(shù)據(jù)處理功能;為所確定的類型的目標(biāo)數(shù)據(jù)處理單元中的至少一個目標(biāo)數(shù)據(jù)處理單元,從所述源編譯 可執(zhí)行體;以及通過在所確定的類型的所述目標(biāo)數(shù)據(jù)處理單元中的至少一個目標(biāo)數(shù)據(jù)處理單元中執(zhí) 行所述可執(zhí)行體,來執(zhí)行所述數(shù)據(jù)處理功能。
38.根據(jù)權(quán)利要求37所述的計算機(jī)實現(xiàn)的方法,其中與多個目標(biāo)處理單元相對應(yīng)的多 個可執(zhí)行體是從所述源編譯出的,并且其中所述多個目標(biāo)處理單元對應(yīng)于邏輯計算裝置。
39.根據(jù)權(quán)利要求38所述的計算機(jī)實現(xiàn)的方法,其中所述目標(biāo)處理單元是CPU或GPU。
40.根據(jù)權(quán)利要求38所述的計算機(jī)實現(xiàn)的方法,其中所述目標(biāo)處理單元根據(jù)所述邏輯 計算裝置進(jìn)行負(fù)載均衡。
41.根據(jù)權(quán)利要求38所述的計算機(jī)實現(xiàn)的方法,其中所述目標(biāo)處理單元與所述邏輯計 算裝置相關(guān)聯(lián)。
42.根據(jù)權(quán)利要求41所述的計算機(jī)實現(xiàn)的方法,其中所述目標(biāo)數(shù)據(jù)處理單元中的所述 至少一個目標(biāo)數(shù)據(jù)處理單元在與所述邏輯計算裝置相對應(yīng)的所述目標(biāo)數(shù)據(jù)處理單元內(nèi)進(jìn) 行負(fù)載均衡。
43.一種計算機(jī)實現(xiàn)的方法,包括從源編譯出用于一種類型的處理單元的用于執(zhí)行數(shù)據(jù)處理功能的可執(zhí)行體;以及將所述源和所編譯出的可執(zhí)行體存儲在API庫中,響應(yīng)于來自在與所述一個或多個處 理單元分離的主處理單元中運(yùn)行的應(yīng)用程序的、對所述API庫的請求,所述源和所述編譯 出的可執(zhí)行體將由所述類型的一個或多個處理單元從所述API庫中取出,以用于基于所述 源和所述編譯出的可執(zhí)行體來執(zhí)行可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能。
44.根據(jù)權(quán)利要求43所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個處理單元是CPU或 GPU。
45.根據(jù)權(quán)利要求43所述的計算機(jī)實現(xiàn)的方法,還包括存儲與所編譯出的可執(zhí)行體相 關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
46.根據(jù)權(quán)利要求43所述的計算機(jī)實現(xiàn)的方法,其中所述可執(zhí)行體是在所述主處理單 元中被離線編譯出的。
47.一種計算機(jī)實現(xiàn)的方法,包括在主處理單元中執(zhí)行應(yīng)用程序來執(zhí)行數(shù)據(jù)處理功能;以及經(jīng)由API庫根據(jù)API請求,從所述API庫取出源和為一種類型的處理單元編譯出的可 執(zhí)行體,以用于由與所述主處理單元分離的、所述類型的一個或多個處理單元來執(zhí)行所編 譯出的可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能。
48.根據(jù)權(quán)利要求47所述的計算機(jī)實現(xiàn)的方法,其中所述取出包括取出與所述可執(zhí)行 體相關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
49.根據(jù)權(quán)利要求47所述的計算機(jī)實現(xiàn)的方法,其中所述取出包括取出與所編譯出的 可執(zhí)行體相關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
50.根據(jù)權(quán)利要求47所述的計算機(jī)實現(xiàn)的方法,還包括根據(jù)與所述類型的所述一個或多個處理單元相關(guān)聯(lián)的隊列,來調(diào)度所編譯出的可執(zhí)行 體以用于執(zhí)行;檢測所述一個或多個處理單元的執(zhí)行狀況;根據(jù)所檢測出的執(zhí)行狀況來選擇所述一個或多個處理單元;以及將所編譯出的可執(zhí)行體加載到所述一個或多個處理單元,所述一個或多個處理單元具 有并發(fā)地執(zhí)行所編譯出的可執(zhí)行體的多個線程。
51.根據(jù)權(quán)利要求50所述的計算機(jī)實現(xiàn)的方法,其中所述一個或多個處理單元是CPU 或 GPU。
52.一種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括響應(yīng)于來自在第一處理單元中運(yùn)行的應(yīng)用程序的第一 API請求,加載用于所述應(yīng)用程 序的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體;以及響應(yīng)于來自所述應(yīng)用程序的第二 API請求,為第二處理單元選擇所述一個或多個可執(zhí) 行體中的一個可執(zhí)行體。
53.根據(jù)權(quán)利要求52所述的機(jī)器可讀介質(zhì),其中所述第一處理單元和所述第二處理單 元是中央處理單元(CPU)或圖形處理單元(GPU)。
54.根據(jù)權(quán)利要求52所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中的所選擇 的一個可執(zhí)行體與所述第二 API請求相關(guān)聯(lián)。
55.根據(jù)權(quán)利要求52所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體包括所述一 個或多個可執(zhí)行體中的至少一個可執(zhí)行體的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所支持的處理單 元的版本和類型。
56.根據(jù)權(quán)利要求52所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體包括源,所 述源被編譯來生成所述一個或多個可執(zhí)行體。
57.根據(jù)權(quán)利要求56所述的機(jī)器可讀介質(zhì),其中所述源是經(jīng)由所述第一API從所述應(yīng)用程序加載的。
58.根據(jù)權(quán)利要求56所述的機(jī)器可讀介質(zhì),其中所述源是從與所述一個或多個可執(zhí)行 體相關(guān)聯(lián)的庫加載的。
59.根據(jù)權(quán)利要求55所述的機(jī)器可讀介質(zhì),其中所述加載包括比較所述描述數(shù)據(jù)和所述第二處理單元的信息;以及為所述第二處理單元,從所述源在線編譯出所述一個或多個可執(zhí)行體中的所述一個可 執(zhí)行體。
60.根據(jù)權(quán)利要求59所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中的所述一 個可執(zhí)行體與所述第一 API請求相關(guān)聯(lián)。
61.根據(jù)權(quán)利要求59所述的機(jī)器可讀介質(zhì),其中所述編譯基于所述比較指示所述一 個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體并非對于所述第二處理單元是最優(yōu)的。
62.根據(jù)權(quán)利要求59所述的機(jī)器可讀介質(zhì),其中所述編譯基于所述比較指示所述一 個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體不支持所述第二處理單元。
63.根據(jù)權(quán)利要求59所述的機(jī)器可讀介質(zhì),其中所述編譯包括生成所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體的更新后的描述數(shù)據(jù),所述更新 后的描述數(shù)據(jù)包括所述第二處理單元的版本;以及存儲所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體,所述一個或多個可執(zhí)行體中的 所述一個可執(zhí)行體包括所述更新后的描述數(shù)據(jù)。
64.根據(jù)權(quán)利要求63所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中的所述一 個可執(zhí)行體被存儲來替換所述一個或多個可執(zhí)行體中的所述至少一個可執(zhí)行體。
65.根據(jù)權(quán)利要求62所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體包括所述一 個或多個可執(zhí)行體中的所述一個可執(zhí)行體的描述數(shù)據(jù),并且其中,所述選擇是基于所述描 述數(shù)據(jù)的。
66.根據(jù)權(quán)利要求65所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中所選擇的 一個可執(zhí)行體基于所述描述數(shù)據(jù)而與用于所述第二處理單元的所述一個或多個可執(zhí)行體 中最新的版本相關(guān)聯(lián)。
67.根據(jù)權(quán)利要求65所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中所選擇的 一個可執(zhí)行體基于所述描述數(shù)據(jù)而與用于所述第二處理單元的所述一個或多個可執(zhí)行體 中最新的版本相關(guān)聯(lián)。
68.一種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括從在第一處理單元中運(yùn)行的應(yīng)用程序生成第一 API請求,用來加載用于所述應(yīng)用程序 的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體;以及從所述應(yīng)用程序生成第二 API請求,用來從所述一個或多個可執(zhí)行體中選擇一個可執(zhí) 行體用以在所述第二處理單元中執(zhí)行。
69.根據(jù)權(quán)利要求68所述的機(jī)器可讀介質(zhì),其中所述第一處理單元和所述第二處理單 元是中央處理單元(CPU)或圖形處理單元(GPU)。
70.根據(jù)權(quán)利要求68所述的機(jī)器可讀介質(zhì),其中所述第一API請求與從中編譯出所述 一個或多個可執(zhí)行體的源相關(guān)聯(lián)。
71.根據(jù)權(quán)利要求70所述的機(jī)器可讀介質(zhì),其中所選擇的可執(zhí)行體是從所述源被離線 編譯出的。
72.根據(jù)權(quán)利要求68所述的機(jī)器可讀介質(zhì),其中所選擇的可執(zhí)行體是響應(yīng)于所述第一 API請求而被離線編譯出的。
73.根據(jù)權(quán)利要求68所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體包括所選擇 的可執(zhí)行體的描述數(shù)據(jù),所述描述數(shù)據(jù)包括與所述第二處理單元兼容的版本和類型。
74.—種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括加載從源編譯出的可執(zhí)行體,用于處理單元執(zhí)行目標(biāo)處理單元中的數(shù)據(jù)處理任務(wù);檢測所述處理單元和所述目標(biāo)處理單元之間的差異;以及響應(yīng)于檢測到所述差異,基于所述差異為所述目標(biāo)處理單元編譯所述源。
75.根據(jù)權(quán)利要求74所述的機(jī)器可讀介質(zhì),其中所述可執(zhí)行體是從所述源離線編譯出的。
76.根據(jù)權(quán)利要求74所述的機(jī)器可讀介質(zhì),其中所述差異基于與所述可執(zhí)行體相關(guān)聯(lián) 的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所支持的處理單元的版本和類型。
77.根據(jù)權(quán)利要求74所述的機(jī)器可讀介質(zhì),其中所述可執(zhí)行體包括所述源。
78.根據(jù)權(quán)利要求74所述的機(jī)器可讀介質(zhì),其中所述目標(biāo)處理單元是中央處理單元 (CPU)或圖形處理單元(GPU)。
79.—種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括響應(yīng)于來自應(yīng)用程序的API請求,利用包括多個可執(zhí)行體的任務(wù)來更新與多個處理單 元相關(guān)聯(lián)的任務(wù)隊列;確定在所述多個處理單元中執(zhí)行所述任務(wù)的條件;以及基于所述條件來選擇所述多個可執(zhí)行體中的一個可執(zhí)行體用以在所述多個處理單元 中執(zhí)行。
80.根據(jù)權(quán)利要求79所述的機(jī)器可讀介質(zhì),其中所述多個可執(zhí)行體中的所選擇的可執(zhí) 行體是通過所述多個處理單元中的多個線程來并發(fā)地執(zhí)行的。
81.根據(jù)權(quán)利要求79所述的機(jī)器可讀介質(zhì),其中所述多個處理單元是中央處理單元 (CPU)或圖形處理單元(GPU)。
82.根據(jù)權(quán)利要求79所述的機(jī)器可讀介質(zhì),其中所述條件包括具有輸出存儲流的所述 隊列中的另一任務(wù)執(zhí)行完畢,所述輸出存儲流是所述任務(wù)的輸入存儲流。
83.根據(jù)權(quán)利要求79所述的機(jī)器可讀介質(zhì),其中所述條件基于與所述任務(wù)相關(guān)聯(lián)的事 件指示符,所述事件指示符用于指示所述隊列中的另一任務(wù)的完成,所述事件指示符與所 述API請求相關(guān)聯(lián)。
84.根據(jù)權(quán)利要求79所述的機(jī)器可讀介質(zhì),其中所述條件包括滿足預(yù)定準(zhǔn)則的所述多 個處理單元的執(zhí)行狀況。
85.根據(jù)權(quán)利要求84所述的機(jī)器可讀介質(zhì),其中所述預(yù)定準(zhǔn)則包括根據(jù)所述API請求 與所述任務(wù)相關(guān)聯(lián)的線程的預(yù)定數(shù)目。
86.根據(jù)權(quán)利要求84所述的機(jī)器可讀介質(zhì),其中所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體是根據(jù)所述多個可執(zhí)行體中所包括的描述數(shù)據(jù)來選擇的。
87.根據(jù)權(quán)利要求86所述的機(jī)器可讀介質(zhì),其中所述選擇包括根據(jù)所述描述數(shù)據(jù)來判 斷所述一個或多個可執(zhí)行體中的所述一個可執(zhí)行體與所述多個處理單元相兼容。
88. —種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括響應(yīng)于來自包括源的應(yīng)用程序的API請求,加載所述源來執(zhí)行數(shù)據(jù)處理功能; 自動確定多種類型的目標(biāo)數(shù)據(jù)處理單元來執(zhí)行所述數(shù)據(jù)處理功能; 為所確定的類型的目標(biāo)數(shù)據(jù)處理單元中的至少一個目標(biāo)數(shù)據(jù)處理單元,從所述源編譯 可執(zhí)行體;以及通過在所確定的類型的所述目標(biāo)數(shù)據(jù)處理單元中的至少一個目標(biāo)數(shù)據(jù)處理單元中執(zhí) 行所述可執(zhí)行體,來執(zhí)行所述數(shù)據(jù)處理功能。
89.根據(jù)權(quán)利要求88所述的機(jī)器可讀介質(zhì),其中與多個目標(biāo)處理單元相對應(yīng)的多個可 執(zhí)行體是從所述源編譯出的,并且其中所述多個目標(biāo)處理單元對應(yīng)于邏輯計算裝置。
90.根據(jù)權(quán)利要求89所述的機(jī)器可讀介質(zhì),其中所述目標(biāo)處理單元是CPU或GPU。
91.根據(jù)權(quán)利要求89所述的機(jī)器可讀介質(zhì),其中所述目標(biāo)處理單元根據(jù)所述邏輯計算 裝置進(jìn)行負(fù)載均衡。
92.根據(jù)權(quán)利要求89所述的機(jī)器可讀介質(zhì),其中所述目標(biāo)處理單元與所述邏輯計算裝置相關(guān)聯(lián)。
93.根據(jù)權(quán)利要求92所述的機(jī)器可讀介質(zhì),其中所述目標(biāo)數(shù)據(jù)處理單元中的所述至少 一個目標(biāo)數(shù)據(jù)處理單元在與所述邏輯計算裝置相對應(yīng)的所述目標(biāo)數(shù)據(jù)處理裝置內(nèi)進(jìn)行負(fù) 載均衡。
94. 一種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括從源編譯出用于一種類型的處理單元的用于執(zhí)行數(shù)據(jù)處理功能的可執(zhí)行體;以及 將所述源和所編譯出的可執(zhí)行體存儲在API庫中,響應(yīng)于來自在與所述一個或多個處 理單元分離的主處理單元中運(yùn)行的應(yīng)用程序的、對所述API庫的請求,所述源和所述編譯 出的可執(zhí)行體將由所述類型的一個或多個處理單元從所述API庫取出,以用于基于所述源 和所述編譯出的可執(zhí)行體來執(zhí)行可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能。
95.根據(jù)權(quán)利要求94所述的機(jī)器可讀介質(zhì),其中所述一個或多個處理單元是CPU或GPU。
96.根據(jù)權(quán)利要求94所述的機(jī)器可讀介質(zhì),還包括存儲與所編譯出的可執(zhí)行體相關(guān)聯(lián) 的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
97.根據(jù)權(quán)利要求94所述的機(jī)器可讀介質(zhì),其中所述可執(zhí)行體是在所述主處理單元中 被離線編譯出的。
98. 一種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括在主處理單元中執(zhí)行應(yīng)用程序來執(zhí)行數(shù)據(jù)處理功能;以及經(jīng)由API庫根據(jù)API請求,從所述API庫取出源和為一種類型的處理單元編譯出的可 執(zhí)行體,以用于由與所述主處理單元分離的、所述類型的一個或多個處理單元來執(zhí)行所編譯出的可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能。
99.根據(jù)權(quán)利要求98所述的機(jī)器可讀介質(zhì),其中所述取出包括取出與所述可執(zhí)行體相 關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
100.根據(jù)權(quán)利要求98所述的機(jī)器可讀介質(zhì),其中所述取出包括取出與所編譯出的可 執(zhí)行體相關(guān)聯(lián)的描述數(shù)據(jù),所述描述數(shù)據(jù)包括所述處理單元的所述類型。
101.根據(jù)權(quán)利要求98所述的機(jī)器可讀介質(zhì),還包括根據(jù)與所述類型的所述一個或多個處理單元相關(guān)聯(lián)的隊列,來調(diào)度所編譯出的可執(zhí)行 體以用于執(zhí)行;檢測所述一個或多個處理單元的執(zhí)行狀況;根據(jù)所檢測出的執(zhí)行狀況來選擇所述一個或多個處理單元;以及將所編譯出的可執(zhí)行體加載到所述一個或多個處理單元,所述一個或多個處理單元具 有并發(fā)地執(zhí)行所編譯出的可執(zhí)行體的多個線程。
102.根據(jù)權(quán)利要求101所述的機(jī)器可讀介質(zhì),其中所述一個或多個處理單元是CPU或GPU。
103.—種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括在主處理器上通過API接收調(diào)用,來執(zhí)行具有多個線程的應(yīng)用程序;調(diào)度所述多個線程以用于在中央處理單元(CPU)上和圖形處理單元(GPU)上的并行執(zhí) 行,所述主處理器與所述中央處理單元和所述圖形處理單元耦合,其中如果所述GPU忙于 圖形處理線程,則被調(diào)度用于在所述GPU上執(zhí)行的線程可以被調(diào)度用于在所述中央處理器 上執(zhí)行。
104.根據(jù)權(quán)利要求103所述的介質(zhì),其中所述多個線程異步并且并行地執(zhí)行,并且其 中,所述中央處理單元是單核或多核通用微處理器,并且其中,所述方法由操作系統(tǒng)(OS) 組件來執(zhí)行。
105.根據(jù)權(quán)利要求104所述的介質(zhì),其中所述OS組件判斷所述多個線程之間是否存在 依賴性,并且根據(jù)所述依賴性來調(diào)度依賴的線程。
106.根據(jù)權(quán)利要求103所述的介質(zhì),其中,所述API與源相關(guān)聯(lián),并且其中,所述調(diào)度包 括從所述源在線編譯出分離的可執(zhí)行體,用于在所述CPU和所述GPU中執(zhí)行所述多個線程。
107.一種包含可執(zhí)行指令的機(jī)器可讀介質(zhì),所述可執(zhí)行指令使得數(shù)據(jù)處理系統(tǒng)執(zhí)行一 種方法,所述方法包括在主處理器上通過API由應(yīng)用程序進(jìn)行調(diào)用來執(zhí)行所述應(yīng)用程序,所述應(yīng)用程序具有 多個線程;由所述應(yīng)用程序?qū)λ龆鄠€線程進(jìn)行初始化以用于在中央處理單元(CPU)上和圖形 處理單元(GPU)上并行執(zhí)行,所述CPU和所述GPU與所述主處理器耦合,其中如果所述GPU 忙于圖形處理線程,則被初始化用于在所述GPU上執(zhí)行的線程可以被初始化用于在所述 CPU上執(zhí)行。
108.根據(jù)權(quán)利要求107所述的介質(zhì),其中所述初始化包括通過API進(jìn)行調(diào)用來分配存 儲流以及分配計算內(nèi)核。
109.一種設(shè)備,包括用于響應(yīng)于來自在第一處理單元中運(yùn)行的應(yīng)用程序的第一 API請求,加載用于所述應(yīng) 用程序的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體的裝置;以及用于響應(yīng)于來自所述應(yīng)用程序的第二 API請求,為第二處理單元選擇所述一個或多個 可執(zhí)行體中的一個可執(zhí)行體的裝置。
110.一種設(shè)備,包括用于從在第一處理單元中運(yùn)行的應(yīng)用程序生成第一 API請求,用來加載用于所述應(yīng)用 程序的數(shù)據(jù)處理任務(wù)的一個或多個可執(zhí)行體的裝置;以及用于從所述應(yīng)用程序生成第二 API請求,用來從所述一個或多個可執(zhí)行體中選擇一個 可執(zhí)行體用以在所述第二處理單元中執(zhí)行的裝置。
111.一種設(shè)備,包括用于加載從源編譯出的可執(zhí)行體,用于處理單元執(zhí)行目標(biāo)處理單元中的數(shù)據(jù)處理任務(wù) 的裝置;用于檢測所述處理單元和所述目標(biāo)處理單元之間的差異的裝置;以及 用于響應(yīng)于檢測到所述差異,基于所述差異為所述目標(biāo)處理單元編譯所述源的裝置。
112.—種設(shè)備,包括用于響應(yīng)于來自應(yīng)用程序的API請求,利用包括多個可執(zhí)行體的任務(wù)來更新與多個處 理單元相關(guān)聯(lián)的任務(wù)隊列的裝置;用于確定在所述多個處理單元中執(zhí)行所述任務(wù)的條件的裝置;以及 用于基于所述條件來選擇所述多個可執(zhí)行體中的一個可執(zhí)行體用以在所述多個處理 單元中執(zhí)行的裝置。
113.—種設(shè)備,包括用于響應(yīng)于來自包括源的應(yīng)用程序的API請求,加載所述源來執(zhí)行數(shù)據(jù)處理功能的裝置;用于自動確定多種類型的目標(biāo)數(shù)據(jù)處理單元來執(zhí)行所述數(shù)據(jù)處理功能的裝置; 用于為所確定的類型的目標(biāo)數(shù)據(jù)處理單元中的至少一個目標(biāo)數(shù)據(jù)處理單元從所述源 編譯可執(zhí)行體的裝置;以及用于通過在所確定類型的所述目標(biāo)數(shù)據(jù)處理單元中的至少一個標(biāo)數(shù)據(jù)處理單元中執(zhí) 行所述可執(zhí)行體來執(zhí)行所述數(shù)據(jù)處理功能的裝置。
114.一種設(shè)備,包括用于從源編譯出用于一種類型的處理單元的用于執(zhí)行數(shù)據(jù)處理功能的可執(zhí)行體的裝 置;以及用于將所述源和所編譯出的可執(zhí)行體存儲在API庫中的裝置,響應(yīng)于來自在與所述一 個或多個處理單元分離的主處理單元中運(yùn)行的應(yīng)用程序的、對所述API庫的請求,所述源 和所述編譯出的可執(zhí)行體將由所述類型的一個或多個處理單元從所述API庫取出,以用于 基于所述源和所述編譯出的可執(zhí)行體來執(zhí)行可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能。
115.一種設(shè)備,包括用于在主處理單元中執(zhí)行應(yīng)用程序來執(zhí)行數(shù)據(jù)處理功能的裝置;以及 用于經(jīng)由API庫根據(jù)API請求,從所述API庫取出源和為一種類型的處理單元編譯出 的可執(zhí)行體,以用于由與所述主處理單元分離的、所述類型的一個或多個處理單元來執(zhí)行所編譯出的可執(zhí)行體,以執(zhí)行所述數(shù)據(jù)處理功能的裝置。
116.一種并行計算體系結(jié)構(gòu),包括 主處理器耦合到所述主處理器的圖形處理單元(GPU); 耦合到所述主處理器的中央處理單元(CPU);以及耦合到所述主處理器、所述CPU、所述GPU中的至少一者的存儲器,所述存儲器存儲至 少部分地在所述主處理器上執(zhí)行的系統(tǒng)程序,所述系統(tǒng)程序加載用于處理器的從程序源編 譯出的可執(zhí)行體,所述系統(tǒng)程序檢測所述CPU和所述GPU中一者與所述處理器之間的差異, 所述系統(tǒng)程序?qū)⑺龀绦蛟淳幾g成用于所述CPU和所述GPU中所述一者的新可執(zhí)行體,并 且所述系統(tǒng)程序調(diào)度要在所述CPU和所述GPU中所述一者中被執(zhí)行的所述新可執(zhí)行體。
117.根據(jù)權(quán)利要求116所述的設(shè)備,其中所述可執(zhí)行體是從所述程序源被離線編譯出的。
118.根據(jù)權(quán)利要求116所述的設(shè)備,其中所述差異基于與所述可執(zhí)行體相關(guān)聯(lián)的描述 數(shù)據(jù),所述描述數(shù)據(jù)包括所支持的處理器的版本和類型。
119.根據(jù)權(quán)利要求116所述的設(shè)備,其中所述可執(zhí)行體包括所述程序源。
120.根據(jù)權(quán)利要求109所述的設(shè)備,其中所述可執(zhí)行體包括所述程序源。
全文摘要
公開了對調(diào)度隊列中的多個可執(zhí)行體進(jìn)行調(diào)度以在諸如CPU或GPU之類的一個或多個物理計算裝置中并發(fā)地執(zhí)行的方法和設(shè)備。針對與所述一個或多個物理計算裝置不同的一種類型的物理計算裝置,從具有現(xiàn)有可執(zhí)行體的源在線編譯一個或多個可執(zhí)行體。判斷與所調(diào)度的可執(zhí)行體相應(yīng)的元素之間的依賴關(guān)系來選擇在多于一個的物理計算裝置中通過多個線程所要并發(fā)地執(zhí)行的可執(zhí)行體。如果GPU忙于圖形處理線程,則被初始化用于在物理計算裝置的GPU中執(zhí)行可執(zhí)行體的線程被初始化用于在物理計算裝置中的另一CPU中的執(zhí)行。API函數(shù)的現(xiàn)有可執(zhí)行體和源被存儲在API庫中,以在多個物理計算裝置中執(zhí)行包括現(xiàn)有可執(zhí)行體和從源在線編譯出的可執(zhí)行體在內(nèi)的多個可執(zhí)行體。
文檔編號G06F9/50GK101802789SQ200880011684
公開日2010年8月11日 申請日期2008年4月9日 優(yōu)先權(quán)日2007年4月11日
發(fā)明者杰里米·薩德梅爾, 阿夫泰伯·穆恩史 申請人:蘋果公司