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