新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 詳細(xì)解析眾核多計(jì)算模式系統(tǒng)的構(gòu)建

詳細(xì)解析眾核多計(jì)算模式系統(tǒng)的構(gòu)建

作者: 時(shí)間:2018-08-02 來源:網(wǎng)絡(luò) 收藏

2.2 計(jì)算模式構(gòu)建與切換

本文引用地址:http://m.butianyuan.cn/article/201808/385126.htm

計(jì)算模式構(gòu)建是形態(tài)管理模塊根據(jù)接收到的命令動態(tài)構(gòu)建出被指定的目的計(jì)算模式的過程。眾核處理系統(tǒng)在初始化時(shí),就已經(jīng)創(chuàng)建了指定數(shù)目的 流(流的最大數(shù)目取決于GPU中硬件工作隊(duì)列的數(shù)目),并采用空位標(biāo)記法對創(chuàng)建的流進(jìn)行管理,通過標(biāo)記位的有效性描述CUDA 流的可用性。當(dāng)目的計(jì)算模式為單任務(wù)計(jì)算時(shí),只需將首位的CUDA流標(biāo)記設(shè)置為有效,其他全部標(biāo)記為無效,在對計(jì)算任務(wù)加載時(shí),將計(jì)算任務(wù)放入該CUDA流中進(jìn)行計(jì)算;當(dāng)目的計(jì)算模式為多任務(wù)計(jì)算時(shí),需要將指定數(shù)目CUDA流的標(biāo)記位設(shè)置為有效,在對計(jì)算任務(wù)加載時(shí),通過輪詢的方式將計(jì)算任務(wù)放入到相應(yīng)的CUDA 流中,利用CUDA 流的Hyper-Q特性,同時(shí)加載多個(gè)計(jì)算任務(wù)到眾核計(jì)算單元;當(dāng)目的計(jì)算模式為多任務(wù)流式計(jì)算時(shí),需要將指定CUDA 流的標(biāo)記設(shè)置為有效,從構(gòu)建第一個(gè)計(jì)算步開始,將第一個(gè)計(jì)算步放入第一個(gè)CUDA 流中進(jìn)行計(jì)算,當(dāng)?shù)谝粋€(gè)計(jì)算步首次完成計(jì)算后,利用二元信號量通知眾核控制單元中的任務(wù)管理模塊開始構(gòu)建第二個(gè)計(jì)算步,并重新構(gòu)建第一個(gè)計(jì)算步,以此類推,完成對多任務(wù)流式計(jì)算中每個(gè)計(jì)算步的動態(tài)構(gòu)建過程。

計(jì)算模式的切換是當(dāng)眾核計(jì)算單元的當(dāng)前計(jì)算模式與計(jì)算任務(wù)執(zhí)行需要的計(jì)算模式(即目的計(jì)算模式)不匹配時(shí),需要對眾核計(jì)算單元的計(jì)算模式進(jìn)行切換,以適應(yīng)計(jì)算模式變化的需求。

在從任務(wù)配置文件中獲取適應(yīng)于計(jì)算任務(wù)執(zhí)行的目的計(jì)算模式后,首先與當(dāng)前計(jì)算模式進(jìn)行比較,若匹配成功則不需要進(jìn)行計(jì)算模式的切換;若匹配失敗則進(jìn)一步判斷眾核在當(dāng)前計(jì)算模式下是否空閑,如處于忙碌狀態(tài)則需要等待,對于不同優(yōu)先級的任務(wù)設(shè)有不同的等待時(shí)限,以保證對計(jì)算任務(wù)的及時(shí)響應(yīng),當(dāng)大于這一時(shí)限時(shí)強(qiáng)制結(jié)束正在運(yùn)行的任務(wù)以釋放計(jì)算資源,從而構(gòu)建新的計(jì)算模式,完成計(jì)算模的切換過程,流程圖如圖4 所示。


2.3 共享內(nèi)存緩沖技術(shù)

