平 凡,湯小春*,潘彥宇,李戰懷
(1.西北工業大學計算機學院,西安 710129;2.工信部大數據存儲與管理重點實驗室(西北工業大學),西安 710129)
隨著制造工藝的進步,計算機體系架構發生了巨大變化,從單核處理器架構逐步演變為多核處理器架構。然而進入信息時代后,需要處理的計算也呈指數增長。面對海量數據存儲和計算,中央處理器(Central Processing Unit,CPU)難以滿足計算需求,圖形處理器(Graphics Processing Unit,GPU)由于其性能/成本效率比的優勢被廣泛使用?,F階段,CPU-GPU異構系統成為高性能集群的主流模式,CPU 和GPU 屬于不同類型的計算資源,分別負責不同類型的計算任務。CPU 負責執行復雜邏輯處理和事務處理等計算,GPU 相較于CPU 具有眾多計算單元和簡單的緩存結構,更適用于密集型的大規模數據并行計算,兩者相互配合能夠極大提升數據處理的計算速度[1]。
雖然GPU 可以提高大多數通用任務的計算性能,但是實際生產環境中經常存在大規模的有限并行性作業,例如在線傳感器的過濾、交通攝像頭畫面的質量檢測等。這些作業的并行度一般由注入數據的大小決定,計算復雜度由任務的計算模式決定。它們的最大特點是線程數一般小于1024,需要的存儲大小不超過2048 MB,任務與任務之間基本沒有依賴關系,這類任務被稱為不規則任務。針對這類大規模的不規則任務集合,如何減少任務的處理時間和提高GPU 資源利用率,是目前迫切需要解決的問題。
然而,現有的多數研究著重于將這類程序從CPU 移植到GPU 上進行,從而獲取程序并行化帶來的性能提升。由于GPU 和CPU 體系架構的不同,現有的任務調度方法并沒有充分利用整個集群上GPU 之間的并行能力和GPU 處理器自身的并行能力,造成了GPU 計算資源的浪費,使得系統整體吞吐量并沒有大幅提高。
根據GPU 體系結構的特點,其性能/成本效率比的優勢會隨著計算任務并行度降低而降低。針對大規模的不規則任務集合,Parboil2 的測試結果顯示,傳統調度方式在GPU 資源方面的平均利用率只有20%~70%[2]。本文分析了現有的針對GPU 集群中調度不規則任務集合的策略,發現其未充分考慮GPU 計算特性、需求不規則特點以及如何實現GPU 共享等關鍵問題,從而導致系統的資源利用率不高。
針對使用GPU 集群加速大規模不規則獨立任務集合的調度問題,本文提出了一種新的調度框架GSF(GPU Scheduling Framework),采用統一計算設備架構(Compute Unified Device Architecture,CUDA)流并行以及GPU 顯存細粒度共享的方式,使得不規則任務能夠在CPU-GPU 異構高性能集群上高效地調度執行。模型的輸入為一組并行度有限的不規則獨立任務,任務數目可達到上千,每個任務具有獨立計算數據并且GPU 計算資源的需求(包括顯存、線程等)均已知。GSF采用參數傳遞的方法將CPU線程與CUDA流[3]綁定,通過指定流編號將CPU 線程啟動的核函數添加到對應流中執行,在同一GPU 上形成了多任務并行的執行流水線,有效實現了任務級別的并行和GPU 資源利用率的提升。然后,在模型基礎上,設計并實現了一種適配不規則獨立任務的調度算法,通過任務分組的方式合并不規則任務并調度到滿足資源需求的GPU 設備上執行,以提升GPU 顯存利用率。最后,利用測試程序與現有調度算法進行比較以驗證本文所提出的調度策略的可行性和有效性。
已有研究工作表明,異構集群中GPU 任務的有效調度對于提高資源利用率和最小化執行時間至關重要。文獻[4-5]分別設計了運行時的多任務調度框架,實現多任務共享GPU資源,但這些解決方案只關注單GPU 調度問題,無法擴展到集群環境中。文獻[6]為解決GPU 低利用率問題提出以線程束為基本單位虛擬化和動態調度GPU 的計算核心,通過持續運行一個內核守護進程實現高利用率,但這種方法同樣無法擴展到集群環境。文獻[7]針對云環境運行執行時間較短的GPU 任務問題,提出了一種基于優先級的非搶占式先入先出(First In First Out,FIFO)任務調度策略,能夠減少平均響應時間和總執行時間,然而這種方法沒有實現多任務共享GPU,對資源利用率提升效果不明顯。一些研究工作[8-9]試圖通過改進硬件設計來提升GPU 資源利用率,比如文獻[8]動態地定制線程束以減少不規則應用帶來的影響,這些方法都很難立即部署在現有GPU 上使用。因此,通用軟件方法[10-14]是解決問題的關鍵。文獻[11]分析了現有研究中調度不規則任務時忽略的關鍵因素,提出了一種兩級任務調度模型以實現在所有GPU 上計算資源的統一分配和共享,同時將計算數據重合的任務合并為任務組進行調度。這種模型能解決不規則任務帶來的負載不均和資源利用率低的問題,但調度大量獨立任務的效果并不突出。
異構集群中的任務調度可根據是否存在相互依賴關系分為獨立任務調度和關聯任務調度,獨立任務調度又可分為在線模式和批處理模式,本文研究屬于獨立任務調度批處理模式,即提交的任務集合統一調度。經典算法包括最小完成時間(Minimum Completion Time,MCT)算法[15]、Min-min 算法[16]和Max-min 算法[16]等。MCT 算法將每個任務分配到使其具有最早完成時間的處理器上計算,保證各處理器的負載均衡,但并非每個任務的實際執行時間都是最小的。Min-min 算法核心思想是優先調度具有最快執行完成時間的任務,并將該任務映射到最快完成的處理器。Max-min 與Min-min 算法的思想正好相反,選取最大最早完成時間的任務優先調度,可能造成短任務的調度延遲非常大。上述算法在計算調度方案時都只考慮任務執行時間的因素,沒有考慮到如何提升GPU 資源利用率,很難適用于本文研究的不規則獨立任務集合場景。文獻[17]中針對利用GPU 加速計算的大量獨立任務提出了一種動態調度算法,能夠將任務分散到CPU 或GPU 上執行以減少總的執行時間,但這種方法只適用于特定程序。
本文旨在設計實現一種通用的調度框架,按照合理的調度策略將不規則的獨立任務集合分散到集群中不同的GPU上計算,通過軟件機制實現多任務共享GPU 資源計算,目標是實現GPU 資源利用率和任務處理效率的提升。首先,調度框架通過配置文件來設置輸入的任務詳情,可同時混合調度多種不同計算內容的任務;其次,通過參數傳遞建立執行節點CPU 線程和CUDA 流之間的聯系,CPU 線程加載的GPU 計算會加載到綁定的流中順序執行,不僅實現了多任務并行而且避免多個任務計算相互影響;最后,調度算法中采用任務組的形式調度,能減少調度延遲并縮短總執行時間。
GSF 系統整體架構如圖1 所示,運行在CPU-GPU 異構集群上,整體上采用主從模式,由一個調度框架進程和多個執行器進程組成。調度框架就是系統控制節點,負責集群管理和任務調度;其余節點為從節點,負責啟動并運行執行器。調度框架會按照內置的調度算法將用戶提交的任務集分發到選擇GPU 對應的執行器。執行器在接收到任務后,將其加載到GPU 中計算。每個從節點可運行的最大執行器數量與GPU設備數量相等。假如,某個從節點包含兩塊GPU,那么最多可運行兩個執行器進程,節點上包含的CPU 計算資源會被平均分配。執行器中采用操作系統提供的CGroup[18]的資源隔離功能,將計算資源與執行器進程綁定,能防止執行器間的資源競爭。

