<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 詳細解析眾核多計算模式系統的構建

詳細解析眾核多計算模式系統的構建

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

2.2 計算模式構建與切換

本文引用地址:http://dyxdggzs.com/article/201808/385126.htm

計算模式構建是形態(tài)管理模塊根據接收到的命令動(dòng)態(tài)構建出被指定的目的計算模式的過(guò)程。眾核處理系統在初始化時(shí),就已經(jīng)創(chuàng )建了指定數目的 流(流的最大數目取決于GPU中硬件工作隊列的數目),并采用空位標記法對創(chuàng )建的流進(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)間的映射機制。


上一頁(yè) 1 2 下一頁(yè)

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>