本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種GPU資源的分配方法及系統(tǒng)。
背景技術(shù):
隨著GPU(Graphic Processing Unit,圖形處理器)通用技術(shù)的發(fā)展,GPU不僅能夠處理圖像負(fù)載,也能夠處理特定類型的通用程序。目前,當(dāng)有多個(gè)不同的kernel程序需要訪問GPU時(shí),一般是以序列化的方式使請(qǐng)求訪問GPU的kernel程序按照發(fā)送請(qǐng)求的時(shí)間順序逐個(gè)訪問GPU。如果一個(gè)延遲很長(zhǎng)的kernel程序正在占用GPU,當(dāng)有優(yōu)先級(jí)更高的kernel程序需要訪問GPU時(shí),必須等前面正在訪問GPU的kernel程序以及正在等待訪問GPU的kernel程序運(yùn)行結(jié)束后,釋放出GPU中的SM(Stream Multiprocessor,流式多處理器)資源,該優(yōu)先級(jí)更高的kernel程序才能訪問GPU,使得該優(yōu)先級(jí)更高的kernel程序得不到及時(shí)響應(yīng),影響業(yè)務(wù)質(zhì)量。
為了避免延時(shí)長(zhǎng)的kernel程序長(zhǎng)時(shí)間獨(dú)占GPU中的SM資源,當(dāng)有高優(yōu)先級(jí)的kernel程序需要訪問GPU時(shí),可以查找空閑的SM,當(dāng)查找到空閑的SM時(shí),將高優(yōu)先級(jí)的kernel程序分發(fā)給該空閑的SM運(yùn)行。
然而,如果GPU中沒有空閑的SM,則需要等待GPU中出現(xiàn)空閑的SM時(shí),才能夠開始運(yùn)行高優(yōu)先級(jí)的kernel程序,導(dǎo)致高優(yōu)先級(jí)的kernel程序得不到及時(shí)的響應(yīng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供一種GPU資源的分配方法及系統(tǒng),可以解決高優(yōu)先級(jí)的kernel程序得不到及時(shí)響應(yīng)的問題。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例一種圖形處理器GPU資源的分配方法,所述方法應(yīng)用于GPU資源的分配系統(tǒng)中,所述系統(tǒng)包括全局邏輯控制器以及至少兩個(gè)能夠與所述全局邏輯控制器通信的流式多處理器SM,所述方法包括:
所述全局邏輯控制器從核kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序,所述kernel狀態(tài)寄存器表中包括每個(gè)未完成運(yùn)行的kernel程序的優(yōu)先級(jí)以及每個(gè)未完成運(yùn)行的kernel程序中未分發(fā)的線程塊block數(shù)量,所述待分發(fā)kernel 程序?yàn)樗鰇ernel狀態(tài)寄存器表中優(yōu)先級(jí)最高且未分發(fā)的block數(shù)量不為零的kernel程序;
所述全局邏輯控制器從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,所述SM狀態(tài)寄存器表用于存儲(chǔ)每個(gè)SM中的剩余資源量;
當(dāng)所述全局邏輯控制器未查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),從所述SM狀態(tài)寄存器表中查找第一SM,所述第一SM為能夠運(yùn)行至少一個(gè)線程束warp的SM;
當(dāng)所述全局邏輯控制器查找到所述第一SM時(shí),將所述待分發(fā)kernel程序中的block分發(fā)給所述第一SM。
在第一種可能的實(shí)施例中,結(jié)合第一方面,在所述全局邏輯控制器從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM之后,所述方法還包括:
當(dāng)所述全局邏輯控制器查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),確定第一數(shù)量,所述第一數(shù)量為所述能夠運(yùn)行一個(gè)完整block的SM實(shí)際能夠運(yùn)行的block的數(shù)量;
當(dāng)所述待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于所述第一數(shù)量時(shí),將所述待分發(fā)kernel程序中所述第一數(shù)量的block分發(fā)給所述能夠運(yùn)行至少一個(gè)完整block的SM;
當(dāng)所述待分發(fā)kernel程序中未分發(fā)的block的數(shù)量小于或等于所述第一數(shù)量時(shí),將所述待分發(fā)kernel程序中未分發(fā)的block全部分發(fā)給所述能夠運(yùn)行至少一個(gè)完整block的SM。
在第二種可能的實(shí)施例中,結(jié)合第一方面中的第一種可能的實(shí)施例,在所述全局邏輯控制器將所述待分發(fā)kernel程序中的一個(gè)block分發(fā)給所述第一SM之后,所述方法還包括:
第一SM邏輯控制器從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,所述第一SM邏輯控制器為所述第一SM中的SM邏輯控制器,所述block狀態(tài)寄存器表包括被分發(fā)到所述第一SM中的每個(gè)block的優(yōu)先級(jí);
所述第一SM邏輯控制器查找當(dāng)前的空閑硬件warp;
當(dāng)所述第一SM邏輯控制器確定所述空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將所述優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給所述空閑硬件warp,并更新所述block狀態(tài)寄存器表。
在第三種可能的實(shí)施例中,結(jié)合第一方面或第一方面中上述任一種可能的 實(shí)施例,所述SM狀態(tài)寄存器表中包括每個(gè)SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間,所述第一SM為所述剩余寄存器數(shù)量大于運(yùn)行一個(gè)warp所需的寄存器數(shù)量、所述剩余硬件warp數(shù)量大于運(yùn)行一個(gè)warp所需的硬件warp數(shù)量且所述剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)warp所需的共享存儲(chǔ)空間的SM。
在第四種可能的實(shí)施例中,結(jié)合第一方面中第三種可能的實(shí)施例,在所述當(dāng)所述第一SM邏輯控制器確定所述空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將所述優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給所述硬件warp之后,所述方法還包括:
所述第一SM邏輯控制器確定有運(yùn)行完成的warp時(shí),通知所述全局邏輯控制器更新所述SM狀態(tài)寄存器表中的所述第一SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。
第二方面,本發(fā)明實(shí)施例提供一種圖形處理器GPU資源的分配系統(tǒng),所述系統(tǒng)包括全局邏輯控制器以及至少兩個(gè)能夠與所述全局邏輯控制器通信的流式多處理器SM;所述全局邏輯控制器包括:第一確定單元、第一查找單元以及第一分發(fā)單元;
所述第一確定單元,用于確定待分發(fā)kernel程序,所述kernel狀態(tài)寄存器表中包括每個(gè)未完成運(yùn)行的kernel程序的優(yōu)先級(jí)以及每個(gè)未完成運(yùn)行的kernel程序中未分發(fā)的block數(shù)量,所述待分發(fā)kernel程序?yàn)樗鰇ernel狀態(tài)寄存器表中優(yōu)先級(jí)最高且未分發(fā)的block數(shù)量不為零的kernel程序;
所述第一查找單元,用于從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,所述SM狀態(tài)寄存器表用于存儲(chǔ)每個(gè)SM中的剩余資源量;當(dāng)未查找到能夠運(yùn)行至少一個(gè)完整線程塊block的SM時(shí),從所述SM狀態(tài)寄存器表中查找第一SM,所述第一SM為能夠運(yùn)行至少一個(gè)線程束warp的SM;
所述第一分發(fā)單元,用于當(dāng)查找到所述第一SM時(shí),將所述待分發(fā)kernel程序中的block分發(fā)給所述第一SM;
所述第一SM,用于運(yùn)行所述第一單元分發(fā)的所述待分發(fā)kernel程序中的block。
在第一種可能的實(shí)施例中,結(jié)合第二方面,所述第一確定單元,還用于當(dāng)所述第一查找單元查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),確定第一數(shù)量,所述第一數(shù)量為所述能夠運(yùn)行一個(gè)完整block的SM實(shí)際能夠運(yùn)行的block的數(shù) 量;
所述第一分發(fā)單元,還用于當(dāng)所述待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于所述第一數(shù)量時(shí),將所述待分發(fā)kernel程序中所述第一數(shù)量的block分發(fā)給所述能夠運(yùn)行至少一個(gè)完整block的SM;當(dāng)所述待分發(fā)kernel程序中未分發(fā)的block的數(shù)量小于或等于所述第一數(shù)量時(shí),將所述待分發(fā)kernel程序中未分發(fā)的block全部分發(fā)給所述能夠運(yùn)行至少一個(gè)完整block的SM;
所述能夠運(yùn)行至少一個(gè)完整block的SM,用于運(yùn)行所述第一分發(fā)單元分發(fā)的所述待分發(fā)kernel程序中的block。
在第二種可能的實(shí)施例中,結(jié)合第二方面中的第一種可能的實(shí)施例,所述第一SM包括:
第二確定單元,用于從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,所述第一SM邏輯控制器為所述第一SM中的SM邏輯控制器,所述block狀態(tài)寄存器表包括被分發(fā)到所述第一SM中的每個(gè)block的優(yōu)先級(jí);
第二查找單元,用于查找當(dāng)前的空閑硬件warp;
第二分發(fā)單元,用于當(dāng)確定所述空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將所述優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給所述空閑硬件warp,并更新所述block狀態(tài)寄存器表。
在第三種可能的實(shí)施例中,結(jié)合第二方面或第二方面中上述任一種可能的實(shí)施例,所述SM狀態(tài)寄存器表中包括每個(gè)SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間,所述第一SM為所述剩余寄存器數(shù)量大于運(yùn)行一個(gè)warp所需的寄存器數(shù)量、所述剩余硬件warp數(shù)量大于運(yùn)行一個(gè)warp所需的硬件warp數(shù)量且所述剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)warp所需的共享存儲(chǔ)空間的SM。
在第四種可能的實(shí)施例中,結(jié)合第三種可能的實(shí)施例,所述第一SM還包括:通知單元;
所述通知單元,用于當(dāng)確定有運(yùn)行完成的warp時(shí),通知所述全局邏輯控制器更新所述SM狀態(tài)寄存器表中的所述第一SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。
本發(fā)明實(shí)施例提供的GPU資源的分配方法及系統(tǒng),全局邏輯控制器從kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序,從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),則 繼續(xù)查找能夠運(yùn)行至少一個(gè)warp的第一SM,將待分發(fā)kernel程序中的block分發(fā)給第一SM。與現(xiàn)有技術(shù)中必須等待GPU中有空閑的SM時(shí),才能將高優(yōu)先級(jí)kernel中的block分發(fā)給該SM而導(dǎo)致高優(yōu)先級(jí)的kernel程序得不到及時(shí)響應(yīng)相比,本發(fā)明實(shí)施例中,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),不是等待其他kernel程序釋放資源,而是查找能夠運(yùn)行至少一個(gè)warp的第一SM,由于warp比block小,所以運(yùn)行完一個(gè)warp比運(yùn)行完一個(gè)block更快,所以更容易查找到能夠運(yùn)行至少一個(gè)warp的SM,查找到之后就可以將待分發(fā)kernel程序的一個(gè)block分發(fā)給第一SM,無需等待低優(yōu)先級(jí)的kernel程序運(yùn)行完一個(gè)block,提高了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種GPU資源的分配系統(tǒng)的邏輯結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例提供的一種GPU資源的分配方法的流程圖;
圖3為本發(fā)明實(shí)施例提供的另一種GPU資源的分配方法的流程圖;
圖4為本發(fā)明實(shí)施例提供的另一種GPU資源的分配方法的流程圖;
圖5為本發(fā)明實(shí)施例提供的另一種GPU資源的分配系統(tǒng)的邏輯結(jié)構(gòu)示意圖;
圖6為本發(fā)明實(shí)施例提供的另一種GPU資源的分配系統(tǒng)的邏輯結(jié)構(gòu)示意圖;
圖7為本發(fā)明實(shí)施例提供的一種GPU資源的分配裝置的邏輯結(jié)構(gòu)示意圖;
圖8為本發(fā)明實(shí)施例提供的另一種GPU資源的分配裝置的邏輯結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施應(yīng)用于GPU資源的分配系統(tǒng)中,如圖1所示,該系統(tǒng)包括全局調(diào)度器101以及能夠與全局調(diào)度器101通信的至少兩個(gè)SM 102。
其中,全局調(diào)度器101包括:全局邏輯控制器1011、kernel狀態(tài)寄存器表1012以及SM狀態(tài)寄存器表1013。
SM102包括:SM邏輯控制器1021以及block狀態(tài)寄存器表1022。
全局調(diào)度器101,用于將kernel程序分發(fā)給SM102運(yùn)行。
全局邏輯控制器1011,用于根據(jù)kernel狀態(tài)寄存器表1012以及SM狀態(tài)寄存器表1013將kernel程序以block為粒度或者以warp為粒度分發(fā)給SM102。
需要說明的是,在本發(fā)明實(shí)施例中kernel(核)程序?yàn)槟軌蛟贕PU上運(yùn)行的程序,一個(gè)kernel程序包含至少兩個(gè)block(線程塊),一個(gè)block包含至少兩個(gè)warp(線程束),warp為32個(gè)GPU線程組成的一組線程。
kernel狀態(tài)寄存器表1012,用于存儲(chǔ)每個(gè)未完成運(yùn)行的kernel程序信息。
其中,kernel程序信息包括kernel程序的優(yōu)先級(jí)、運(yùn)行該kernel程序需要的寄存器數(shù)量、運(yùn)行該kernel程序需要的共享存儲(chǔ)空間、該kernel程序中還未分發(fā)的block數(shù)量。
SM狀態(tài)寄存器表1013,用于存儲(chǔ)每個(gè)SM102當(dāng)前的剩余資源量。
其中,每個(gè)SM102當(dāng)前的剩余資源量包括剩余的寄存器數(shù)量、剩余的硬件warp數(shù)量以及剩余的共享存儲(chǔ)空間。
SM102,用于運(yùn)行全局調(diào)度器101分發(fā)的kernel程序。
SM邏輯控制器1021,用于根據(jù)block狀態(tài)寄存器表將block中的warp分發(fā)給硬件warp運(yùn)行。
block狀態(tài)寄存器表1022,用于存儲(chǔ)每個(gè)block的運(yùn)行情況。
其中,block的運(yùn)行情況包括block的優(yōu)先級(jí)、block所屬kernel的編號(hào),block在kernel中的編號(hào),block中未運(yùn)行部分所需的寄存器數(shù)和所需的共享存儲(chǔ)空間,以及block中還未分發(fā)的warp數(shù)。
為了加快高優(yōu)先級(jí)的kernel程序的響應(yīng)速度,本發(fā)明實(shí)施例提供一種GPU資源的分配方法,該方法應(yīng)用于圖1所示的GPU資源分配系統(tǒng)中,如圖2所示,該方法包括:
201、全局邏輯控制器從核kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序。
其中,kernel狀態(tài)寄存器表中包括每個(gè)未完成運(yùn)行的kernel程序的優(yōu)先級(jí)以及每個(gè)未完成運(yùn)行的kernel程序中未分發(fā)的block數(shù)量,待分發(fā)kernel程序?yàn)? kernel狀態(tài)寄存器表中優(yōu)先級(jí)最高且未分發(fā)的block數(shù)量不為零的kernel程序。
202、全局邏輯控制器從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,SM狀態(tài)寄存器表用于存儲(chǔ)每個(gè)SM中的剩余資源量。
其中,SM狀態(tài)寄存器表中具體包括每個(gè)SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。能夠運(yùn)行至少一個(gè)完整block的SM為剩余寄存器數(shù)量大于運(yùn)行一個(gè)block所需的寄存器數(shù)量、剩余硬件warp數(shù)量大于運(yùn)行一個(gè)block所需的硬件warp數(shù)量且剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)block所需的共享存儲(chǔ)空間的SM。
舉例說明,例如運(yùn)行一個(gè)block需要36kb的寄存器,而一個(gè)SM中只剩下20kb的寄存器,則該SM不能運(yùn)行一個(gè)block。
203、當(dāng)全局邏輯控制器未查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),從SM狀態(tài)寄存器表中查找第一SM,第一SM為能夠運(yùn)行至少一個(gè)warp的SM。
可以理解的是,第一SM為剩余寄存器數(shù)量大于運(yùn)行一個(gè)warp所需的寄存器數(shù)量、剩余硬件warp數(shù)量大于運(yùn)行一個(gè)warp所需的硬件warp數(shù)量且剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)warp所需的共享存儲(chǔ)空間的SM。
需要說明的是,當(dāng)運(yùn)行一個(gè)block需要36kb寄存器,而剩余資源量最多的SM只剩余12kb的寄存器時(shí),全局邏輯控制器查找不到能夠運(yùn)行至少一個(gè)block的SM,而運(yùn)行一個(gè)warp只需要6kb寄存器,此時(shí)剩余12kb寄存器的SM可以運(yùn)行兩個(gè)warp,即全局邏輯控制器能夠查找到第一SM。
204、當(dāng)全局邏輯控制器查找到第一SM時(shí),將待分發(fā)的kernel程序中的block分發(fā)給第一SM。
其中,如果第一SM的剩余資源只能運(yùn)行一個(gè)warp,則將待分發(fā)kernel程序中的block分發(fā)給第一SM后,第一SM會(huì)將block中的warp逐個(gè)運(yùn)行。
值得說明的是,當(dāng)全局邏輯控制器未查找到第一SM時(shí),則返回步驟201重新執(zhí)行,等待正在運(yùn)行的低優(yōu)先級(jí)的kernel中的一個(gè)warp運(yùn)行完成后,全局邏輯控制器即可查找到第一SM。
本發(fā)明實(shí)施例提供的GPU資源的分配方法,全局邏輯控制器從kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序,從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),則繼續(xù)查找能夠運(yùn)行至少一個(gè)warp的第一SM,將待分發(fā)kernel程序中的block分發(fā)給第一SM。與現(xiàn)有技術(shù)中必須等待GPU中有空閑的SM時(shí),才能將高優(yōu)先級(jí)kernel 中的block分發(fā)給該SM而導(dǎo)致高優(yōu)先級(jí)的kernel程序得不到及時(shí)響應(yīng)相比,本發(fā)明實(shí)施例中,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),不是等待其他kernel程序釋放資源,而是查找能夠運(yùn)行至少一個(gè)warp的第一SM,由于warp比block小,所以運(yùn)行完一個(gè)warp比運(yùn)行完一個(gè)block更快,所以更容易查找到能夠運(yùn)行至少一個(gè)warp的SM,查找到之后就可以將待分發(fā)kernel程序的一個(gè)block分發(fā)給第一SM,無需等待低優(yōu)先級(jí)的kernel程序運(yùn)行完一個(gè)block,提高了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
作為對(duì)上述實(shí)施例的補(bǔ)充,在本發(fā)明實(shí)施例提供的另一種實(shí)現(xiàn)方式中,如圖3所示,在上述步驟202、全局邏輯控制器從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM之后,如果查找到能夠運(yùn)行至少一個(gè)完整block的SM,則執(zhí)行下述步驟205至207。
205、當(dāng)全局邏輯控制器查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),確定第一數(shù)量,第一數(shù)量為能夠運(yùn)行一個(gè)完整block的SM實(shí)際能夠運(yùn)行的block的數(shù)量。
其中,第一數(shù)量為全局邏輯控制器通過能夠運(yùn)行至少一個(gè)完整block的SM中的SM狀態(tài)寄存器表確定的。全局邏輯控制器能夠根據(jù)SM狀態(tài)寄存器表中存儲(chǔ)的SM的剩余資源量以及運(yùn)行一個(gè)block所需的資源量計(jì)算出該SM實(shí)際能夠運(yùn)行的block數(shù)量。
206、當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于第一數(shù)量時(shí),將待分發(fā)kernel程序中第一數(shù)量的block分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM。
值得說明的是,當(dāng)待分發(fā)kernel程序中包含的block數(shù)量大于第一數(shù)量時(shí),說明查找到的SM的剩余資源不足以運(yùn)行該待分發(fā)kernel程序中的所有block,所以先將第一數(shù)量的block分發(fā)給該SM,當(dāng)有block運(yùn)行完成釋放出SM中的資源后,再將該待分發(fā)kernel中剩余的block分發(fā)給SM。
207、當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量小于或等于第一數(shù)量時(shí),將待分發(fā)kernel程序中未分發(fā)的block全部分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM。
值得說明的是,在上述步驟204、206以及207向全局邏輯控制器向SM分發(fā)block后,都需要更新kernel狀態(tài)寄存器中待分發(fā)kernel程序中未分發(fā)的block數(shù)量。
本發(fā)明實(shí)施例提供的GPU資源的分配方法,當(dāng)全局邏輯控制器查找到能夠 運(yùn)行至少一個(gè)block的SM時(shí),確定第一數(shù)量,當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于第一數(shù)量時(shí),將待分發(fā)kernel程序中第一數(shù)量的block分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM;當(dāng)待分發(fā)kernel程序中包含的block的數(shù)量小于或等于第一數(shù)量時(shí),將待分發(fā)kernel程序中的未分發(fā)的block全部分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM。在能夠查找到運(yùn)行至少一個(gè)block的SM時(shí),將優(yōu)先級(jí)最高的kernel中盡可能多的block分發(fā)給該SM,可以使優(yōu)先級(jí)最高的kernel得到及時(shí)的響應(yīng),提高了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
在全局邏輯控制器將block分發(fā)給SM后,SM需合理的將block中的warp分發(fā)運(yùn)行,所以本發(fā)明另一實(shí)施例提供了在步驟204、當(dāng)全局邏輯控制器查找到第一SM時(shí),將待分發(fā)kernel程序中的一個(gè)block分發(fā)給第一SM之后,第一SM邏輯控制器分發(fā)warp的方法,如圖4所示,該方法包括:
401、第一SM邏輯控制器從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,第一SM邏輯控制器為第一SM中的SM邏輯控制器,block狀態(tài)寄存器表包括被分發(fā)到第一SM中的每個(gè)block的優(yōu)先級(jí)。
結(jié)合圖1所示的GPU資源的分配系統(tǒng),全局邏輯控制器連接于至少兩個(gè)SM,當(dāng)全局邏輯控制器將優(yōu)先級(jí)最高的kernel程序中的一個(gè)block分發(fā)給第一SM后,第一SM中的第一SM邏輯控制器需將該block中的warp分發(fā)給硬件warp運(yùn)行。
由于第一SM中還正在運(yùn)行其他kernel中的block,或者還有其他kernel程序中的block正在等待運(yùn)行,所以第一SM邏輯控制器需要從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,優(yōu)先運(yùn)行優(yōu)先級(jí)最高的block中的warp。
值得說明的是,block狀態(tài)寄存器中存儲(chǔ)的block的優(yōu)先級(jí)為block所屬kernel的優(yōu)先級(jí),同一kernel中的block的優(yōu)先級(jí)是相同的。
402、第一SM邏輯控制器查找當(dāng)前的空閑硬件warp。
需要說明的是,當(dāng)?shù)谝籗M邏輯控制器查找到空閑硬件warp時(shí),則執(zhí)行下述步驟403;當(dāng)?shù)谝籗M邏輯控制器未查找到空閑硬件warp時(shí),則重復(fù)查找動(dòng)作,直到查找到空閑的硬件warp再繼續(xù)執(zhí)行下述步驟403。
由于第一SM中還有低優(yōu)先級(jí)的kernel程序正在運(yùn)行,所以,等待低優(yōu)先級(jí)的kernel程序中有warp運(yùn)行結(jié)束后,就會(huì)有硬件warp恢復(fù)空閑狀態(tài),此時(shí)第一SM邏輯控制器就能夠查找到空閑硬件warp,高優(yōu)先級(jí)的kernel程序中的warp即可占用該硬件warp。
403、當(dāng)?shù)谝籗M邏輯控制器確定空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給空閑硬件warp,并更新block狀態(tài)寄存器表。
其中,判斷空閑硬件warp是否能夠運(yùn)行一個(gè)warp的方法為:判斷第一SM中的寄存器數(shù)量是否足夠運(yùn)行一個(gè)warp,如果足夠,且此時(shí)第一SM未接收到優(yōu)先級(jí)更高的block時(shí),則將此時(shí)優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給查找到的空閑硬件warp;如果不夠,則繼續(xù)等待,直到有warp運(yùn)行結(jié)束,寄存器數(shù)量足夠運(yùn)行一個(gè)warp時(shí),再向該空閑硬件warp分發(fā)一個(gè)warp。
值得說明的是,將優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給空閑硬件warp后,還需判斷該優(yōu)先級(jí)最高的block是否分發(fā)完畢,若是,則重新執(zhí)行上述步驟401至403;若否,則重新執(zhí)行上述步驟402至403。
本發(fā)明實(shí)施例提供的GPU資源的分配方法,第一SM邏輯控制器首先查找空閑硬件warp,當(dāng)查找到空閑硬件warp且此時(shí)第一SM能夠運(yùn)行一個(gè)warp時(shí),就將優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給硬件warp運(yùn)行,無需等待第一SM中有能夠運(yùn)行整個(gè)block的資源后再將整個(gè)block分發(fā)給硬件warp運(yùn)行,減少了等待時(shí)間,提高了高優(yōu)先級(jí)kernel程序的響應(yīng)速度。
為了減少SM中的空閑資源,提高SM的資源利用率,以加快高優(yōu)先級(jí)kernel程序的響應(yīng)速度,在本發(fā)明實(shí)施例提供的另一種實(shí)現(xiàn)方式中,當(dāng)?shù)谝籗M邏輯控制器確定有運(yùn)行完成的warp時(shí),通知全局邏輯控制器更新SM狀態(tài)寄存器表中的第一SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。
可以理解的是,當(dāng)運(yùn)行完一個(gè)warp時(shí),運(yùn)行該warp所需的寄存器、硬件warp以及共享存儲(chǔ)都會(huì)被釋放,所以需要實(shí)時(shí)更新SM狀態(tài)寄存器表中的第一SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間,以便于全局邏輯控制器及時(shí)為該SM下發(fā)block。
本發(fā)明實(shí)施例提供的GPU資源的分配方法,當(dāng)?shù)谝贿壿嬁刂破鞔_定有運(yùn)行完成的warp時(shí),通知全局邏輯控制器更新SM狀態(tài)寄存器表,使得全局邏輯控制器可以根據(jù)最新的SM剩余資源量以及還未分發(fā)的block數(shù),及時(shí)向SM下發(fā)高優(yōu)先級(jí)kernel中的block,提高了SM的資源利用率,同時(shí)加快了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
結(jié)合圖2至圖4所示的GPU資源的分配方法,本發(fā)明實(shí)施例還提供一種GPU資源的分配系統(tǒng),如圖5所示,該系統(tǒng)包括全局邏輯控制器501以及至少 兩個(gè)能夠與全局邏輯控制器501通信的流式多處理器SM;全局邏輯控制器包括:第一確定單元5011、第一查找單元5012以及第一分發(fā)單元5013。
需要說明的是,該系統(tǒng)中的SM可以為能夠運(yùn)行至少一個(gè)完整block的SM502或第一SM503。
其中,第一SM503為能夠運(yùn)行至少一個(gè)線程束warp的SM。
第一確定單元5011,用于確定待分發(fā)kernel程序,kernel狀態(tài)寄存器表中包括每個(gè)未完成運(yùn)行的kernel程序的優(yōu)先級(jí)以及每個(gè)未完成運(yùn)行的kernel程序中未分發(fā)的block數(shù)量,待分發(fā)kernel程序?yàn)閗ernel狀態(tài)寄存器表中優(yōu)先級(jí)最高且未分發(fā)的block數(shù)量不為零的kernel程序。
第一查找單元5012,用于從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,SM狀態(tài)寄存器表用于存儲(chǔ)每個(gè)SM中的剩余資源量;當(dāng)未查找到能夠運(yùn)行至少一個(gè)完整線程塊block的SM時(shí),從SM狀態(tài)寄存器表中查找第一SM503。
第一分發(fā)單元5013,用于當(dāng)查找到第一SM503時(shí),將待分發(fā)kernel程序中的block分發(fā)給第一SM503。
第一SM503,用于運(yùn)行第一分發(fā)單元5013分發(fā)的待分發(fā)kernel程序中的block。
在本發(fā)明另一實(shí)施例中,第一確定單元5011,還用于當(dāng)?shù)谝徊檎覇卧?012查找到能夠運(yùn)行至少一個(gè)完整block的SM時(shí),確定第一數(shù)量,第一數(shù)量為能夠運(yùn)行一個(gè)完整block的SM實(shí)際能夠運(yùn)行的block的數(shù)量;
第一分發(fā)單元5013,還用于當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于第一數(shù)量時(shí),將待分發(fā)kernel程序中第一數(shù)量的block分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM;當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量小于或等于第一數(shù)量時(shí),將待分發(fā)kernel程序中未分發(fā)的block全部分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM502。
能夠運(yùn)行至少一個(gè)完整block的SM502,用于運(yùn)行第一分發(fā)單元5013分發(fā)的待分發(fā)kernel程序中的block。
在本發(fā)明另一實(shí)施例中,如圖6所示,第一SM503包括第二確定單元5031、第二查找單元5032、第二分發(fā)單元5033以及通知單元5034。
需要說明的是,第二確定單元5031、第二查找單元5032以及第二分發(fā)單元5033具體位于第一SM503中的第一SM邏輯控制器中。
第二確定單元5031,位于第一SM503邏輯控制器中,用于從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,所述第一SM503邏輯控制器為第一SM503中的SM邏輯控制器,block狀態(tài)寄存器表包括被分發(fā)到第一SM503中的每個(gè)block的優(yōu)先級(jí)。
第二查找單元5032,位于第一SM503邏輯控制器中,用于查找當(dāng)前的空閑硬件warp。
第二分發(fā)單元5033,位于第一SM503邏輯控制器中,用于當(dāng)確定空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給空閑硬件warp,并更新block狀態(tài)寄存器表。
需要說明的是,能夠運(yùn)行至少一個(gè)個(gè)完整block的SM502與第一SM503的組成結(jié)構(gòu)相同,在本發(fā)明實(shí)施例中不再一一說明。
值得說明的是,SM狀態(tài)寄存器表中包括每個(gè)SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間,第一SM503為剩余寄存器數(shù)量大于運(yùn)行一個(gè)warp所需的寄存器數(shù)量、剩余硬件warp數(shù)量大于運(yùn)行一個(gè)warp所需的硬件warp數(shù)量且剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)warp所需的共享存儲(chǔ)空間的SM。
第二確定單元5031,還用于確定是否有運(yùn)行完成的warp。
通知單元5034,位于第一SM503邏輯控制器中,用于當(dāng)?shù)诙_定單元5031確定有運(yùn)行完成的warp時(shí),通知全局邏輯控制器501更新SM狀態(tài)寄存器表中的第一SM503的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。
本發(fā)明實(shí)施例提供的GPU資源的分配系統(tǒng),全局邏輯控制器中的第一確定單元從kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序,第一查找單元從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),則繼續(xù)查找能夠運(yùn)行至少一個(gè)warp的第一SM,第一分發(fā)單元將待分發(fā)kernel程序中的block分發(fā)給第一SM。與現(xiàn)有技術(shù)中必須等待GPU中有空閑的SM時(shí),才能將高優(yōu)先級(jí)kernel中的block分發(fā)給該SM而導(dǎo)致高優(yōu)先級(jí)的kernel程序得不到及時(shí)響應(yīng)相比,本發(fā)明實(shí)施例中,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),不是等待其他kernel程序釋放資源,而是查找能夠運(yùn)行至少一個(gè)warp的第一SM,由于warp比block小,所以運(yùn)行完一個(gè)warp比運(yùn)行完一個(gè)block更快,所以更容易查找到能夠運(yùn)行至少一個(gè)warp的SM,查找到之后就可以將待分發(fā)kernel程序的一個(gè)block分發(fā)給第一SM,無需等待低 優(yōu)先級(jí)的kernel程序運(yùn)行完一個(gè)block,提高了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
本發(fā)明實(shí)施例還提供一種GPU資源的分配裝置,如圖7所示,該裝置中包括全局邏輯控制器以及至少兩個(gè)能夠與全局邏輯控制器通信的SM。其中,SM可以為能夠運(yùn)行至少一個(gè)完整block的SM或者第一SM。全局邏輯控制器可包括存儲(chǔ)器71、收發(fā)器72、處理器73和總線74,其中,存儲(chǔ)器71、收發(fā)器72、處理器73通過總線74通信連接。
存儲(chǔ)器71可以是只讀存儲(chǔ)器(Read Only Memory,ROM),靜態(tài)存儲(chǔ)設(shè)備,動(dòng)態(tài)存儲(chǔ)設(shè)備或者隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)。存儲(chǔ)器71可以存儲(chǔ)操作系統(tǒng)和其他應(yīng)用程序。在通過軟件或者固件來實(shí)現(xiàn)本發(fā)明實(shí)施例提供的技術(shù)方案時(shí),用于實(shí)現(xiàn)本發(fā)明實(shí)施例提供的技術(shù)方案的程序代碼保存在存儲(chǔ)器71中,并由處理器73來執(zhí)行。
收發(fā)器72用于裝置與其他設(shè)備或通信網(wǎng)絡(luò)(例如但不限于以太網(wǎng),無線接入網(wǎng)(Radio Access Network,RAN),無線局域網(wǎng)(Wireless Local Area Network,WLAN)等)之間的通信。
處理器73可以采用通用的中央處理器(Central Processing Unit,CPU),微處理器,應(yīng)用專用集成電路(Application Specific Integrated Circuit,ASIC),或者一個(gè)或多個(gè)集成電路,用于執(zhí)行相關(guān)程序,以實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的技術(shù)方案。
總線74可包括一通路,在裝置各個(gè)部件(例如存儲(chǔ)器71、收發(fā)器72和處理器73)之間傳送信息。
應(yīng)注意,盡管圖7所示的硬件僅僅示出了存儲(chǔ)器71、收發(fā)器72和處理器73以及總線74,但是在具體實(shí)現(xiàn)過程中,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,該終端還包含實(shí)現(xiàn)正常運(yùn)行所必須的其他器件。同時(shí),根據(jù)具體需要,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,還可包含實(shí)現(xiàn)其他功能的硬件器件。
具體的,圖7所示的全局邏輯控制器用于實(shí)現(xiàn)圖5實(shí)施例所示的系統(tǒng)時(shí),該裝置中的處理器73,與存儲(chǔ)器71和收發(fā)器72耦合,用于控制程序指令的執(zhí)行,具體用于確定待分發(fā)kernel程序,kernel狀態(tài)寄存器表中包括每個(gè)未完成運(yùn)行的kernel程序的優(yōu)先級(jí)以及每個(gè)未完成運(yùn)行的kernel程序中未分發(fā)的block數(shù)量,待分發(fā)kernel程序?yàn)閗ernel狀態(tài)寄存器表中優(yōu)先級(jí)最高且未分發(fā)的block數(shù)量不為零的kernel程序;從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整 block的SM,SM狀態(tài)寄存器表用于存儲(chǔ)每個(gè)SM中的剩余資源量;當(dāng)未查找到能夠運(yùn)行至少一個(gè)完整線程塊block的SM時(shí),從SM狀態(tài)寄存器表中查找第一SM,第一SM為能夠運(yùn)行至少一個(gè)線程束warp的SM。
收發(fā)器72,用于當(dāng)查找到第一SM時(shí),將待分發(fā)kernel程序中的block分發(fā)給第一SM。
存儲(chǔ)器71,用于存儲(chǔ)kernel狀態(tài)寄存器表和SM狀態(tài)寄存器表。
處理器73,還用于當(dāng)?shù)谝徊檎覇卧檎业侥軌蜻\(yùn)行至少一個(gè)完整block的SM時(shí),確定第一數(shù)量,第一數(shù)量為能夠運(yùn)行一個(gè)完整block的SM實(shí)際能夠運(yùn)行的block的數(shù)量。
收發(fā)器72,還用于當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量大于第一數(shù)量時(shí),將待分發(fā)kernel程序中第一數(shù)量的block分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM;當(dāng)待分發(fā)kernel程序中未分發(fā)的block的數(shù)量小于或等于第一數(shù)量時(shí),將待分發(fā)kernel程序中未分發(fā)的block全部分發(fā)給能夠運(yùn)行至少一個(gè)完整block的SM。
在本發(fā)明另一實(shí)施例中,如圖8所示,第一SM包括存儲(chǔ)器81、收發(fā)器82、處理器83和總線84,其中,存儲(chǔ)器81、收發(fā)器82、處理器83通過總線84通信連接。
存儲(chǔ)器81可以是只讀存儲(chǔ)器(Read Only Memory,ROM),靜態(tài)存儲(chǔ)設(shè)備,動(dòng)態(tài)存儲(chǔ)設(shè)備或者隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)。存儲(chǔ)器81可以存儲(chǔ)操作系統(tǒng)和其他應(yīng)用程序。在通過軟件或者固件來實(shí)現(xiàn)本發(fā)明實(shí)施例提供的技術(shù)方案時(shí),用于實(shí)現(xiàn)本發(fā)明實(shí)施例提供的技術(shù)方案的程序代碼保存在存儲(chǔ)器81中,并由處理器83來執(zhí)行。
收發(fā)器82用于裝置與其他設(shè)備或通信網(wǎng)絡(luò)(例如但不限于以太網(wǎng),無線接入網(wǎng)(Radio Access Network,RAN),無線局域網(wǎng)(Wireless Local Area Network,WLAN)等)之間的通信。
處理器83可以采用通用的中央處理器(Central Processing Unit,CPU),微處理器,應(yīng)用專用集成電路(Application Specific Integrated Circuit,ASIC),或者一個(gè)或多個(gè)集成電路,用于執(zhí)行相關(guān)程序,以實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的技術(shù)方案。
總線84可包括一通路,在裝置各個(gè)部件(例如存儲(chǔ)器81、收發(fā)器82和處理器83)之間傳送信息。
應(yīng)注意,盡管圖8所示的硬件僅僅示出了存儲(chǔ)器81、收發(fā)器82和處理器83以及總線84,但是在具體實(shí)現(xiàn)過程中,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,該終端還包含實(shí)現(xiàn)正常運(yùn)行所必須的其他器件。同時(shí),根據(jù)具體需要,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,還可包含實(shí)現(xiàn)其他功能的硬件器件。
具體的,圖8所示的第一SM用于實(shí)現(xiàn)圖5和圖6實(shí)施例所示的系統(tǒng)時(shí),該裝置中的處理器83,與存儲(chǔ)器81和收發(fā)器82耦合,用于控制程序指令的執(zhí)行,具體用于從block狀態(tài)寄存器表中確定優(yōu)先級(jí)最高的block,第一SM邏輯控制器為第一SM中的SM邏輯控制器,block狀態(tài)寄存器表包括被分發(fā)到第一SM中的每個(gè)block的優(yōu)先級(jí);用于查找當(dāng)前的空閑硬件warp。
收發(fā)器82,用于當(dāng)確定空閑硬件warp能夠運(yùn)行一個(gè)warp,且未接收到優(yōu)先級(jí)更高的block時(shí),將優(yōu)先級(jí)最高的block中的一個(gè)warp分發(fā)給空閑硬件warp,并更新block狀態(tài)寄存器表。
值得說明的是,SM狀態(tài)寄存器表中包括每個(gè)SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間,第一SM為剩余寄存器數(shù)量大于運(yùn)行一個(gè)warp所需的寄存器數(shù)量、剩余硬件warp數(shù)量大于運(yùn)行一個(gè)warp所需的硬件warp數(shù)量且剩余共享存儲(chǔ)空間大于運(yùn)行一個(gè)warp所需的共享存儲(chǔ)空間的SM。
收發(fā)器83,還用于當(dāng)確定有運(yùn)行完成的warp時(shí),通知全局邏輯控制器更新SM狀態(tài)寄存器表中的第一SM的剩余寄存器數(shù)量、剩余硬件warp數(shù)量以及剩余共享存儲(chǔ)空間。
本發(fā)明實(shí)施例提供的GPU資源的分配裝置,處理器從kernel狀態(tài)寄存器表中確定待分發(fā)kernel程序,從SM狀態(tài)寄存器表中查找能夠運(yùn)行至少一個(gè)完整block的SM,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),則繼續(xù)查找能夠運(yùn)行至少一個(gè)warp的第一SM,收發(fā)器將待分發(fā)kernel程序中的block分發(fā)給第一SM。與現(xiàn)有技術(shù)中必須等待GPU中有空閑的SM時(shí),才能將高優(yōu)先級(jí)kernel中的block分發(fā)給該SM而導(dǎo)致高優(yōu)先級(jí)的kernel程序得不到及時(shí)響應(yīng)相比,本發(fā)明實(shí)施例中,當(dāng)未查找到能夠運(yùn)行至少一個(gè)block的SM時(shí),不是等待其他kernel程序釋放資源,而是查找能夠運(yùn)行至少一個(gè)warp的第一SM,由于warp比block小,所以運(yùn)行完一個(gè)warp比運(yùn)行完一個(gè)block更快,所以更容易查找到能夠運(yùn)行至少一個(gè)warp的SM,查找到之后就可以將待分發(fā)kernel程序的一個(gè)block分發(fā)給第一SM,無需等待低優(yōu)先級(jí)的kernel程序運(yùn)行完一個(gè)block,提高了高優(yōu)先級(jí)的kernel程序的響應(yīng)速度。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到 變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。