圖1 GSF系統架構Fig.1 GSF system architecture
調度框架由用戶接口、調度器和可感知GPU 的資源管理器[19-20]三部分組成。用戶通過接口提交任務信息,包括可執行程序路徑、運行參數和GPU 資源需求等,接口負責將信息轉換為規定格式消息轉發給調度器。可感知GPU 的資源管理器是調度框架運行的重要支持,通過周期性地從各個從節點收集資源來管理和監控集群的資源狀態,包括CPU、內存、磁盤和GPU 等,資源管理器以Resource Offer 方式向調度器分配當前可用資源。當調度器收到任務和資源信息,通過調度算法將任務與資源合理地匹配,以實現集群資源利用率和任務處理效率最大化。另外,調度器通過執行器返回的狀態信息對任務進行監控,當某個任務出錯時立即重新調度。
執行器是運行在從節點的進程,根據調度框架發出的指令啟動和結束,由線程管理器、任務控制器、任務隊列和工作線程四個模塊構成。執行器的作用是將接收的任務加載到GPU 上計算,原因是GPU 程序需通過CPU 進程加載啟動,因此執行器運行時只需利用CPU 資源。線程管理器負責在執行器進程啟動后創建指定數量的工作線程,在進程結束前銷毀所有線程。任務控制器負責將接收的任務添加到任務隊列中,并監控其執行狀態,當執行成功或出錯時返回狀態信息給調度器。任務隊列是線程安全的,可同時被多個線程訪問,但一個任務只能被一個線程得到,隊列中的任務則按照到達的順序依次排列。工作線程是持續運行的多個CPU 線程,每個線程對應一個CUDA 流,線程搶占到的任務會被添加到對應的流中執行核函數利用GPU計算。
執行器的運行場景如圖2 所示,多個線程運行任務相當于在多個CUDA 流中計算。每個流是一個順序操作隊列,不同流之間的計算是并行的。這種方式在保證GPU 中每個流執行的任務所需資源被滿足的情況下,顯著提高資源利用率和任務處理效率。

