詳細解析眾核多計算模式系統的構建
0 引言
本文引用地址:http://dyxdggzs.com/article/201808/385126.htm在航空航天、醫療服務(wù)、地質(zhì)勘探等復雜應用領(lǐng)域,需要處理的數據量急劇增大,需要高性能的實(shí)時(shí)計算能力提供支撐。與多核處理器相比,眾核處理器計算資源密度更高、片上通信開(kāi)銷(xiāo)顯著(zhù)降低、性能/功耗比明顯提高,可為實(shí)時(shí)系統提供強大的計算能力。
在復雜應用領(lǐng)域當中,不同應用場(chǎng)景對計算的需求可能不同。例如,移動(dòng)機器人在作業(yè)時(shí),可能需要同時(shí)執行路徑規劃、目標識別等多個(gè)任務(wù),這些任務(wù)需要同時(shí)執行;在對遙感圖像處理時(shí),需要對圖像數據進(jìn)行配準、融合、重構、特征提取等多個(gè)步驟,這些步驟間既需要同時(shí)執行,又存在前驅后繼的關(guān)系。因此,基于眾核處理器進(jìn)行計算模式的動(dòng)態(tài)構造,以適應不同的應用場(chǎng)景和應用任務(wù)成為一種新的研究方向。文獻[1]研究了具有邏輯核構造能力的眾核處理器體系結構,其基本思想是基于多個(gè)細粒度處理器核構建成粗粒度邏輯核,將不斷增加的處理器核轉化為單線(xiàn)程串行應用的性能提升。文獻提出并驗證了一種基于類(lèi)數據流驅動(dòng)模型的可重構眾核處理器結構,實(shí)現了邏輯核處理器的運行時(shí)可重構機制。文獻 提出了一種支持核資源動(dòng)態(tài)分組的自適應調度算法,通過(guò)對任務(wù)簇的拆分與合并,動(dòng)態(tài)構建可彈性分區的核邏輯組,實(shí)現核資源的隔離優(yōu)化訪(fǎng)問(wèn)。
GPGPU(General - Purpose Computing on GraphicsProcessing Units)作為一種典型的眾核處理器,有關(guān)研究多面向單任務(wù)并發(fā)執行方面的優(yōu)化以及應用算法的加速。本文以GPGPU為平臺,通過(guò)研究和設計,構建了單任務(wù)并行、多任務(wù)并行和多任務(wù)流式處理的多計算模式處理系統。
1 眾核處理機
1.1 眾核處理機結構
眾核處理機是基于眾核控制單元(MPU)與眾核處理器(GPGPU)相結合的主、協(xié)處理方式構建而成,其邏輯結構如圖1所示。眾核處理機由眾核控制單元和眾核計算單元兩部分組成,其中眾核控制單元采用X86結構的MPU,與眾核計算單元之間通過(guò)PCI-E總線(xiàn)進(jìn)行互連。