眾核計(jì)算單元在對主控機(jī)請求的計(jì)算任務(wù)加載前,必須獲取來自主控機(jī)的任務(wù)數(shù)據(jù),為了實(shí)現(xiàn)對任務(wù)數(shù)據(jù)的接收和發(fā)送,需要建立相應(yīng)的數(shù)據(jù)緩沖區(qū)。傳統(tǒng)的方法是采用消息隊(duì)列和基于共享內(nèi)存信號燈的方式來建立和管理數(shù)據(jù)緩沖區(qū),但當(dāng)數(shù)據(jù)的寫入和讀取速度差別較大時(shí),容易造成數(shù)據(jù)緩沖區(qū)的阻塞。因此采用一種可滑動動態(tài)共享內(nèi)存緩沖技術(shù),如圖5所示。

在眾核控制單元的存儲空間中申請存儲空間作為存放數(shù)據(jù)的緩沖池,按需要建立指定數(shù)量的單向指針鏈表,每個(gè)指針鏈表代表一個(gè)數(shù)據(jù)緩沖區(qū),在眾核處理系統(tǒng)的計(jì)算模式切換時(shí),可根據(jù)并行任務(wù)數(shù)目的變化修改指針鏈表的節(jié)點(diǎn)數(shù),使每個(gè)數(shù)據(jù)緩沖區(qū)占用的存儲空間按需滑動,以提高整個(gè)數(shù)據(jù)緩池?cái)?shù)據(jù)的傳遞效率。

2.4 計(jì)算庫動態(tài)加載

在對計(jì)算任務(wù)的執(zhí)行函數(shù)進(jìn)行加載時(shí),采用動態(tài)共享庫的方式,因?yàn)閯討B(tài)鏈接的共享庫具有動態(tài)加載、封裝實(shí)現(xiàn)、節(jié)省內(nèi)存等優(yōu)點(diǎn),可以把眾核計(jì)算單元的執(zhí)行函數(shù)與邏輯控制程序相隔離,降低了眾核計(jì)算與邏輯控制的耦合度,增加了可擴(kuò)展性和靈活性。

在動態(tài)加載計(jì)算庫前,需要將執(zhí)行函數(shù)編譯生成動態(tài)共享庫,進(jìn)而在程序中進(jìn)行顯示調(diào)用。當(dāng)調(diào)用時(shí)使用動態(tài)加載API,該過程首先調(diào)用dlopen以打開指定名字的動態(tài)共享庫,并獲得共享對象的句柄;而后通過調(diào)用dlsym,根據(jù)動態(tài)共享庫操作句柄與符號獲取該符號對應(yīng)的函數(shù)的執(zhí)行代碼地址;在取得執(zhí)行代碼地址后,就可以根據(jù)共享庫提供的接口調(diào)用與計(jì)算任務(wù)對應(yīng)的執(zhí)行函數(shù),將執(zhí)行函數(shù)發(fā)射到眾核計(jì)算單元,由眾核計(jì)算單元根據(jù)執(zhí)行函數(shù)的配置參數(shù)組織計(jì)算資源進(jìn)行計(jì)算;當(dāng)不會再調(diào)用共享對象時(shí)調(diào)用dlclose關(guān)閉指定句柄的動態(tài)共享庫。

3 結(jié)語

針對復(fù)雜應(yīng)用領(lǐng)域計(jì)算任務(wù)對多種計(jì)算模式的需求,本文研究了眾核處理機(jī)結(jié)構(gòu),根據(jù)NVIDIA KeplerGK110架構(gòu)中Hyper-Q 與CUDA 流的特性,構(gòu)建了可單任務(wù)并行計(jì)算、多任務(wù)并行計(jì)算、多任務(wù)流式計(jì)算間動態(tài)切換的眾核多計(jì)算模式系統(tǒng),能夠提高實(shí)時(shí)計(jì)算平臺的靈活性,以適應(yīng)不同的任務(wù)計(jì)算需求。下一步的研究方向是挖掘GPU中硬件工作鏈路與SM(Streaming Mul-tiprocessor)間的映射機(jī)制。


上一頁 1 2 下一頁

關(guān)鍵詞: 眾核處理器 CUDA

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