圖2 多線程執行示意圖Fig.2 Schematic diagram of multi-threaded execution
調度模型按照以下步驟運行(步驟序號與圖1 中序號對應):
①各個執行節點上的執行器定時向可感知GPU 的資源管理器匯報當前執行器上的可用資源信息,包括GPU 可用顯存大小、可用內存大小等;
②用戶通過接口向調度框架提交任務集合信息,包括任務類型、計算信息和資源需求等;
③接口將輸入的任務集合信息轉換為規定格式并發送給調度器;
④資源管理器收到資源變更,通知調度器當前可用資源;
⑤調度器將根據內置的調度算法將任務調度到可用的GPU計算資源對應的執行器;
⑥執行器接收到任務后,首先將其添加到任務隊列;
⑦線程池中活躍的線程搶占隊列新添加的任務;
⑧搶占成功的線程將任務的核函數加載到對應的CUDA流中執行。
假設不規則獨立任務集由n個相互獨立的GPU 任務組成,每個任務都具有有限并行度,GPU 資源需求較低。定義T={t1,t2,…,tn} 代表任務集,每個任務可細化為ti={tid,tsize,tres}。其中:tid表示任務編號;tsize表示任務計算數據量大小;tres表示任務的資源需求,主要考慮任務的GPU 顯存需求。由于實際場景中,多個任務之間的資源需求和計算數據量都可能不同,認為任務集合具有不規則特性。調度集合T時必須考慮GPU 任務的計算特性和資源需求,否則會造成GPU 資源浪費和負載不均衡。定義G={g0,g1,…,gm}代表GPU 處理器集合,組成一個分布式異構GPU 計算集群,每個GPU 由向量gj={gid,gcapacity}表示。其中:gid表示GPU 處理器編號;gcapacity表示GPU 可用資源集合,可細化為gcapacity={gid,gmem,gcore},分別代表GPU 編號、可用顯存和流多處理器等資源情況。
GSF研究的任務調度問題可以概括為:將集合T的n個任務按照策略分別調度到m個不同的GPU 上執行,任務資源需求不同、沒有關聯依賴并且可以并行計算。調度目標是實現高效的批量GPU 任務處理,保證了調度效率和顯存利用率的提升。定義S={s1,s2,…,sm}來表示最終的調度方案,可視為不相交的任務劃分問題,其中sj表示調度到第j塊GPU 上的任務集合,?si∩sj=?,?si,sj?T。
由于GPU 任務計算所需的資源和時間與輸入數據量正相關,若采用一般的調度策略很容易造成資源浪費,并造成任務執行出錯。本文研究的調度算法就是針對這類不規則任務集合的調度問題,為了便于研究和實現,算法中忽略了寄存器、GPU數據傳輸寬度效率等因素的影響,認為只要任務的顯存需求被滿足,對應的GPU 就能將其正確執行。原因是如果顯存未被滿足,任務會直接執行出錯,而線程、流多處理器等資源未被滿足,只會造成延遲等待直到可以執行。
一般情況下,采用貪心算法來調度不規則的GPU 任務集,按照任務編號順序依次將任務調度到第一個滿足顯存需求的GPU 上,每個任務調度后就更新對應GPU 的可用資源情況,如此循環直到所有任務執行完成。此算法邏輯簡單易于實現,但時間復雜度與可用GPU 數量和任務數量正相關,對于不規則任務集合來說,貪心算法可能無法得到最優分配結果。假設存在兩個可用顯存分別為10 GB 和8 GB 的GPU,有6 個顯存需求分別為6 GB、3 GB、3 GB、2 GB、2 GB 和2 GB 的不規則任務。按照貪心算法進行分配,第一個GPU 上的任務為{6 GB,3 GB},第二個GPU 上分配的任務是{3 GB,2 GB,2 GB},6 個任務中將有1 個任務無法分配。如果按照{6 GB,2 GB,2 GB}、{3 GB,3 GB,2 GB}分配,則6個任務都可以正常執行。
針對貪心算法存在的問題,將任務按照GPU 數量劃分為多個不相交的子集,分別調度到滿足資源約束的處理器上,在顯存滿足的前提下保證每個GPU 的計算單元被充分使用。本文提出了一種擴展貪心調度(Extended-grained Greedy Scheduling,EGS)算法,利用回溯搜索的思想將n個任務劃分成m個子集,根據顯存約束嘗試將任務添加到合適的子集中,保證每個子集的顯存之和不超過GPU 集群的顯存最小值,然后將子集整體調度到某個GPU 上計算。由于回溯劃分會得到多種調度方案,因此為每種方案計算一個負載權重,計算方法如式(1)所示:

