詳細解析眾核多計算模式系統的構建
2.2 計算模式構建與切換
本文引用地址:http://dyxdggzs.com/article/201808/385126.htm計算模式構建是形態(tài)管理模塊根據接收到的命令動(dòng)態(tài)構建出被指定的目的計算模式的過(guò)程。眾核處理系統在初始化時(shí),就已經(jīng)創(chuàng )建了指定數目的CUDA 流(CUDA流的最大數目取決于GPU中硬件工作隊列的數目),并采用空位標記法對創(chuàng )建的CUDA流進(jìn)行管理,通過(guò)標記位的有效性描述CUDA 流的可用性。當目的計算模式為單任務(wù)計算時(shí),只需將首位的CUDA流標記設置為有效,其他全部標記為無(wú)效,在對計算任務(wù)加載時(shí),將計算任務(wù)放入該CUDA流中進(jìn)行計算;當目的計算模式為多任務(wù)計算時(shí),需要將指定數目CUDA流的標記位設置為有效,在對計算任務(wù)加載時(shí),通過(guò)輪詢(xún)的方式將計算任務(wù)放入到相應的CUDA 流中,利用CUDA 流的Hyper-Q特性,同時(shí)加載多個(gè)計算任務(wù)到眾核計算單元;當目的計算模式為多任務(wù)流式計算時(shí),需要將指定CUDA 流的標記設置為有效,從構建第一個(gè)計算步開(kāi)始,將第一個(gè)計算步放入第一個(gè)CUDA 流中進(jìn)行計算,當第一個(gè)計算步首次完成計算后,利用二元信號量通知眾核控制單元中的任務(wù)管理模塊開(kāi)始構建第二個(gè)計算步,并重新構建第一個(gè)計算步,以此類(lèi)推,完成對多任務(wù)流式計算中每個(gè)計算步的動(dòng)態(tài)構建過(guò)程。
計算模式的切換是當眾核計算單元的當前計算模式與計算任務(wù)執行需要的計算模式(即目的計算模式)不匹配時(shí),需要對眾核計算單元的計算模式進(jìn)行切換,以適應計算模式變化的需求。
在從任務(wù)配置文件中獲取適應于計算任務(wù)執行的目的計算模式后,首先與當前計算模式進(jìn)行比較,若匹配成功則不需要進(jìn)行計算模式的切換;若匹配失敗則進(jìn)一步判斷眾核在當前計算模式下是否空閑,如處于忙碌狀態(tài)則需要等待,對于不同優(yōu)先級的任務(wù)設有不同的等待時(shí)限,以保證對計算任務(wù)的及時(shí)響應,當大于這一時(shí)限時(shí)強制結束正在運行的任務(wù)以釋放計算資源,從而構建新的計算模式,完成計算模的切換過(guò)程,流程圖如圖4 所示。

2.3 共享內存緩沖技術(shù)
眾核計算單元在對主控機請求的計算任務(wù)加載前,必須獲取來(lái)自主控機的任務(wù)數據,為了實(shí)現對任務(wù)數據的接收和發(fā)送,需要建立相應的數據緩沖區。傳統的方法是采用消息隊列和基于共享內存信號燈的方式來(lái)建立和管理數據緩沖區,但當數據的寫(xiě)入和讀取速度差別較大時(shí),容易造成數據緩沖區的阻塞。因此采用一種可滑動(dòng)動(dòng)態(tài)共享內存緩沖技術(shù),如圖5所示。
在眾核控制單元的存儲空間中申請存儲空間作為存放數據的緩沖池,按需要建立指定數量的單向指針鏈表,每個(gè)指針鏈表代表一個(gè)數據緩沖區,在眾核處理系統的計算模式切換時(shí),可根據并行任務(wù)數目的變化修改指針鏈表的節點(diǎn)數,使每個(gè)數據緩沖區占用的存儲空間按需滑動(dòng),以提高整個(gè)數據緩池數據的傳遞效率。
2.4 計算庫動(dòng)態(tài)加載
在對計算任務(wù)的執行函數進(jìn)行加載時(shí),采用動(dòng)態(tài)共享庫的方式,因為動(dòng)態(tài)鏈接的共享庫具有動(dòng)態(tài)加載、封裝實(shí)現、節省內存等優(yōu)點(diǎn),可以把眾核計算單元的執行函數與邏輯控制程序相隔離,降低了眾核計算與邏輯控制的耦合度,增加了可擴展性和靈活性。
在動(dòng)態(tài)加載計算庫前,需要將執行函數編譯生成動(dòng)態(tài)共享庫,進(jìn)而在程序中進(jìn)行顯示調用。當調用時(shí)使用動(dòng)態(tài)加載API,該過(guò)程首先調用dlopen以打開(kāi)指定名字的動(dòng)態(tài)共享庫,并獲得共享對象的句柄;而后通過(guò)調用dlsym,根據動(dòng)態(tài)共享庫操作句柄與符號獲取該符號對應的函數的執行代碼地址;在取得執行代碼地址后,就可以根據共享庫提供的接口調用與計算任務(wù)對應的執行函數,將執行函數發(fā)射到眾核計算單元,由眾核計算單元根據執行函數的配置參數組織計算資源進(jìn)行計算;當不會(huì )再調用共享對象時(shí)調用dlclose關(guān)閉指定句柄的動(dòng)態(tài)共享庫。
3 結語(yǔ)
針對復雜應用領(lǐng)域計算任務(wù)對多種計算模式的需求,本文研究了眾核處理機結構,根據NVIDIA KeplerGK110架構中Hyper-Q 與CUDA 流的特性,構建了可單任務(wù)并行計算、多任務(wù)并行計算、多任務(wù)流式計算間動(dòng)態(tài)切換的眾核多計算模式系統,能夠提高實(shí)時(shí)計算平臺的靈活性,以適應不同的任務(wù)計算需求。下一步的研究方向是挖掘GPU中硬件工作鏈路與SM(Streaming Mul-tiprocessor)間的映射機制。
評論