亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

多處理器計算平臺中的處理器間通信技術(shù)的制作方法

文檔序號:6361770閱讀:186來源:國知局
專利名稱:多處理器計算平臺中的處理器間通信技術(shù)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算平臺,且更特定來說,涉及包含多個處理器的計算平臺。
背景技術(shù)
包含多個處理器的計算平臺用于提高具有高計算密集要求和/或高數(shù)據(jù)處理量要求的應(yīng)用的性能。多處理器計算平臺可包含可充當(dāng)主機(jī)裝置的通用中央處理單元(CPU)以及主機(jī)CPU可用來卸載計算密集型任務(wù)的性能的一個或一個以上計算裝置,進(jìn)而提高整個系統(tǒng)的性能。在一些情況下,所述一個或一個以上計算裝置可經(jīng)特別設(shè)計以比主機(jī)CPU更高效地處理某些類型的任務(wù),其可提供對整個系統(tǒng)的進(jìn)一步的性能改進(jìn)。舉例來說,所述一個或一個以上計算裝置可經(jīng)特別設(shè)計以比主機(jī)CPU更高效地執(zhí)行平行算法??捎糜诙嗵幚砥饔嬎阆到y(tǒng)中的一種類型的計算裝置是圖形處理單元(GPU)。傳統(tǒng)上,GPU包含固定功能硬件,其經(jīng)特別設(shè)計以用于向顯示裝置實時地再現(xiàn)三維(3D)圖形,但是通常不可編程,即,不可將經(jīng)編譯的程序下載到GPU并在GPU上執(zhí)行。然而,近來,隨著可編程著色器單元的發(fā)展,大多數(shù)GPU架構(gòu)已經(jīng)轉(zhuǎn)變?yōu)榭删幊碳軜?gòu),所述可編程架構(gòu)包含許多并行的處理元件。所述可編程架構(gòu)允許GPU促進(jìn)不僅僅是圖形操作的執(zhí)行,而且促進(jìn)以高度并行的方式執(zhí)行通用計算任務(wù)。使用GPU來執(zhí)行通用非圖形專有計算任務(wù)可在本文中被稱作圖形處理單元上的通用計算(GPGPU),或者被稱作GPU計算。在一些情況下,GPU可使并非圖形專有的應(yīng)用編程接口(API)可用,進(jìn)而減輕對GPU的編程以用于執(zhí)行通用計算任務(wù)。GPU計算任務(wù)可包含計算密集的任務(wù)和/或包含高度并行的任務(wù),例如矩陣計算、信號處理計算、統(tǒng)計算法、分子模型化應(yīng)用、財務(wù)應(yīng)用、醫(yī)療成像、密碼分析應(yīng)用等。GPU是可用于多處理器計算平臺中的僅一種類型的計算裝置,且可使用其它類型的計算裝置來補(bǔ)充或取代GPU。舉例來說,可用于多處理器計算平臺中的其它類型的計算裝置包含(例如)額外的CPU、數(shù)字信號處理器(DSP)、小區(qū)寬帶引擎(Cell/BE)處理器,或任何其它類型的處理單元。具有多個計算裝置的多處理器計算平臺可為同類平臺或異類平臺。在同類平臺中,所有計算裝置共享共同指令集架構(gòu)(ISA)。相比而言,異類平臺可包含具有不同ISA的兩個或兩個以上計算裝置。一般來說,不同類型的計算裝置可具有不同的ISA,且相同類型的不同品牌的計算裝置也可具有不同的ISA。可通過利用多核計算裝置和/或眾核計算裝置來進(jìn)一步改進(jìn)多處理器計算平臺的性能。多核計算裝置的一實例是上文所描述的GPU,其含有具有多個處理核心的可編程著色器單元。然而,CPU還可經(jīng)設(shè)計以包含多個處理核心。一般來說,可將包含多個處理核心的任何芯片或裸片視為多核處理器。處理核心可指代能夠?qū)μ囟▔K數(shù)據(jù)執(zhí)行指令的處理單元。舉例來說,可將GPU內(nèi)的單一算法邏輯單元(ALU)單元或向量處理器視為處理核心。眾核處理器一般指代具有相對大量的核心的多核處理器,例如大于十個核心,且通常使用與用于設(shè)計具有少量核心的多核處理器的技術(shù)不同的技術(shù)來設(shè)計。多核處理器通過允許在單一芯片上在多個核心上并行地(例如,同時地)執(zhí)行軟件程序來提供性能改進(jìn)。并行編程模型指代經(jīng)設(shè)計以允許在多個處理核心上同時地執(zhí)行程序的編程模型。所述程序可為多線程程序,在這種情況下,單一線程可操作于每一處理核心上。在一些實例中,單一計算裝置可包含用于執(zhí)行程序的所有處理核心。在其它實例中,用于執(zhí)行程序的一些處理核心可位于相同類型或不同類型的不同計算裝置上??墒褂每缙脚_、跨供應(yīng)商、異類計算平臺、并行編程模型應(yīng)用編程接口(API)開提供共同語言規(guī)范,以用于對包含由實施不同ISA的不同供應(yīng)商可能制成的不同類型的計算裝置的異類多核計算平臺進(jìn)行并行編程。開放計算語言(OpenCL )是跨平臺、跨供應(yīng)商、異類計算平臺、并行編程API的一實例。此類API可經(jīng)設(shè)計以允許GPU上的更一般化的數(shù)據(jù)處理。舉例來說,除了經(jīng)由計算語言暴露經(jīng)擴(kuò)展的著色器子系統(tǒng)能力之外,這些API可以非圖形專有的方式將數(shù)據(jù)流和控制路徑一般化到GPU中。然而,目前,由此類API提供的指令集是基于GPU的硬件架構(gòu),且因此受限于與現(xiàn)有GPU架構(gòu)相容的功能性。