其中:ti.mem表示第i個任務所需的顯存大?。籫j.Mem表示第j個GPU 的顯存大小。負載權重等于每個GPU 已用顯存與可用總顯存比例的和,權重越大代表顯存資源越被充分利用。
另一方面,為了降低計算最優解的時間復雜度,算法中設置了一個優化算法的精度值β。利用β與任務數目相乘得到劃分子集的任務數目count,從任務集合中挑選count個任務按照上述步驟進行劃分,每次按照負載權重最大的方案調度,重復操作直到集合中所有任務都被調度。EGS算法將任務調度粒度從單個任務提升到任務集合,不僅能顯著提升GPU 的顯存資源利用率,還能降低任務集總執行時間。EGS 算法的偽代碼如算法1所示。

算法1 擴展貪心調度算法。明了EGS 算法工作流程。算法中首先利用輸入的精度值β計算每次劃分子集的任務數目(第1)行),然后循環任務集合分別計算調度方案,直到所有任務均被調度算法結果(第2)行~第12)行)。在計算過程中,首先初始化變量和保存中間結果的數組(第3)行~第5)行),緊接著從T中隨機挑選count個任務組成T'(第6)行)并計算任務分組的顯存上限即集群中單個GPU 的顯存最小值(第7)行),然后調度divide 函數得到所有劃分方案和對應的負載權重(第8)行)。在得到所有方案后,找出負載權重最重的方案(第9)行),將T'按照其結果進行調度(第10)行),最后從T中刪除此次計算中已被調度的任務進行下一次判斷(第11)行)。
EGS 調度算法的核心功能由divide 函數實現,核心思想是按照回溯遍歷思想將每個任務嘗試劃分到多個不同集合,最終得到多種不同的劃分方案。函數結束條件為是否遍歷到集合邊界,如到達邊界則利用式(1)計算此方案對應的調度權重保存到weight數組對應位置并結束此次遞歸。每個任務遞歸計算時,首先將GPU 集合按照當前可用顯存降序排列,其目的是保證將任務優先調度到當前顯存使用率最低的GPU上。然后遍歷集合依次判斷是否能滿足任務的顯存需求,如滿足則添加到對應的方案中遞歸處理下一個任務,不滿足則回退到上一層遞歸。該函數的偽代碼如算法2所示。
算法2 divide方法。
綜上所述,通過分組調度的思想,EGS算法有效地解決了不規則獨立GPU 任務集的調度問題,其時間復雜度為O(n*2count),其中,n是集合包含的任務總數,count指由精度值確定的每次劃分子集的任務數目。
為了分析本文所提出的調度算法,將其分別與貪心調度算法、MCT 調度算法和Min-min 調度算法進行對比。利用表1列舉的基準程序進行評價,程序來源于一些實際應用和GPU基準集合,包括Rodinia、YOLOv3 和NVIDIA 編程指南[21]。實驗時通過一個隨機任務生成器混合指定數量和輸入配置的各類程序,得到最終的任務集提交到調度框架,集合中每個任務計算數據相互獨立、資源需求不同,滿足引言中提出的不規則獨立任務集合定義。