1.2 CUDA流與Hyper-Q
在統一計算設備架構(Compute Unified Device Ar-chitecture,CUDA)編程模型中,CUDA流(CUDA Stream)表示GPU的一個(gè)操作隊列,通過(guò)CUDA流來(lái)管理任務(wù)和并行。CUDA 流的使用分為兩種:一種是CUDA 在創(chuàng )建上下文時(shí)會(huì )隱式地創(chuàng )建一個(gè)CUDA流,從而命令可以在設備中排隊等待執行;另一種是在編程時(shí),在執行配置中顯式地指定CUDA 流。不管以何種方式使用CUDA流,所有的操作在CUDA流中都是按照先后順序排隊執行,然后每個(gè)操作按其進(jìn)入隊列的順序離開(kāi)隊列。換言之,隊列充當了一個(gè)FIFO(先入先出)緩沖區,操作按照它們在設備中的出現順序離開(kāi)隊列。
在GPU 中,有一個(gè)CUDA 工作調度器(CUDA WorkDistributor,CWD)的硬件單元,專(zhuān)門(mén)負責將計算工作分發(fā)到不同的流處理器中。在Fermi架構中,雖然支持16 個(gè)內核的同時(shí)啟動(dòng),但由于只有一個(gè)硬件工作隊列用來(lái)連接主機端CPU 和設備端GPU,造成并發(fā)的多個(gè)CUDA 流中的任務(wù)在執行時(shí)必須復用同一硬件工作隊列,產(chǎn)生了虛假的流內依賴(lài)關(guān)系,必須等待同一CUDA流中相互依賴(lài)的kernel執行結束,另一CUDA流中的ker-nel才能開(kāi)始執行。而在Kepler GK110架構中,新具有的Hyper-Q特性消除了只有單一硬件工作隊列的限制,增加了硬件工作隊列的數量,因此,在CUDA 流的數目不超過(guò)硬件工作隊列數目的前提下,允許每個(gè)CUDA流獨占一個(gè)硬件工作隊列,CUDA流內的操作不再阻塞其他CUDA流的操作,多個(gè)CUDA流能夠并行執行。
如圖2 所示,當利用Hyper-Q 和CUDA 流一起工作時(shí),虛線(xiàn)上方顯示為Fermi模式,流1、流2、流3 復用一個(gè)硬件工作隊列,而虛線(xiàn)下方為Kepler Hyper-Q 模式,允許每個(gè)流使用單獨的硬件工作隊列同時(shí)執行。

2 眾核多計算模式處理框架
為了充分發(fā)揮眾核處理器的計算能力,眾核處理系統面對不同的計算任務(wù)的特點(diǎn),可構建三種計算模式,即單任務(wù)并行計算、多任務(wù)并行計算、多任務(wù)流式計算。
2.1 眾核多計算模式處理系統結構
眾核多計算模式處理系統結構如圖3 所示。眾核處理系統包括數據通信、任務(wù)管理、形態(tài)管理、資源管理和控制監聽(tīng)模塊。

數據通信模塊:提供接口給主控機,負責接收從主控機發(fā)送來(lái)的任務(wù)命令和任務(wù)計算所需的任務(wù)數據,并且最終將眾核處理機運算完成的計算結果通過(guò)該模塊返回給主控機。
控制監聽(tīng)模塊:在眾核處理系統運行時(shí),實(shí)時(shí)獲取主控機發(fā)送給眾核處理機的任務(wù)命令,將其傳送給任務(wù)管理模塊,并接收任務(wù)管理模塊返回的任務(wù)命令執行結果。
任務(wù)管理模塊:負責計算任務(wù)的加載過(guò)程,將控制監聽(tīng)模塊發(fā)送來(lái)的任務(wù)命令存于任務(wù)隊列,當眾核計算單元需要加載任務(wù)進(jìn)行計算時(shí),從任務(wù)隊列中獲取任務(wù)命令,根據任務(wù)命令從任務(wù)配置文件中獲取任務(wù)計算所需的任務(wù)信息,該任務(wù)信息包含了計算任務(wù)運行時(shí)所需的存儲空間大小、適合于該任務(wù)的計算模式、執行函數(即CUDA中的kernel函數)等內容,在計算任務(wù)在被加載前,需要通知形態(tài)管理模塊把眾核計算單元切換到指定的計算模式下,并通知資源管理模塊分配存儲空間,通過(guò)數據通信模塊獲取任務(wù)數據,然后讀取任務(wù)計算庫,加載執行函數進(jìn)行計算。
形態(tài)管理模塊:接收任務(wù)管理模塊發(fā)送來(lái)的目標計算模式,切換到該種計算模式。
資源管理模塊:根據任務(wù)管理模塊發(fā)送的參數分配存儲空間,包括眾核控制單元的存儲空間和眾核計算單元的存儲空間,眾核控制單元的存儲空間用于對任務(wù)數據進(jìn)行緩存,然后通過(guò)數據傳輸的API接口把緩存在眾核控制單元的數據傳送到眾核計算單元的存儲空間,在計算時(shí)由從眾核計算單元存儲空間加載數據進(jìn)行計算。
評論