發(fā)明內(nèi)容
本發(fā)明描述可用于多處理器計算平臺內(nèi)的通信技術(shù)。在一些實例中,所述技術(shù)可提供軟件接口,所述軟件接口可用于支持在使用命令隊列起始任務(wù)的多處理器計算平臺內(nèi)的消息傳遞。在額外的實例中,所述技術(shù)可提供軟件接口,所述軟件接口可用于多處理器計算平臺內(nèi)的共享存儲器處理器間通信。在進(jìn)一步的實例中,所述技術(shù)可提供圖形處理單元GPU,所述圖形處理單元包含用于支持所述GPU與主機(jī)CPU之間的消息傳遞和/或共享存儲器通信的硬件。 在一個實例中,本發(fā)明描述一種包含一個或一個以上處理器的主機(jī)裝置。所述裝置進(jìn)一步包含命令隊列接口,所述命令隊列接口在一個或一個以上處理器上執(zhí)行且經(jīng)配置以響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令置于命令隊列中。所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元(GPU)相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù)。所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始GPU上的任務(wù)的執(zhí)行。所述裝置進(jìn)一步包含消息傳遞接口,所述消息傳遞接口在一個或一個以上處理器上執(zhí)行且經(jīng)配置以在于GPU上執(zhí)行的任務(wù)正在GPU上執(zhí)行時且響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上消息傳遞指令而在于所述主機(jī)裝置上執(zhí)行的進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息。在另一實例中,本發(fā)明描述一種方法,所述方法包含響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而用在主機(jī)裝置的一個或一個以上處理器上執(zhí)行的命令隊列接口將多個命令放置到命令隊列中。所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元(GPU)相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù)。所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始GPU上的任務(wù)的執(zhí)行。所述方法進(jìn)一步包含在于GPU上執(zhí)行的任務(wù)正在GPU上執(zhí)行時且響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上消息傳遞指令而用在主機(jī)裝置的一個或一個以上處理器上執(zhí)行的消息傳遞接口在于所述主機(jī)裝置上執(zhí)行的進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息。
在另一實例中,本發(fā)明描述一種設(shè)備,所述設(shè)備包含用于響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令放置到命令隊列中的裝置。所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元(GPU)相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù)。所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始GPU上的任務(wù)的執(zhí)行。所述設(shè)備進(jìn)一步包含在于GPU上執(zhí)行的任務(wù)正在GPU上執(zhí)行時且響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上消息傳遞指令而在于所述主機(jī)裝置上執(zhí)行的進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息的裝置。在另一實例中,本發(fā)明描述一種包含指令的計算機(jī)可讀存儲媒體,所述指令致使一個或一個以上處理器響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令放置到命令隊列中。所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元(GPU)相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù)。所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始GPU上的任務(wù)的執(zhí)行。所述計算機(jī)可讀存儲媒體進(jìn)一步包含致使所述一個或一個以上處理器在于GPU上執(zhí)行的任務(wù)正在GPU上執(zhí)行時且響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上消息傳遞指令而在于所述主機(jī)裝置上執(zhí)行的進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息的指令。在另一實例中,本發(fā)明描述一種圖形處理單元(GPU),其包含經(jīng)配置以執(zhí)行任務(wù)的一個或一個以上處理器。所述GPU進(jìn)一步包含可由主機(jī)裝置存取的一個或一個以上寄存器。所述GPU進(jìn)一步包含消息傳遞模塊,所述消息傳遞模塊經(jīng)配置以在于所述一個或一個以上處理器上執(zhí)行的任務(wù)正在所述一個或一個以上處理器上執(zhí)行時且響應(yīng)于從在所述一個或一個以上處理器上執(zhí)行的任務(wù)接收到一個或一個以上消息傳遞指令而經(jīng)由所述一個或一個以上寄存器在所述任務(wù)與在主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息。在另一實例中,本發(fā)明描述一種方法,所述方法包含用圖形處理單元(GPU)的消息傳遞模塊從在所述GPU上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令。所述方法進(jìn)一步包含經(jīng)由可由主機(jī)裝置存取的所述GPU內(nèi)的一個或一個以上寄存器在于所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的任務(wù)接收到一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消肩、O在另一實例中,本發(fā)明描述一種設(shè)備,所述設(shè)備包含用于從在圖形處理單元(GPU)上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令的裝置。所述設(shè)備進(jìn)一步包含用于經(jīng)由可由主機(jī)裝置存取的所述GPU內(nèi)的一個或一個以上寄存器在于所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的任務(wù)接收到一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息的裝置。在另一實例中,本發(fā)明描述一種包括指令的計算機(jī)可讀媒體,所述指令致使一個或一個以上處理器從在圖形處理單元(GPU)上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令。所述計算機(jī)可讀存儲媒體進(jìn)一步包含致使所述一個或一個以上處理器經(jīng)由可由主機(jī)裝置存取的所述GPU內(nèi)的一個或一個以上寄存器在于所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的任務(wù)接收到一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息的指令。在另一實例中,本發(fā)明描述一種方法,所述方法包含用在主機(jī)裝置的一個或一個以上處理器上執(zhí)行的存儲器緩沖器接口來接收包含指定是否應(yīng)針對可由主機(jī)裝置以及由圖形處理單元(GPU)存取的共享存儲器空間來啟用直接模式的信息的指令。所述方法進(jìn)一步包含基于指定是否應(yīng)啟用所述直接模式的所述信息而用所述存儲器緩沖器接口針對所述共享存儲器空間選擇性地啟用所述直接模式。在另一實例中,本發(fā)明描述一種包含一個或一個以上處理器的主機(jī)裝置。所述裝置進(jìn)一步包含存儲器緩沖器接口,所述存儲器緩沖器接口在所述一個或一個以上處理器上執(zhí)行且經(jīng)配置以接收包含指定是否應(yīng)針對共享存儲器空間來啟用直接模式的信息的指令,且基于指定是否應(yīng)啟用所述直接模式的所述信息而針對所述共享存儲器空間選擇性地啟用所述直接模式,所述共享存儲器空間可由主機(jī)裝置以及由圖形處理單元(GPU)存取。在另一實例中,本發(fā)明描述一種設(shè)備,所述設(shè)備包含用于接收包含指定是否應(yīng)針對可由主機(jī)裝置以及由圖形處理單元(GPU)存取的共享存儲器空間來啟用直接模式的信息的指令的裝置。所述設(shè)備進(jìn)一步包含用于基于指定是否應(yīng)啟用所述直接模式的所述信息而針對所述共享存儲器空間選擇性地啟用所述直接模式的裝置。在另一實例中,本發(fā)明描述一種包括指令的計算機(jī)可讀媒體,所述指令致使一個或一個以上處理器接收包含指定是否應(yīng)針對可由主機(jī)裝置以及由圖形處理單元(GPU)存取的共享存儲器空間來啟用直接模式的信息的指令。所述計算機(jī)可讀存儲器媒體進(jìn)一步包含致使一個或一個以上處理器基于指定是否應(yīng)啟用所述直接模式的所述信息而針對所述共享存儲器空間選擇性地啟用所述直接模式的指令。在另一實例中,本發(fā)明描述一種圖形處理單元(GPU),其包含與存儲器相關(guān)聯(lián)的GI3U高速緩沖存儲器。所述裝置進(jìn)一步包含一個或一個以上處理模塊,所述一個或一個以上處理模塊經(jīng)配置以響應(yīng)于接收到指定是否應(yīng)使用高速緩存服務(wù)來用于相對于存儲器的存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者的信息而選擇性地使用GPU高速緩沖存儲器的高速緩存服務(wù)來相對于所述存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者。在另一實例中,本發(fā)明描述一種方法,所述方法包含響應(yīng)于接收到指定是否應(yīng)使用高速緩存服務(wù)來用于相對于存儲器的存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者的信息而選擇性地使用與存儲器相關(guān)聯(lián)的圖形處理單元(GPU)高速緩沖存儲器的高速緩存服務(wù)來相對于所述存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者。在另一實例中,本發(fā)明描述一種設(shè)備,其包含與存儲器相關(guān)聯(lián)的GPU高速緩沖存儲器。所述設(shè)備進(jìn)一步包含用于響應(yīng)于接收到指定是否應(yīng)使用高速緩存服務(wù)來用于相對于存儲器的存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者的信息而選擇性地使用GPU高速緩沖存儲器的高速緩存服務(wù)來相對于所述存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者的裝置。在另一實例中,本發(fā)明描述一種包括指令的計算機(jī)可讀媒體,所述指令致使一個或一個以上處理器響應(yīng)于接收到指定是否應(yīng)使用高速緩存服務(wù)來用于相對于存儲器的存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者的信息而選擇性地使用與存儲器相關(guān)聯(lián)的圖形處理單元(GPU)高速緩沖存儲器的高速緩存服務(wù)來相對于所述存儲器空間執(zhí)行讀取操作和寫入操作中的至少一者。