表1 基準程序詳情Tab.1 Benchmark program details
實驗將部署在一個由8 臺NF5468M5 服務器組成的GPUCPU 異構集群上,每個服務器由2 塊型號為Intel Xeon Sliver 4110的CPU,內存為32 GB ECC Registered DDR42666,磁盤為2 TB 3.5"7200 r/min SAS硬盤;每個服務器中配置2塊型號為NVIDIA GeForceRTX 2080TI 的GPU,每塊GPU 的顯存大小為10989 MB;使用的CUDA版本為cuda_10.1.105_418.39。
實驗中將利用任務集合總調度時長和GPU 設備使用率、顯存使用率來評價算法的優劣。
1)調度時長。GPU 任務的執行效率,即時間越短效率越高,其計算方法為任務集初始提交到最后一個任務執行完成整個過程的間隔時間。
2)設備使用率。由NVIDIA SMI工具測量得到,指采樣周期內GPU 設備計算核函數的活躍時間占比,利用率越高代表該設備越活躍,初始時置為0。
3)顯存使用率。由NVIDIA-SMI工具測量得到,指此GPU當前已用顯存與可用顯存的比例,利用率越高代表該GPU 資源越被充分利用,初始時置為0。
4.3.1 EGS算法參數對比
從算法1的偽代碼可知,EGS算法初始根據精度值β與任務總數相乘得到每次劃分子集的任務數目,以降低算法的時間復雜度,精度值對調度結果具有重要影響。利用隨機任務生成器提交包含1000 個不同計算數據量的矩陣乘法任務組成的不規則GPU 任務集合來驗證不同β值對算法的影響。實驗設置如下:調度框架運行在主節點,集群的兩個從節點分別啟動2 個執行器,并設置執行器的并行任務數目為2。β數值分別設置為0.1、0.2、0.4 和0.6,每種數值情況運行任務集3次。圖3 給出了不同精度值對應的評價指標結果,每條曲線代表一個精度值對應的集群GPU 平均顯存使用率變化和總執行時長。

圖3 不同精度值的結果對比Fig.3 Comparison of results with different precision values
從圖3 可以看出,β設置為0.4 時,EGS 算法調度效果最優,整體維持了較高的顯存使用率,并且總執行時間最短。原因是每次劃分子集的任務數目為400,只需要3次劃分即可完成調度,每次劃分到單個GPU 上至多有50 個任務,GPU 的顯存資源被占滿的同時充分利用了其他計算資源,沒有資源競爭的沖突出現。當β設置小于0.4,單次劃分的任務數目較少,導致GPU資源空閑浪費;當β設置大于0.4,單次劃分任務數目較多,在單GPU 中產生了資源競爭,因此雖然顯存使用率較高,但總執行時間較長。綜合來看,精度值β主要影響了任務集合循環次數和劃分子集遞歸次數,設置合理的β能充分發揮EGS算法調度優勢。
另一方面,由于EGS屬于批處理調度模式,當任務子集調度到某個節點所有任務可同時啟動。利用GSF 系統調度時,并行任務數目可具體表示為CUDA 流數目,不同流中任務并行執行,核函數計算和數據傳輸并行隱藏了部分延遲開銷。并行度較低,無法充分利用GPU 資源;并行度較高,可能出現資源競爭問題。因此,采用由100 個不同輸入圖片檢測程序組成的不規則GPU 任務集合來驗證并行任務數目對算法的影響。實驗設置如下:調度框架運行在主節點,集群的兩個從節點分別啟動2 個執行器,算法初始輸入的精度值固定為0.4,設置數目分別為1、2和4。每種情況運行三次,得到各項指標策略的平均結果如圖4所示。

