两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

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

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

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


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