圖1是說明根據(jù)本發(fā)明的可用于執(zhí)行消息傳遞技術(shù)的實例性計算系統(tǒng)的方框圖。圖2是說明根據(jù)本發(fā)明的可用于圖1的計算系統(tǒng)中的實例性GPU的方框圖。圖3是說明根據(jù)本發(fā)明的用于多處理器平臺環(huán)境中的消息傳遞的實例性技術(shù)的流程圖。圖4是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的發(fā)送指令的實例性技術(shù)的流程圖。圖5和6是說明根據(jù)本發(fā)明的可用于實施圖4中所說明的技術(shù)的若干部分的實例性技術(shù)的流程圖。圖7是說明根據(jù)本發(fā)明的用于處理例如GPU等計算裝置中的所接收的消息的實例性技術(shù)的流程圖。圖8是說明根據(jù)本發(fā)明的用于執(zhí)行由在例如GPU等計算裝置上執(zhí)行的任務(wù)發(fā)布的接收指令的實例性技術(shù)的流程圖。圖9和10是說明根據(jù)本發(fā)明的可用于實施圖8中所說明的技術(shù)的若干部分的實例性技術(shù)的流程圖。圖11是說明根據(jù)本發(fā)明的用于執(zhí)行由在例如GPU等計算裝置上執(zhí)行的進(jìn)程發(fā)布的發(fā)送指令的實例性技術(shù)的流程圖。圖12和13是說明根據(jù)本發(fā)明的可用于實施圖11中所說明的技術(shù)的若干部分的實例性技術(shù)的流程圖。圖14是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的寄存回調(diào)例程指令的實例性技術(shù)的流程圖。圖15是說明根據(jù)本發(fā)明的用于處理從計算裝置接收到的中斷的實例性技術(shù)的流程圖。圖16和17是說明根據(jù)本發(fā)明的可用于實施圖15中所說明的技術(shù)的若干部分的實例性技術(shù)的流程圖。圖18是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的讀取指令的實例性技術(shù)的流程圖。圖19是說明根據(jù)本發(fā)明的可用于實施圖18中所說明的技術(shù)的若干部分的實例性技術(shù)的流程圖。圖20是說明根據(jù)本發(fā)明的可促進(jìn)直接存儲器對象的使用的實例性計算系統(tǒng)的方框圖。圖21是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的存儲器對象創(chuàng)建指令的實例性技術(shù)的流程圖。圖22是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的存儲器對象創(chuàng)建指令的另一實例性技術(shù)的流程圖。圖23到26是說明根據(jù)本發(fā)明的用于處理高速緩存模式指令和直接模式指令的實例性技術(shù)的流程圖。圖27是說明根據(jù)本發(fā)明的可用于圖20的計算系統(tǒng)中的實例性GPU的方框圖。
圖28是說明根據(jù)本發(fā)明的用于處理高速緩存模式指令和直接模式指令的實例性技術(shù)的流程圖。圖29是說明根據(jù)本發(fā)明的用于執(zhí)行由在主機(jī)裝置上執(zhí)行的進(jìn)程發(fā)布的存儲器對象創(chuàng)建指令的另一實例性技術(shù)的流程圖。圖30是說明根據(jù)本發(fā)明GPU可如何處理根據(jù)第一編譯技術(shù)而編譯的指令序列的流程圖。圖31是說明根據(jù)本發(fā)明的用于編譯用于任務(wù)的源代碼的實例性技術(shù)的流程圖。圖32是說明根據(jù)本發(fā)明的可由GPU用來選擇性地使用高速緩存服務(wù)的實例性技術(shù)的流程圖。
具體實施例方式本發(fā)明描述可用于多處理器計算平臺內(nèi)的通信技術(shù)。在一些實例中,所述技術(shù)可提供軟件接口,所述軟件接口可用于支持在使用命令隊列起始任務(wù)的多處理器計算平臺內(nèi)的消息傳遞。在額外的實例中,所述技術(shù)可提供軟件接口,所述軟件接口可用于多處理器計算平臺內(nèi)的共享存儲器處理器間通信。在進(jìn)一步的實例中,所述技術(shù)可提供圖形處理單元GPU,所述圖形處理單元包含用于支持所述GPU與主機(jī)CPU之間的消息傳遞和/或共享存儲器通信的硬件。近年來,最初經(jīng)設(shè)計以用于處理實時3D圖形的處理器(例如,圖形處理單元(GPU))被一般化,從而執(zhí)行通用計算任務(wù)(GPGPU)。已通過采用業(yè)界標(biāo)準(zhǔn)(例如,開放計算語言(OpenCL )標(biāo)準(zhǔn))來部分地證明GPGPU的價值。OpenCL是可用于在多處理器計算平臺上執(zhí)行具有任務(wù)級并行度和/或數(shù)據(jù)級并行度的跨平臺、跨供應(yīng)商、異類計算平臺、并行編程API的一實例。所述API經(jīng)特別設(shè)計以通過以非圖形專有的方式來使GPU的數(shù)據(jù)流和控制路徑一般化而允許GPU上的更一般化的數(shù)據(jù)處理。此方法的一個限制是主機(jī)CPU與計算裝置(例如,GPU)之間的數(shù)據(jù)通信的粗糙粒度。舉例來說,OpenCL API提供支持主機(jī)裝置與一個或一個以上計算裝置之間的任務(wù)級粒度的通信的命令隊列接口。每一命令隊列一般保持將由特定計算裝置執(zhí)行的命令。在主機(jī)裝置上執(zhí)行的主機(jī)進(jìn)程可通過將指令主機(jī)裝置執(zhí)行存儲器傳送的命令放置在命令隊列中而在主機(jī)存儲器空間與裝置存儲器空間之間傳送數(shù)據(jù)。類似地,主機(jī)進(jìn)程可通過將指令主機(jī)裝置在計算裝置上執(zhí)行任務(wù)的命令放置在命令隊列中而致使任務(wù)開始在計算裝置上執(zhí)行。所述命令隊列接口可經(jīng)配置以提供對命令的按序執(zhí)行或?qū)γ畹臒o序執(zhí)行。當(dāng)命令隊列接口經(jīng)配置以提供對命令的按序執(zhí)行時,命令隊列接口保證將以將命令放置到命令隊列中的次序來執(zhí)行命令,且直到前一命令已完成執(zhí)行之后才將開始對后續(xù)命令的執(zhí)行。因此,當(dāng)主機(jī)進(jìn)程將命令放置在命令隊列中來執(zhí)行任務(wù)時,命令隊列等待任務(wù)完成執(zhí)行,之后執(zhí)行可能被隨后放置到命令隊列中的任何額外的命令。在涉及主機(jī)CPU和GPU以及按序命令隊列的簡單環(huán)境中,主機(jī)CPU與GPU之間的通信方案可涉及以下操作:(I)主機(jī)CPU準(zhǔn)備好數(shù)據(jù)且將所述數(shù)據(jù)放置到GPU可存取的存儲器中;(2)主機(jī)CPU命令GPU執(zhí)行任務(wù);(3)主機(jī)CPU等待GPU完成對所述任務(wù)的執(zhí)行;以及(4)主機(jī)CPU將數(shù)據(jù)從GPU可存取的存儲器復(fù)制到主機(jī)存儲器。在此類配置中,將在GPU上執(zhí)行任務(wù)所需的所有數(shù)據(jù)傳送到GPU可存取的存儲器,之后開始對所述任務(wù)的執(zhí)行,且由在GPU上執(zhí)行的任務(wù)產(chǎn)生的數(shù)據(jù)不可用于主機(jī)CPU,直到在GPU上執(zhí)行的任務(wù)完成執(zhí)行之后方可。主機(jī)CPU與GPU之間的數(shù)據(jù)共享上的此粗糙度可阻止對用于基于并行的應(yīng)用的許多有用操作的實施,例如,在于主機(jī)裝置上執(zhí)行的進(jìn)程與在GPU上執(zhí)行的任務(wù)之間傳遞進(jìn)程間消息。此些消息(例如)對于允許在GPU上運(yùn)行的任務(wù)具有在主機(jī)CPU上執(zhí)行遠(yuǎn)程過程調(diào)用(RPC)的能力可為有用的。當(dāng)命令隊列接口經(jīng)配置以提供對命令的無序執(zhí)行時,在特定任務(wù)的執(zhí)行期間,主機(jī)進(jìn)程不能夠控制何時將發(fā)生對特定命令的執(zhí)行。因此,用于命令隊列的無序執(zhí)行模式實際上也不允許在于主機(jī)裝置上執(zhí)行的進(jìn)程與在GPU上執(zhí)行的任務(wù)之間實施進(jìn)程間消息傳遞。關(guān)于用于OpenCL中的存儲器模型,API界定所謂的全局CL緩沖器和全局CL圖像,其可用于在主機(jī)CPU與GPU之間共享數(shù)據(jù)或用于在多個OpenCL計算裝置之間共享數(shù)據(jù)。然而,CPU和GPU無法同時從緩沖器進(jìn)行讀取或?qū)懭氲骄彌_器。通常,CPU準(zhǔn)備好含有源數(shù)據(jù)的一個或一個以上緩沖器,且將所述緩沖器傳遞到GPU以供處理。GPU修改這些緩沖器或?qū)⒔Y(jié)果放置在還曾由在CPU上執(zhí)行的軟件先驗分配的其它緩沖器中,以用于接收GPU數(shù)據(jù)修改。雖然OpenCL中的存儲器對象當(dāng)前允許將主機(jī)存儲器空間的區(qū)用于存儲由計算裝置使用的緩沖器數(shù)據(jù),但所述規(guī)范允許計算裝置對此數(shù)據(jù)進(jìn)行高速緩存以用于對任務(wù)的更高效的執(zhí)行。主機(jī)裝置一般不能直接使用于對緩沖器數(shù)據(jù)進(jìn)行高速緩存的計算裝置高速緩沖存儲器無效。因此,即使主機(jī)裝置將蓋寫存儲于主機(jī)存儲器空間中的某些存儲器緩沖器數(shù)據(jù),也不能保證計算裝置中的高速緩沖存儲器將得到更新以向計算裝置提供對經(jīng)修改數(shù)據(jù)的直接存取。另外,因為由計算裝置執(zhí)行的計算的結(jié)果可被存儲在計算裝置高速緩沖存儲器中,所以在主機(jī)裝置上執(zhí)行的主機(jī)進(jìn)程不能從緩沖器讀取任何部分結(jié)果,因為此類數(shù)據(jù)可能歸因于計算裝置高速緩沖存儲器中所存儲的較新的數(shù)據(jù)而無效。因此,OpenCL中的存儲器管理模型未容易地經(jīng)由共享存儲器實現(xiàn)運(yùn)行中的數(shù)據(jù)共享。在一些實例中,可使用本發(fā)明中所描述的技術(shù)來克服OpenCL API的上文提及的限制中的一者或一者以上。舉例來說,本發(fā)明的技術(shù)可提供軟件接口,所述軟件接口可用于支持在使用任務(wù)級粒度命令隊列起始任務(wù)的多處理器計算平臺內(nèi)的進(jìn)程間消息傳遞。作為另一實例,本發(fā)明的技術(shù)可提供軟件接口,所述軟件接口可用于支持經(jīng)由多處理器計算平臺內(nèi)的共享存儲器的運(yùn)行中的數(shù)據(jù)共享。在一些實例中,本發(fā)明的技術(shù)可提供促進(jìn)軟件級消息傳遞的GPU硬件架構(gòu)。舉例來說,本發(fā)明的技術(shù)可提供經(jīng)配置以支持對軟件級消息傳遞指令的執(zhí)行的GPU硬件架構(gòu)。在進(jìn)一步的實例中,本發(fā)明的技術(shù)可提供促進(jìn)GPU與主機(jī)CPU之間的共享存儲器通信的GPU硬件架構(gòu)。舉例來說,本發(fā)明的技術(shù)可提供經(jīng)配置以針對共享存儲器空間選擇性地啟用和停用高速緩存服務(wù)且/或針對共享存儲器空間選擇性地啟用和停用高速緩沖存儲器-相關(guān)性機(jī)制。根據(jù)本發(fā)明的第一方面,提供一種消息傳遞接口,所述消息傳遞接口促進(jìn)在由計算裝置執(zhí)行任務(wù)期間在主機(jī)裝置與一個或一個以上計算裝置之間執(zhí)行消息傳遞指令。消息傳遞可指代一種形式的進(jìn)程間以及潛在地裝置間的通信,其中正通信的進(jìn)程各自執(zhí)行互補(bǔ)組的操作以成功地傳遞消息。舉例來說,根據(jù)消息傳遞協(xié)議進(jìn)行通信的進(jìn)程中的每一者可實施發(fā)送操作和接收操作。本發(fā)明中的消息傳遞技術(shù)可允許CPU和計算裝置(例如,GPU)在于計算裝置上執(zhí)行任務(wù)期間在彼此之間傳遞消息。以此方式,實施任務(wù)級粒度命令隊列通信方案的多處理器計算平臺可以能夠促進(jìn)進(jìn)程間和/或裝置間通信。在一些實例中,本發(fā)明中所描述的消息傳遞技術(shù)可被稱作“帶外信令”技術(shù),因為所述技術(shù)使用不同于命令隊列接口的接口,命令隊列接口通常用于OpenCL中以用于在主機(jī)裝置與計算裝置(例如,GPU)之間的通信。換句話說,本發(fā)明的技術(shù)可包含新的帶外通信接口,其與OpenCL內(nèi)所包含的帶內(nèi)命令隊列接口在邏輯上分離。帶外通信接口可不經(jīng)受命令隊列接口所經(jīng)受的相同任務(wù)級粒度,進(jìn)而提供對上文相對于命令隊列的任務(wù)級粒度所描述的一個或一個以上限制的解決方案。根據(jù)本發(fā)明的技術(shù)在CPU與GPU之間傳送的消息可為任何類型的消息。不同類型的消息的實例包含信號、存儲器分配請求、存儲器取消分配請求、通知消息、同步消息、遠(yuǎn)程過程調(diào)用消息(例如,作為遠(yuǎn)程過程調(diào)用(RPC)的部分的消息)、數(shù)據(jù)包、報告消息、斷言機(jī)制消息,以及記錄消息。在當(dāng)前的OpenCL范例中,從主機(jī)CPU到GPU的所有請求均在OpenCL命令隊列中排隊等候,且隨后被發(fā)送到GPU。具體來說,應(yīng)用可能將大量內(nèi)核執(zhí)行和緩沖器操作排在命令隊列中。同時,如果首先被排隊的任務(wù)(例如,內(nèi)核執(zhí)行)需要(例如)向CPU請求額外的存儲器分配,那么就出現(xiàn)問題。首先,GPU如何在運(yùn)行內(nèi)核中向CPU通知其需要進(jìn)行存儲器分配?其次,CPU如何向GPU通知存儲器分配的完成以及新分配的存儲器塊的地址?然而,本發(fā)明的消息傳遞接口技術(shù)可能夠通過允許含有上述通知和信息的一個或一個以上消息在CPU與GPU之間傳遞來解決這些問題。在一些實例中,可使用本發(fā)明的帶外信令技術(shù)在主機(jī)CPU與一個或一個以上計算裝置(例如,OpenCL計算裝置)之間實施信令。帶外信令可例如使用推拉機(jī)制來提供快速的帶外通知。在一些實例中,帶外信令技術(shù)可攜載相對少量的數(shù)據(jù)。根據(jù)本發(fā)明的第二方面,提供能夠?qū)⑾l(fā)送到在不同于GPU的處理器上執(zhí)行的進(jìn)程以及從所述進(jìn)程接收消息的GPU。舉例來說,GPU可包含經(jīng)配置以實施用于發(fā)送和接收消息的一個或一個以上操作的硬件。在一些實例中,根據(jù)本發(fā)明而設(shè)計的GPU可包含一個或一個以上主機(jī)可存取的寄存器,所述寄存器經(jīng)配置以存儲與消息傳遞協(xié)議相關(guān)聯(lián)的狀態(tài)和數(shù)據(jù)信息。所述一個或一個以上寄存器可經(jīng)配置以促進(jìn)在GPU上執(zhí)行的任務(wù)與在不同于GPU的裝置上執(zhí)行的進(jìn)程之間的消息傳遞。在進(jìn)一步的實例中,GPU的ALU處理塊(例如,可編程著色器單元)可通信地耦合到主機(jī)可存取的寄存器以經(jīng)由所述主機(jī)可存取的寄存器來發(fā)送和接收消息。GPU還可經(jīng)設(shè)計以包含各種輪詢和/或中斷機(jī)制以實施同步和/或異步消息傳遞技術(shù)。根據(jù)本發(fā)明的第三方面,提供存儲器緩沖器接口,其允許創(chuàng)建直接存儲器對象。直接存儲器對象可用于實施非可高速緩存共享存儲器空間和/或高速緩沖存儲器相干共享存儲器空間,以便在于計算裝置上執(zhí)行的任務(wù)正在計算裝置上執(zhí)行時在于主機(jī)裝置上執(zhí)行的進(jìn)程與所述任務(wù)之間共享數(shù)據(jù)。所述共享存儲器空間可為可由主機(jī)裝置以及計算裝置(例如,GPU)兩者在計算裝置執(zhí)行任務(wù)期間存取的存儲器空間。如本文中所使用的非可高速緩存的共享存儲器空間可指代針對所述存儲器空間而停用主機(jī)裝置和計算裝置中的一者或兩者中的一個或一個以上對應(yīng)高速緩沖存儲器的共享存儲器空間。如本文中所使用的高速緩沖存儲器相干共享存儲器空間可指代其中使用共享存儲器高速緩沖存儲器相干技術(shù)來維持主機(jī)裝置和計算裝置中的一者或兩者中的一個或一個以上對應(yīng)高速緩沖存儲器內(nèi)的高速緩沖存儲器相干的共享存儲器空間。所述非可高速緩存共享存儲器空間以及高速緩沖存儲器相干共享存儲器空間可在任何時間允許數(shù)據(jù)共享。在一些實例中,可將直接存儲器對象實施為非可高速緩存易失性共享存儲器和/或?qū)嵤楦咚倬彌_存儲器相干易失性共享存儲器來用于主機(jī)裝置和計算裝置。在一些實例中,本發(fā)明的直接存儲器對象可被集成在包含存儲器對象存儲器管理方案的跨平臺、跨供應(yīng)商、異類計算平臺、并行編程API內(nèi)。舉例來說,可將直接存儲器對象集成到OpenCL中以作為OpenCL存儲器對象的額外屬性,例如OpenCL緩沖器對象或OpenCL圖像對象。在此些實例中,可通過修改存儲器對象創(chuàng)建功能以包含一參數(shù)或旗標(biāo)來創(chuàng)建直接存儲器對象,所述參數(shù)或旗標(biāo)指定由功能調(diào)用創(chuàng)建的所得的存儲器對象是否應(yīng)為標(biāo)準(zhǔn)模式存儲器對象或直接模式存儲器對象。以此方式,本發(fā)明的技術(shù)可允許實施包含若干存儲器對象存儲器管理方案(例如,OpenCL)以經(jīng)由不經(jīng)受高速緩沖存儲器相干性問題的共享存儲器空間來實施運(yùn)行中的數(shù)據(jù)共享的API的多處理器計算平臺。在進(jìn)一步的實例中,本發(fā)明的直接存儲器對象可用于主機(jī)CPU與OpenCL計算裝置之間或者不同的OpenCL計算裝置之間的運(yùn)行中的數(shù)據(jù)共享。在額外的實例中,直接存儲器對象可含有內(nèi)部同步標(biāo)記。在進(jìn)一步的實例中,可與帶外信號一起使用直接存儲器對象以用于同步。根據(jù)本發(fā)明的第四方面,提供包含對應(yīng)于共享存儲器空間的高速緩沖存儲器的GPU,所述共享存儲器空間可針對特定存儲器地址空間而被選擇性地停用以便提供非可高速緩存共享存儲器空間。舉例來說,GPU可響應(yīng)于接收到指定是否應(yīng)使用高速緩存服務(wù)來相對于共享存儲器空間執(zhí)行讀取操作和/或?qū)懭氩僮鞯男畔⒍鴨⒂煤屯S糜膳c共享存儲器空間相關(guān)聯(lián)的聞速緩沖存儲器提供的聞速緩存服務(wù)。在一些實例中,指定是否應(yīng)使用聞速緩存服務(wù)來相對于共享存儲器空間執(zhí)行讀取操作和/或?qū)懭氩僮鞯男畔⒖蔀楦咚倬彺婺J街噶罨蛑苯幽J街噶?,其指定是否?yīng)使用高速緩存模式或直接模式來執(zhí)行特定指令。在進(jìn)一步的實例中,指定是否應(yīng)使用高速緩存服務(wù)來相對于共享存儲器空間執(zhí)行讀取操作和/或?qū)懭氩僮鞯男畔⒖蔀橹苯幽J酱鎯ζ鲗ο髮傩裕渲付ㄊ欠襻槍Υ鎯ζ鲗ο髥⒂弥苯幽J?。在進(jìn)一步的實例中,本發(fā)明的技術(shù)可提供包含高速緩沖存儲器相干性模式的GPU,所述高速緩沖存儲器相干模式可被選擇性地啟用以提供高速緩沖存儲器相干共享存儲器空間。在一些實例中,GPU可基于從主機(jī)裝置接收到的一個或一個以上指令來選擇性地啟用高速緩沖存儲器相干模式以用于對應(yīng)于共享存儲器空間的高速緩沖存儲器的一部分。在主機(jī)裝置基于由主機(jī)進(jìn)程指定的直接模式參數(shù)而分配共享存儲器空間之后,主機(jī)裝置可即刻向GPU發(fā)布一個或一個以上指令以選擇性地啟用共享存儲器空間高速緩沖存儲器相干性模式以用于對應(yīng)于共享存儲器空間的高速緩沖存儲器的一部分。與可通過單獨(dú)使用OpenCL命令隊列接口而獲得的主機(jī)CPU與GPU之間或兩個OpenCL計算裝置之間的任務(wù)耦合相比,本發(fā)明的帶外信令和直接緩沖技術(shù)可提供更精細(xì)粒度的任務(wù)耦合。本發(fā)明的技術(shù)可允許多處理器計算平臺執(zhí)行多種操作以便輔助并行和/或多線程程序的高校執(zhí)行。舉例來說,本發(fā)明的技術(shù)可允許在GPU上執(zhí)行的任務(wù)啟動RPC。作為另一實例,本發(fā)明的技術(shù)可允許在GPU上執(zhí)行的任務(wù)經(jīng)由CPU來啟動另一 GPU任務(wù)。作為進(jìn)一步的實例,本發(fā)明的技術(shù)可允許在GPU上執(zhí)行的任務(wù)向CPU和/或在CPU上執(zhí)行的驅(qū)動器發(fā)布資源管理請求,例如存儲器分配和/或存儲器取消分配請求。作為又一實例,本發(fā)明的技術(shù)可允許在GPU上執(zhí)行的任務(wù)執(zhí)行狀態(tài)檢查和到CPU的一般消息傳遞,例如斷言機(jī)制的實施、進(jìn)展報告,和/或診斷記錄。圖1是說明根據(jù)本發(fā)明的實例性計算系統(tǒng)10的方框圖。計算系統(tǒng)10經(jīng)配置以在多個處理裝置上處理一個或一個以上軟件應(yīng)用。在一些實例中,所述一個或一個以上軟件應(yīng)用可包含主機(jī)進(jìn)程,且計算系統(tǒng)10可經(jīng)配置以執(zhí)行主機(jī)進(jìn)程且分布由在計算系統(tǒng)10內(nèi)的其它計算裝置上的主機(jī)進(jìn)程起始的一個或一個以上任務(wù)的執(zhí)行。在進(jìn)一步的實例中,可根據(jù)并行編程模型來編程由計算系統(tǒng)10執(zhí)行的主機(jī)進(jìn)程和/或任務(wù)。舉例來說,所述應(yīng)用可包含經(jīng)設(shè)計以充分利用基礎(chǔ)硬件系統(tǒng)的任務(wù)級并行度和/或數(shù)據(jù)級并行度的指令。計算系統(tǒng)10可為個人計算機(jī)、桌上型計算機(jī)、膝上型計算機(jī)、計算機(jī)工作站、視頻游戲平臺或控制臺、移動電話(例如,蜂窩式或衛(wèi)星電話)、移動電話、陸線電話、因特網(wǎng)電話、手持式裝置(例如,便攜式視頻游戲裝置或個人數(shù)字助理(PDA))、數(shù)字媒體播放器(例如,個人音樂播放器)、視頻播放器、顯示裝置,或電視、電視機(jī)頂盒、服務(wù)器、中間網(wǎng)絡(luò)裝置、大型計算機(jī)或處理信息的任何其它類型的裝置。計算系統(tǒng)10包含主機(jī)裝置12、圖形處理單元(GPU) 14、存儲器16和互連網(wǎng)絡(luò)18。主機(jī)裝置12經(jīng)配置以提供用于執(zhí)行用于多處理器計算平臺API的主機(jī)進(jìn)程和運(yùn)行時模塊的平臺。通常,主機(jī)裝置12是通用CPU,但主機(jī)裝置12可為能夠執(zhí)行程序的任何類型的裝置。主機(jī)裝置12經(jīng)由互連網(wǎng)絡(luò)18通信地耦合到GPU14和存儲器16。主機(jī)裝置12包含主機(jī)進(jìn)程20和運(yùn)行時模塊22,主機(jī)進(jìn)程20和運(yùn)行時模塊22中的每一者可在一個或一個以上可編程處理器的任何組合上執(zhí)行。主機(jī)進(jìn)程20包含形成用于在計算系統(tǒng)10的計算系統(tǒng)平臺上執(zhí)行的軟件程序的一組指令。所述軟件程序可經(jīng)設(shè)計以執(zhí)行用于終端用戶的一個或一個以上特定任務(wù)。在一些實例中,此些任務(wù)可涉及可利用由計算系統(tǒng)10提供的多個處理裝置和并行架構(gòu)的計算密
集算法。運(yùn)行時模塊22可為在主機(jī)裝置12上執(zhí)行的軟件模塊,其實施經(jīng)配置以服務(wù)于主機(jī)進(jìn)程20中所包含的指令中的一者或一者以上的一個或一個以上接口。由運(yùn)行時模塊22實施的接口包含命令隊列接口 24和主機(jī)消息傳遞接口 26。在一些實例中,運(yùn)行時模塊22可實施除了本發(fā)明中所描述的接口之外的標(biāo)準(zhǔn)多處理器系統(tǒng)API內(nèi)所包含的一個或一個以上接口。在一些實例中,所述標(biāo)準(zhǔn)API可為異類計算平臺AP1、跨平臺AP1、跨供應(yīng)商AP1、并行編程AP1、任務(wù)級并行編程API和/或數(shù)據(jù)級并行編程API。在進(jìn)一步的實例中,所述標(biāo)準(zhǔn)API可為OpenCLAPI。在此些實例中,可將運(yùn)行時模塊22設(shè)計成遵照OpenCL規(guī)范中的一者或一者以上。在額外的實例中,可將運(yùn)行時模塊22實施為驅(qū)動器程序(例如,GPU驅(qū)動器)的一部分或?qū)嵤轵?qū)動器程序。命令隊列接口 24經(jīng)配置以從主機(jī)進(jìn)程20接收一個或一個以上排隊指令,且執(zhí)行由所接收的指令指定的功能。在一些實例中,可根據(jù)OpenCL規(guī)范來設(shè)計命令隊列接口 24。舉例來說,命令隊列接口 24可實施OpenCL規(guī)徂中所指定的排隊指令中的一者或一者以上以用于與命令隊列交互。根據(jù)本發(fā)明,主機(jī)消息傳遞接口 26經(jīng)配置以從主機(jī)進(jìn)程20接收一個或一個以上消息傳遞指令,且執(zhí)行由所接收的指令指定的功能。在一些實例中,可將主機(jī)消息傳遞接口26實施為對現(xiàn)有標(biāo)準(zhǔn)API (例如,OpenCLAPI)的擴(kuò)展。在額外的實例中,可將主機(jī)消息傳遞接口 26集成到現(xiàn)有標(biāo)準(zhǔn)API (例如,OpenCLAPI)中。GPU14經(jīng)配置以響應(yīng)于從主機(jī)裝置12接收到的指令來執(zhí)行一個或一個以上任務(wù)。GPU14可為包含一個或一個以上可編程處理元件的任何類型的GPU。舉例來說,GPU14可包含經(jīng)配置以并行地執(zhí)行任務(wù)的多個執(zhí)行實例的一個或一個以上可編程著色器單元??删幊讨鲉卧砂旤c(diǎn)著色器單元、片段著色器單元、幾何著色器單元和/或統(tǒng)一著色器單元。GPU14經(jīng)由互連網(wǎng)絡(luò)18通信地耦合到主機(jī)裝置12和存儲器16。GPU14包含任務(wù)28和裝置消息傳遞接口 30。任務(wù)28和裝置消息傳遞接口 30可在一個或一個以上可編程處理元件的任何組合上執(zhí)行。任務(wù)28包括形成用于在計算系統(tǒng)10中的計算裝置上執(zhí)行的任務(wù)的一組指令。在一些實例中,用于任務(wù)28的所述組指令可在主機(jī)進(jìn)程20中界定,且在一些情況下,由在主機(jī)裝置12上執(zhí)行的主機(jī)進(jìn)程20中所包含的指令編譯。在進(jìn)一步的實例中,任務(wù)28可為具有在GPU14上并行地執(zhí)行的多個執(zhí)行實例的內(nèi)核程序。在此些實例中,主機(jī)進(jìn)程20可界定用于內(nèi)核的索引空間,其將內(nèi)核執(zhí)行實例映射到用于執(zhí)行內(nèi)核執(zhí)行實例的相應(yīng)處理元件,且GPU14可根據(jù)為內(nèi)核界定的索引空間來執(zhí)行用于任務(wù)28的多個內(nèi)核執(zhí)行實例。根據(jù)本發(fā)明,裝置消息傳遞接口 30經(jīng)配置以從主機(jī)進(jìn)程20接收一個或一個以上消息傳遞指令,且執(zhí)行由所接收的指令指定的功能。在一些實例中,可將裝置消息傳遞接口 30實施為對現(xiàn)有標(biāo)準(zhǔn)API的擴(kuò)展。舉例來說,所述標(biāo)準(zhǔn)API可為標(biāo)準(zhǔn)計算裝置API,例如OpenCL C API。在額外的實例中,可將裝置消息傳遞指令30集成到現(xiàn)有標(biāo)準(zhǔn)API (例如,OpenCL C API)中。存儲器16經(jīng)配置以存儲數(shù)據(jù)以供主機(jī)裝置12和GPU14中的一者或兩者使用。存儲器16可包含一個或一個以上易失性或非易失性存儲器或存儲裝置的任何組合,所述易失性或非易失性存儲器或存儲裝置例如為隨機(jī)存取存儲器(RAM)、靜態(tài)RAM(SRAM)、動態(tài)RAM(DRAM)、只讀存儲器(ROM)、可擦除可編程ROM(EPROM)、電可擦除可編程ROM(EEPROM)、快閃存儲器、磁性數(shù)據(jù)存儲媒體或光學(xué)存儲媒體。存儲器16經(jīng)由互連網(wǎng)絡(luò)18通信地耦合到主機(jī)裝置12和GPU14。存儲器16包含命令隊列32。命令隊列32可為實施于存儲器16中的數(shù)據(jù)結(jié)構(gòu),存儲器16存儲并檢索從命令隊列接口 24接收到的命令。在一些實例中,命令隊列32可為以特定次序存儲命令以用于執(zhí)行的緩沖器。互連網(wǎng)絡(luò)18經(jīng)配置以促進(jìn)主機(jī)裝置12、GPU14與存儲器16之間的通信?;ミB網(wǎng)絡(luò)18可為此項技術(shù)中已知的任何類型的互連網(wǎng)絡(luò)。在圖1的實例性計算系統(tǒng)10中,互連網(wǎng)絡(luò)18是總線。所述總線可包含多種總線結(jié)構(gòu)中的任一者中的一者或一者以上,例如第三代總線(例如,超傳輸總線或不限帶寬總線)、第二代總線(例如,高級圖形端口總線、外圍組件互連快遞(PCIe)總線,或高級可擴(kuò)展接口(AXI)總線),或任何其它類型的總線?;ミB網(wǎng)絡(luò)18耦合到主機(jī)裝置12、GPU14和存儲器16?,F(xiàn)在將進(jìn)一步詳細(xì)地描述計算系統(tǒng)10中的組件的結(jié)構(gòu)和功能性。如上文所論述,主機(jī)進(jìn)程20包含一組指令。所述組指令可包含(例如)一個或一個以上排隊指令,以及一個或一個以上主機(jī)消息傳遞指令。在額外的實例中,所述組指令可包含指定將在GPU14上執(zhí)行的任務(wù)或內(nèi)核的指令、創(chuàng)建命令隊列且使命令隊列與特定裝置相關(guān)聯(lián)的指令、編譯并捆綁程序的指令、設(shè)置內(nèi)核自變量的指令、界定索引空間的指令、界定裝置背景的指令,以及支持由主機(jī)進(jìn)程20提供的功能性的其它指令。主機(jī)進(jìn)程20可通過向命令隊列接口 24發(fā)布指令命令隊列接口 24將一個或一個以上命令放置到命令隊列32中的一個或一個以上排隊指令而與命令隊列接口 24交互。所述一個或一個以上排隊指令可包含指令命令隊列接口 24將存儲器傳送命令排到命令隊列32中的存儲器傳送排隊指令。舉例來說,所述一個或一個以上排隊指令可包含用以將一命令排隊的指令,所述命令指令主機(jī)裝置12(例如,在主機(jī)裝置12上執(zhí)行的運(yùn)行時模塊22)在與主機(jī)裝置12相關(guān)聯(lián)的存儲器空間與和GPU14相關(guān)聯(lián)的存儲器空間之間傳送數(shù)據(jù)。如果存儲器空間在主機(jī)裝置12執(zhí)行主機(jī)進(jìn)程20期間可由主機(jī)裝置12存取,那么存儲器空間可與主機(jī)裝置12相關(guān)聯(lián)。類似地,如果存儲器空間在GPU14執(zhí)行任務(wù)28期間可由GPU14存取,那么存儲器空間可與GPU14相關(guān)聯(lián)。與主機(jī)裝置12相關(guān)聯(lián)的存儲器空間可在本文中被稱作主機(jī)存儲器空間,且與GPU14相關(guān)聯(lián)的存儲器空間可在本文中被稱作裝置存儲器空間。在一些實例中,存儲器16可包含主機(jī)存儲器空間和裝置存儲器空間兩者的部分。在進(jìn)一步的實例中,主機(jī)存儲器空間和裝置存儲器空間中的一者或兩者的部分可位于圖1的計算系統(tǒng)10中未展示的一個或一個以上其它存儲器裝置上。在一些實例中,指令主機(jī)裝置12在與主機(jī)裝置12相關(guān)聯(lián)的存儲器空間與和GPU14相關(guān)聯(lián)的存儲器空間之間傳送數(shù)據(jù)的命令可為指令運(yùn)行時模塊22將存儲于主機(jī)存儲器空間的一部分中的數(shù)據(jù)傳送到分配于裝置存儲器空間中的緩沖器對象的命令。由主機(jī)進(jìn)程20發(fā)布以將此命令排隊的指令可在本文中被稱作寫入緩沖器排隊指令。在一些情況下,寫入緩沖器排隊指令可采取由OpenCL API規(guī)范指定的ClEnqueueWriteBuffer O功能的形式。在額外的實例中,指令主機(jī)裝置12在與主機(jī)裝置12相關(guān)聯(lián)的存儲器空間與和GPU14相關(guān)聯(lián)的存儲器空間之間傳送數(shù)據(jù)的命令可為指令運(yùn)行時模塊22將存儲于分配于裝置存儲器空間中的緩沖器對象中的數(shù)據(jù)傳送到主機(jī)存儲器空間的一部分的命令。由主機(jī)進(jìn)程20發(fā)布以將此命令排隊的指令可在本文中被稱作讀取緩沖器排隊指令。在一些情況下,讀取緩沖器排隊指令可采取由OpenCL API規(guī)范制定的ClEnqueueReadBuffer O功能的形式。所述一個或一個以上排隊指令還可包含指令命令隊列接口 24將任務(wù)執(zhí)行命令排隊到命令隊列32中的任務(wù)執(zhí)行排隊指令。舉例來說,所述一個或一個以上排隊指令可包含用以將一命令排隊的指令,所述命令指令主機(jī)裝置12 (例如,在主機(jī)裝置12上執(zhí)行的運(yùn)行時模塊22)在GPU14上執(zhí)行任務(wù)。在一些實例中,用以執(zhí)行任務(wù)的命令可為在GPU14的多個處理元件上并行地執(zhí)行任務(wù)的多個執(zhí)行實例的命令。舉例來說,所述任務(wù)可為內(nèi)核,主機(jī)進(jìn)程20可界定用于內(nèi)核的索引空間,其將內(nèi)核執(zhí)行實例映射到GPU14中的用于執(zhí)行內(nèi)核執(zhí)行實例的相應(yīng)處理元件。在此實例中,用以執(zhí)行任務(wù)的命令可為用以根據(jù)為GPU14界定的索引空間在GPU14上執(zhí)行內(nèi)核的命令。在一些情況下,任務(wù)執(zhí)行排隊指令可采取由OpenCLAPI指定的ClEnqueueNDRangeKernel O功能的形式。根據(jù)本發(fā)明,主機(jī)進(jìn)程20還可通過向主機(jī)消息傳遞接口 26發(fā)布指令主機(jī)消息傳遞接口 26在于主機(jī)裝置12上執(zhí)行的主機(jī)進(jìn)程20與在GPU14上執(zhí)行的任務(wù)28之間傳遞一個或一個以上消息的一個或一個以上主機(jī)消息傳遞指令而與主機(jī)消息傳遞接口 26交互。所述主機(jī)消息傳遞指令可由主機(jī)裝置12執(zhí)行。在一些實例中,主機(jī)消息傳遞指令可包含指令主機(jī)裝置12將指定數(shù)據(jù)發(fā)送到指定裝置的發(fā)送指令。舉例來說,所述發(fā)送指令可指令主機(jī)消息傳遞接口 26將消息從在主機(jī)裝置12上執(zhí)行的主機(jī)進(jìn)程20發(fā)送到在GPU14上執(zhí)行的任務(wù)28。在一些實例中,所述發(fā)送指令可包含指定應(yīng)將消息發(fā)送到其的特定裝置的第一輸入?yún)?shù),以及指定將發(fā)送的消息的內(nèi)容的第二輸入?yún)?shù)。所述發(fā)送指令可為封鎖發(fā)送指令或非封鎖發(fā)送指令。在一些實例中,所述發(fā)送指令可包含指定所述發(fā)送指令是封鎖發(fā)送指令還是非封鎖發(fā)送指令的第三輸入?yún)?shù)。封鎖發(fā)送指令可在完成發(fā)送操作之前一直進(jìn)行等待,之后返回到調(diào)用進(jìn)程,例如在主機(jī)裝置12上執(zhí)行的主機(jī)進(jìn)程20。非封鎖發(fā)送指令可返回到調(diào)用進(jìn)程,而不在完成發(fā)送操作之前一直等待。舉例來說,非封鎖發(fā)送指令返回到特定發(fā)送操作的句柄,可由調(diào)用進(jìn)程隨后詢問所述句柄以確定發(fā)送操作是否成功。非封鎖發(fā)送操作可能失敗,且在失敗的情況下,調(diào)用進(jìn)程可需要再次發(fā)布發(fā)送指令以重試發(fā)送操作。在一些實例中,用于發(fā)送指令的接口可采取以下形式:
權(quán)利要求
1.一種主機(jī)裝置,其包括: 一個或一個以上處理器; 命令隊列接口,其在所述一個或一個以上處理器上執(zhí)行且經(jīng)配置以響應(yīng)于從在所述主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令放置到命令隊列中,所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元GPU相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù),所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始所述GPU上的任務(wù)的執(zhí)行;以及 消息傳遞接口,其在所述一個或一個以上處理器上執(zhí)行且經(jīng)配置以在所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程接收到一個或一個以上消息傳遞指令而在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息。
2.根據(jù)權(quán)利要求1所述的裝置, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述消息傳遞接口將消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到在所述GPU上執(zhí)行的所述任務(wù),且 其中所述消息傳遞接口進(jìn)一步經(jīng)配置以在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時響應(yīng)于接收到所述發(fā)送指令而將所述消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)。
3.根據(jù)權(quán)利要求1所述的 裝置, 其中所述一個或一個以上消息傳遞指令包括寄存回調(diào)例程指令,所述寄存回調(diào)例程指令響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的信號而指令所述消息傳遞接口調(diào)用回調(diào)例程,且 其中所述消息傳遞接口進(jìn)一步經(jīng)配置以響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的所述信號而起始在所述寄存回調(diào)例程指令中所指定的所述回調(diào)例程的執(zhí)行。
4.根據(jù)權(quán)利要求1所述的裝置, 其中所述一個或一個以上消息傳遞指令包括輪詢指令,所述輪詢指令指令所述消息傳遞接口針對指示在所述GPU上執(zhí)行的任務(wù)是否已發(fā)送消息的消息狀態(tài)信息來輪詢所述GPUi 其中所述消息傳遞接口進(jìn)一步經(jīng)配置以響應(yīng)于接收到所述輪詢指令而針對所述消息狀態(tài)信息來輪詢所述GPU,且在所述消息狀態(tài)信息指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的情況下,從所述GPU獲得所述消息。
5.根據(jù)權(quán)利要求1所述的裝置,其中在所述GPU上執(zhí)行的所述任務(wù)包含指令所述GPU將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程的指令。
6.根據(jù)權(quán)利要求1所述的裝置,其中在所述GPU上執(zhí)行的所述任務(wù)包含指令所述GPU在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息的指令。
7.根據(jù)權(quán)利要求1所述的裝置,其中所述消息傳遞接口進(jìn)一步經(jīng)配置以在不將任何命令放置于所述命令隊列中的情況下執(zhí)行所述一個或一個以上消息傳遞指令。
8.一種方法,其包括: 響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而用在所述主機(jī)裝置的一個或一個以上處理器上執(zhí)行的命令隊列接口將多個命令放置到命令隊列中,所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元GPU相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù),所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始所述GPU上的任務(wù)的執(zhí)行;以及 在所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程接收到一個或一個以上消息傳遞指令而用在所述主機(jī)裝置的所述一個或一個以上處理器上執(zhí)行的消息傳遞接口在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息。
9.根據(jù)權(quán)利要求8所述的方法, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述消息傳遞接口將消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到在所述GPU上執(zhí)行的所述任務(wù),且 其中所述方法進(jìn)一步包括在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于接收到所述發(fā)送指令而用所述消息傳遞接口將所述消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)。
10.根據(jù)權(quán)利要求8所述的方法, 其中所述一個或一個以上消息傳遞指令包括寄存回調(diào)例程指令,所述寄存回調(diào)例程指令響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的信號而指令所述消息傳遞接口調(diào)用回調(diào)例程,且 其中所述方法進(jìn)一步包括響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的所述信號而起始在所述寄存回調(diào)例程指令中所指定的所述回調(diào)例程的執(zhí)行。
11.根據(jù)權(quán)利要求8所述的方法, 其中所述一個或一個以上消息傳遞指令包括輪詢指令,所述輪詢指令指令所述消息傳遞接口針對指示在所述GPU上執(zhí)行的所述任務(wù)是否已發(fā)送消息的消息狀態(tài)信息來輪詢所述GPU,且 其中所述方法進(jìn)一步包括:` 響應(yīng)于接收到所述輪詢指令而用所述消息傳遞接口針對所述消息狀態(tài)信息來輪詢所述GPU ;以及 在所述消息狀態(tài)信息指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的情況下,從所述GPU獲得所述消息。
12.根據(jù)權(quán)利要求8所述的方法,其中在所述GPU上執(zhí)行的所述任務(wù)包含指令所述GPU將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程的指令。
13.根據(jù)權(quán)利要求8所述的方法,其中在所述GPU上執(zhí)行的所述任務(wù)包含指令所述GPU在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息的指令。
14.根據(jù)權(quán)利要求8所述的方法,其進(jìn)一步包括: 用所述消息傳遞接口在不將任何命令放置于所述命令隊列中的情況下執(zhí)行所述一個或一個以上消息傳遞指令。
15.—種設(shè)備,其包括: 用于響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令放置到命令隊列中的裝置,所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元GPU相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù),所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始所述GPU上的任務(wù)的執(zhí)行;以及 用于在所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程接收到一個或一個以上消息傳遞指令而在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息的裝置。
16.根據(jù)權(quán)利要求15所述的設(shè)備, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述用于傳遞所述一個或一個以上消息的裝置將消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到在所述GPU上執(zhí)行的所述任務(wù),且 其中所述設(shè)備進(jìn)一步包括用于在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時響應(yīng)于接收到所述發(fā)送指令而將所述消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的裝置。
17.根據(jù)權(quán)利要求15所述的設(shè)備, 其中所述一個或一個以上消息傳遞指令包括寄存回調(diào)例程指令,所述寄存回調(diào)例程指令響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的信號而指令所述用于傳遞所述一個或一個以上消息的裝置調(diào)用回調(diào)例程,且 其中所述設(shè)備進(jìn)一步包括用于響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的所述信號而起始在所述寄存回調(diào)例程指令中所指定的所述回調(diào)例程的執(zhí)行的裝置。
18.根據(jù)權(quán)利要求15所述的設(shè)備, 其中所述一個或一個以上消息傳遞指令包括輪詢指令,所述輪詢指令指令所述用于傳遞所述一個或一個以上消息的裝置針對指示在所述GPU上執(zhí)行的所述任務(wù)是否已發(fā)送消息的消息狀態(tài)信息來輪詢所述GPU,且其中所述設(shè)備進(jìn)一步包括: 用于響應(yīng)于接收到所述輪詢指令而針對所述消息狀態(tài)信息來輪詢所述GPU的裝置;以及 用于在所述消息狀態(tài)信息指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的情況下從所述GPU獲得所述消息的裝置。
19.一種計算機(jī)可讀媒體,其包括致使一個或一個以上處理器進(jìn)行以下操作的指令: 響應(yīng)于從在主機(jī)裝置上執(zhí)行的進(jìn)程接收到一個或一個以上排隊指令而將多個命令放置到命令隊列中,所述多個命令包含第一命令,所述第一命令指令所述主機(jī)裝置在與所述主機(jī)裝置相關(guān)聯(lián)的第一存儲器空間與和圖形處理單元GPU相關(guān)聯(lián)的第二存儲器空間之間傳送數(shù)據(jù),所述多個命令進(jìn)一步包含第二命令,所述第二命令指令所述主機(jī)裝置起始所述GPU上的任務(wù)的執(zhí)行;以及 在所述GPU上執(zhí)行的任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程接收到一個或一個以上消息傳遞指令而在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程與所述任務(wù)之間傳遞一個或一個以上消息。
20.根據(jù)權(quán)利要求19所述的計算機(jī)可讀媒體, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述一個或一個以上處理器將消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到在所述GPU上執(zhí)行的所述任務(wù),且 其中所述計算機(jī)可讀媒體進(jìn)一步包括致使所述一個或一個以上處理器在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時響應(yīng)于接收到所述發(fā)送指令而將所述消息從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的指令。
21.根據(jù)權(quán)利要求19所述的計算機(jī)可讀媒體, 其中所述一個或一個以上消息傳遞指令包括寄存回調(diào)例程指令,所述寄存回調(diào)例程指令響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的信號而指令所述一個或一個以上處理器調(diào)用回調(diào)例程,且 其中所述計算機(jī)可讀媒體進(jìn)一步包括致使所述一個或一個以上處理器響應(yīng)于從所述GPU接收到指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的所述信號而起始在所述寄存回調(diào)例程指令中所指定的所述回調(diào)例程的執(zhí)行的指令。
22.根據(jù)權(quán)利要求19所述的計算機(jī)可讀媒體, 其中所述一個或一個以上消 息傳遞指令包括輪詢指令,所述輪詢指令指令所述一個或一個以上處理器針對指示在所述GPU上執(zhí)行的所述任務(wù)是否已發(fā)送消息的消息狀態(tài)信息來輪詢所述GPU,且 其中所述計算機(jī)可讀媒體進(jìn)一步包括致使所述一個或一個以上處理器進(jìn)行以下操作的指令: 響應(yīng)于接收到所述輪詢指令而針對所述消息狀態(tài)信息來輪詢所述GPU ;以及 在所述消息狀態(tài)信息指示在所述GPU上執(zhí)行的所述任務(wù)已發(fā)送消息的情況下,從所述GPU獲得所述消息。
23.一種圖形處理單元GPU,其包括: 一個或一個以上處理器,其經(jīng)配置以執(zhí)行任務(wù); 一個或一個以上寄存器,其可由主機(jī)裝置存?。灰约? 消息傳遞模塊,其經(jīng)配置以在所述一個或一個以上處理器上執(zhí)行的所述任務(wù)正在所述一個或一個以上處理器上執(zhí)行時且響應(yīng)于從在所述一個或一個以上處理器上執(zhí)行的所述任務(wù)接收到一個或一個以上消息傳遞指令而經(jīng)由所述一個或一個以上寄存器在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息。
24.根據(jù)權(quán)利要求23所述的GPU, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述消息傳遞模塊將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程,且其中所述消息傳遞模塊進(jìn)一步經(jīng)配置以將與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)存儲在所述一個或一個以上寄存器中。
25.根據(jù)權(quán)利要求23所述的GPU, 其中所述一個或一個以上消息傳遞指令包括接收指令,所述接收指令指令所述消息傳遞模塊在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息,且 其中所述消息傳遞模塊進(jìn)一步經(jīng)配置以從所述一個或一個以上寄存器獲得與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)。
26.—種方法,其包括: 用圖形處理單元GPU的消息傳遞模塊從在所述GPU上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令;以及 經(jīng)由所述GPU內(nèi)的可由主機(jī)裝置存取的一個或一個以上寄存器在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的所述任務(wù)接收到所述一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息。
27.根據(jù)權(quán)利要求26所述的方法, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述消息傳遞模塊將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程,且 其中所述方法進(jìn)一步包括將與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)存儲在所述一個或一個以上寄存器中。
28.根據(jù)權(quán)利要求26所述的方法, 其中所述一個或一個以上消息傳遞指令包括接收指令,所述接收指令指令所述消息傳遞模塊在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息,且 其中所述方法進(jìn)一步包括從所述一個或一個以上寄存器獲得與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)。
29.—種設(shè)備,其包括: 用于從在圖形處理單元GPU上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令的裝置;以及 用于經(jīng)由所述GPU內(nèi)的可由主機(jī)裝置存取的一個或一個以上寄存器在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的所述任務(wù)接收到所述一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息的裝置。
30.根據(jù)權(quán)利要求29所述的設(shè)備, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述用于傳遞的裝置將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程,且 其中所述設(shè)備進(jìn)一步包括用于將與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)存儲在所述一個或一個以上寄存器中的裝置。
31.根據(jù)權(quán)利要求29所述的設(shè)備, 其中所述一個或一個以上消息傳遞指令包括接收指令,所述接收指令指令所述用于傳遞的裝置在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息,且 其中所述設(shè)備進(jìn)一步包括用于從所述一個或一個以上寄存器獲得與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)的裝置。
32.—種計算機(jī)可讀媒體,其包括致使一個或一個以上處理器進(jìn)行以下操作的指令: 從在圖形處理單元GPU上執(zhí)行的任務(wù)接收一個或一個以上消息傳遞指令;以及 經(jīng)由所述GPU內(nèi)的可由主機(jī)裝置存取的一個或一個以上寄存器在所述GPU上執(zhí)行的所述任務(wù)正在所述GPU上執(zhí)行時且響應(yīng)于從在所述GPU上執(zhí)行的所述任務(wù)接收到所述一個或一個以上消息傳遞指令而在所述任務(wù)與在所述主機(jī)裝置上執(zhí)行的進(jìn)程之間傳遞一個或一個以上消息。
33.根據(jù)權(quán)利要求32 所述的計算機(jī)可讀媒體, 其中所述一個或一個以上消息傳遞指令包括發(fā)送指令,所述發(fā)送指令指令所述一個或一個以上處理器將消息從在所述GPU上執(zhí)行的所述任務(wù)發(fā)送到在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程,且 其中所述計算機(jī)可讀媒體進(jìn)一步包括致使所述一個或一個以上處理器將與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)存儲于所述一個或一個以上寄存器中的指令。
34.根據(jù)權(quán)利要求32所述的計算機(jī)可讀媒體, 其中所述一個或一個以上消息傳遞指令包括接收指令,所述接收指令指令所述一個或一個以上處理器在可用的情況下向所述任務(wù)提供從在所述主機(jī)裝置上執(zhí)行的所述進(jìn)程發(fā)送到所述任務(wù)的消息,且 其中所述計算機(jī)可讀媒體進(jìn)一步包括致使所述一個或一個以上處理器從所述一個或一個以上寄存器獲得與所述消息相關(guān)聯(lián)的消息數(shù)據(jù)的指令。
全文摘要
本發(fā)明描述可用于多處理器計算平臺內(nèi)的通信技術(shù)。在一些實例中,所述技術(shù)可提供可用于在使用命令隊列起始任務(wù)的多處理器計算平臺內(nèi)支持消息傳遞的軟件接口。在額外的實例中,所述技術(shù)可提供可用于多處理器計算平臺內(nèi)的共享存儲器處理器間通信的軟件接口。在進(jìn)一步的實例中,所述技術(shù)可提供圖形處理單元GPU,所述圖形處理單元包含用于支持所述GPU與主機(jī)CPU之間的消息傳遞和/或共享存儲器通信的硬件。
文檔編號G06F9/54GK103109274SQ201180044782
公開日2013年5月15日 申請日期2011年9月19日 優(yōu)先權(quán)日2010年9月20日
發(fā)明者阿列克謝·V·布爾德, 科林·克里斯托弗·夏普, 戴維·里赫爾·加西亞加西亞, 張弛紅 申請人:高通股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1