圖4 不同并行任務數目的結果對比Fig.4 Comparison of results with different numbers of parallel tasks
圖4(a)顯示了不同任務并行度對應的集群GPU 平均設備利用率變化情況,圖4(b)顯示了不同任務并行度對應的集群GPU 平均顯存利用率變化情況。當任務順序執行時,兩種利用率都保持在30%以下,造成了GPU 資源的空閑浪費。當并行任務數目等于2時,顯存利用率維持在70%左右,GPU 設備被完全利用,集合總執行時長最短。原因是2 兩個模型同時運行會充分利用資源,實現多任務并行效果,有效提升了執行效率。當并行任務數目等于4 時,顯存利用率最優且維持在90%左右,設備利用率也處于較高數值,但執行時長最長。原因是圖片檢測程序使用的寄存器、流多處理器資源較多,當4 個模型同時在一個GPU 上檢測時會造成資源競爭使任務執行阻塞,從而導致執行時間較長。值得一提的是,實驗設置并行任務數目為5 時,任務會執行出錯結束運行,因為此時分配到單個GPU 的任務顯存總需求超過其可用顯存,造成顯存溢出無法正確執行。顯存和設備利用率變化不是正相關的,必須根據任務的資源需求確定合適的并行任務數目才能達到資源利用率和任務處理效率提升的平衡。
4.3.2 調度算法性能對比
為了進一步評價算法的性能利用優勢,在相同實驗配置下將EGS 算法與貪心算法、MCT 算法和Min-min 算法整體對比,從不同測量指標綜合評估算法性能。測試輸入為表1 介紹的三種基準程序混合生成的獨立GPU 任務集合,該集合滿足不規則特點。通過隨機任務生成器提交任務集合到調度器,采用四種調度算法分別調度集合到GPU計算。
首先,設計實驗對比不同任務數目情況下各個調度算法得到的總執行時長。具體設置如下:調度框架運行在主節點,集群的兩個從節點分別啟動2個執行器,執行器精度值β固定為0.4、并行任務數目固定為2,設置集合任務數目分別為250、500 和1000。每種情況運行3 次,測量得到各種指標平均結果如圖5所示。

圖5 不同調度算法的執行時長對比Fig.5 Comparison of execution time of different scheduling algorithms
從圖5 的執行時長對比結果來看,隨著任務數量的增加四種算法的調度時長都保持增長,EGS 相較于其他策略具有明顯的性能優勢,并且這種優勢持續保持。任務數量等于250時,EGS的調度時長相較于其他三種調度算法分別減少為原來的39%、50%和59%;任務數量等于500時,EGS的調度時長相較于其他三種調度算法分別減少為原來的52%、59%和66%;任務數量等于1000 時,EGS 的調度時長相較于其他三種調度算法分別減少為原來的58%、64%和80%。對于不同的不規則GPU任務集合,EGS算法的效果都保持最優,原因是EGS通過將不同數據規模的任務劃分到同一任務集合中整體調度,得到全局最優調度方案,保證了多任務共享GPU 資源,有效發揮了GPU 的計算潛力,提升了任務處理效率。而其他三種調度算法都依次調度集合中的任務,將任務調度到最佳的GPU 上計算,調度結果只是局部最優解,無法實現多任務共享GPU資源,造成了GPU資源的極大浪費。
接下來,通過實驗進行不同調度算法得到的GPU 利用率對比。具體設置如下:調度框架運行在主節點,集群的兩個從節點分別啟動2 個執行器,執行器精度值β固定為0.4、并行任務數目固定為2,固定集合任務數目為1000。利用隨機任務生成器提交集合,測量得到各種性能指標的平均結果如圖6所示。
從圖6 中利用率變化曲線可以看出,EGS 在調度不規則獨立GPU 任務集合時集群整體的設備利用率和顯存利用率表現最優,貪心調度的利用率表現最差。EGS 的設備利用率峰值可維持在100%,顯存利用率峰值可維持在95%,相較于其他三種常見的獨立任務調度策略具有明顯優勢。原因是EGS算法在計算時將不同資源需求的不規則任務組合形成集合整體調度,單個集合的資源需求更大,多任務共享GPU 計算資源,能最大限度發揮GPU 的計算潛力。而其他三種調度算法都是以單個任務為粒度執行調度,顯存資源的使用情況不規律、波動較大且空閑率較高。綜合執行時長和GPU 資源利用率兩類指標的測量結果來看,EGS 算法在調度不規則的獨立GPU任務集合時效果較好。

圖6 不同調度算法的資源利用率對比Fig.6 Comparison of resource utilization of different scheduling algorithms
本文研究了CPU-GPU 異構集群中不規則獨立任務的調度策略,通過分析GPU 任務的計算特點和多任務共享GPU 資源的運行機制,分析不規則獨立任務集合造成GPU 利用率低下的原因。在此基礎上,設計并實現了一種擴展貪心調度算法,將調度粒度提升至任務集合,為集群中各個GPU 分配能滿足資源需求的任務集合調度并運行,找到全局最優的調度方案。另一方面,提出了一種基于線程池和CUDA 流實現的調度系統,結合調度策略能保證資源利用率和任務處理效率的提升。但本文研究還存在一些不足:目前只考慮了任務信息已知的靜態調度情況,無法反映實際生產環境中的調度,另外算法計算中只涉及顯存資源約束,對于流多處理器、寄存器等資源沒有考慮,可能造成同一GPU 中多個任務出現資源競爭問題。因此,未來要完善調度相關問題,進一步提升GPU資源利用率。