文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.006
中文引用格式: 劉歡,韓俊剛,李卯良,等. 時鐘共享多線程處理器SIMD控制器設計與實現(xiàn)[J].電子技術應用,2016,42(11):29-32.
英文引用格式: Liu Huan,Han Jungang,Li Maoliang,et al. Design and implementation of SIMD controller for a shared-clock multithreading processor[J].Application of Electronic Technique,2016,42(11):29-32.
0 引言
隨著并行計算和集成電路的不斷發(fā)展,如何有效地提高處理器的并行處理性能已經(jīng)成為熱點問題。傳統(tǒng)處理器通過開發(fā)指令級并行(Instruction Level Parallelism,ILP)[1]來提高處理器的性能,但硬件的復雜度及功耗等因素影響了處理器的性能。因此設計者們紛紛把目光投向更高層次的線程級并行(Thread Level Parallelism,TLP)[1-3]技術,時鐘共享多線程處理器就是在這種背景下產(chǎn)生的。多線程這個概念最先由美國加州大學Tullsen等提出的,并提出了SMT[4-5]處理器模型。這種結構通過資源競爭和資源動態(tài)共享的方式使所有的處理單元共同活躍,充分提高了資源利用率。本文根據(jù)時鐘共享多線程處理器的結構,在多核處理器[6-7]的基礎上設計實現(xiàn)了一種SIMD控制器,并且對電路進行了功能驗證和FPGA驗證。
1 整體硬件結構
時鐘共享多線程處理器是由16個處理單元(PE)互聯(lián)構成的一個4×4二維陣列,它主要包括前向處理單元(FEP)、存儲管理器(mem_man)、調(diào)度器(Sche)和協(xié)處理器(ACCL)。整體結構如圖1所示。
FEP(前向處理單元)模塊:接收外部CPU下發(fā)的配置信息、初始化指令和數(shù)據(jù)、預存數(shù)據(jù)加載到buffer_memory中、回收計算結果、構建整個陣列進行SIMD運算等。
Sche(調(diào)度器)模塊:由四個行控制器(Row Controller,CRi)組成。每一個行控制器用來實現(xiàn)SIMD運行模式的構建、并將前向單元發(fā)送的初始化指令和數(shù)據(jù)、配置信息,發(fā)送給當前行的各個PE。
mem_man(存儲管理)模塊:由四個列控制器(Column Controller,CWj)組成。每一個列控制器用來預存數(shù)據(jù)和回收計算結果。
ACCL(協(xié)處理器)模塊:每四個處理單元之間共享使用一個協(xié)處理器,處理單元可以直接調(diào)用該協(xié)處理器完成特殊函數(shù)運算。
2 時鐘共享多線程處理器SIMD控制器
SIMD控制器是由一個前向處理單元(FEP)、一個調(diào)度器(Sche)、一個存儲管理(mem_man)構成,其中mem_man模塊由4個列控制器組成,sche模塊由4個行控制器組成,每一列對應一個列控制器,每一行對應一個行控制器。SIMD控制器處于整個時鐘共享多線程處理器結構的最頂層,控制該4×4陣列的運行和調(diào)度處理。SIMD控制器具體實現(xiàn)功能如下:
(1)執(zhí)行整個時鐘共享多線程處理器的初始化,也就是說對各個基本處理單元的指令存儲和數(shù)據(jù)存儲進行加載;
(2)為提高整個時鐘共享多線程處理器的運行效率,可對基本處理單元所需數(shù)據(jù)和相關指令進行預存;
(3)在基本處理單元運算過程中,可進行動態(tài)數(shù)據(jù)加載和讀??;
(4)對計算結果進行回收,并實時監(jiān)測基本處理單元的運行狀態(tài)。
2.1 SIMD控制器整體結構
根據(jù)時鐘共享多線程處理器系統(tǒng)整體介紹和該系統(tǒng)具有的基本特征,以及SIMD控制器功能的確定和功能的劃分,可以確定SIMD控制器的整體結構,如圖2所示。
圖2中整個時鐘共享多線程處理器由PC控制發(fā)送數(shù)據(jù)和回收計算結果,通過PC機將按照數(shù)據(jù)包格式將數(shù)據(jù)、指令以及控制信息發(fā)送給FEP,F(xiàn)EP通過解析包頭,產(chǎn)生控制信號,將數(shù)據(jù)或者指令發(fā)給行列控制器進而控制PE陣列。
2.2 前向處理單元的設計與實現(xiàn)
前向處理單元主要完成整個基本陣列處理單元的控制,具體功能有:初始化FEP存儲、控制整個陣列中PE單元實現(xiàn)SIMD運算、采用廣播的形式初始化行列控制器和配置線程管理器信息、讀取運算結果、查詢PE執(zhí)行的狀態(tài)等。具體結構如圖3所示。
外部PC將指令和數(shù)據(jù)寫入FIFO0,接收控制模塊檢測FIFO0的fifo0_empty信號是否有效。當fifo0_empty無效表示FIFO0不為空,此時接收控制模塊開始讀取FIFO0中的數(shù)據(jù),將讀取來的數(shù)據(jù)包頭進行解析,產(chǎn)生相應的控制信號,并將數(shù)據(jù)包頭及之后攜帶的數(shù)據(jù)寫入FIFO1或FEP指令存儲中。其中寫入到FIFO1時要查看FIFO1的fifo1_almost_full信號是否有效,也就是FIFO1幾乎滿信號是否為高,如果為高,則不能寫入數(shù)據(jù),并反饋此信息讓外部PC停止發(fā)送數(shù)據(jù);否則,將數(shù)據(jù)寫入FIFO1中。
當發(fā)送模塊檢測FIFO1不空,也就是fifo1_empty信號時開始讀取數(shù)據(jù),并將讀出的數(shù)據(jù)廣播給行列控制器,由行列控制器解析判斷是否接收此數(shù)據(jù)。對于行控制器,數(shù)據(jù)首先廣播給RC0控制器,如果RC0解析判斷該數(shù)據(jù)不是發(fā)送給該行,則RC0將數(shù)據(jù)發(fā)送給RC1,以此類推。
當外部PC發(fā)送的是讀取指令或數(shù)據(jù)命令時,也是通過數(shù)據(jù)包將相關控制器信息以廣播的形式發(fā)送出去,然后根據(jù)FIFO2的幾乎滿標志信號fifo2_almost_full來判斷是否將回收的數(shù)據(jù)寫入FIFO2中,如果fifo2_almost_full幾乎滿信號為高,則阻塞;否則,將數(shù)據(jù)寫入FIFO2。通過讀控制模塊來檢測FIFO2是否為空,即判斷fifo2_empty信號是否有效,如果無效,則將FIFO2的數(shù)據(jù)讀出,寫入到FIFO3中,供外部PC讀??;否則,阻塞直到讀取操作完成。當外部CPU需要讀取前向處理單元存儲或者行控制器中的SIMD指令時,也發(fā)送相應的指令從前向處理單元存儲中或者從4個行控制器中讀取SIMD指令;如果整個陣列進行SIMD運算,則發(fā)送SIMD請求給前向處理單元,前向處理單元中的接收模塊檢測到該請求后,將前向處理單元存儲中的SIMD指令發(fā)送給下一級的4個行控制器以完成該SIMD運算,最后,發(fā)送一個請求指令來結束SIMD的運算模式。
2.2.1 數(shù)據(jù)接收控制模塊的實現(xiàn)
數(shù)據(jù)接收模塊的功能是:檢測FIFO0中的空滿信號,如果FIFO0不為空,則讀取該數(shù)據(jù),并對數(shù)據(jù)包包頭進行解析,解析的相關命令可將SIMD指令寫入前向處理單元存儲或者將MIMD指令或者數(shù)據(jù)以及SIMD指令寫入FIFO1中,等待數(shù)據(jù)廣播;當根據(jù)解析的數(shù)據(jù)包信息從FIFO2中讀取相關指令或者數(shù)據(jù),將讀取的數(shù)據(jù)寫入FIFO3以供外部CPU讀?。蝗绻馕鰹榭刂普麄€陣列單元來執(zhí)行SIMD運行模式時,則狀態(tài)跳轉(zhuǎn)到SIMD運行模式狀態(tài),將整個基本陣列單元構建成SIMD運行模式。該前向處理單元的數(shù)據(jù)接收模塊采用狀態(tài)機實現(xiàn),狀態(tài)轉(zhuǎn)移圖如圖4所示。
2.2.2 數(shù)據(jù)發(fā)送控制模塊的實現(xiàn)
數(shù)據(jù)發(fā)送模塊將外部PC發(fā)送的初始化數(shù)據(jù)進行下發(fā),其具體實現(xiàn)功能是檢測FIFO1的空信號和幾乎滿信號,如果FIFO1不空而且行和列控制器處于空閑狀態(tài)時,則負責將FIFO1中的指令或者數(shù)據(jù)以廣播的形式發(fā)送給4個列控制器和第一個行控制器。狀態(tài)轉(zhuǎn)移如圖5所示。
2.3 行控制器設計與實現(xiàn)
行控制器總體結構如圖6所示,由1個RC_CTRL控制單元、1個深度為1 K寬度為48 bit的SIMD指令存儲(I-MEM,為RAM)和1個深度為16寬度為10 bit的索引表組成。組合邏輯電路部分主要負責判斷是否為加載給當前行控制器的指令/數(shù)據(jù),若不是該行操作,則將指令/數(shù)據(jù)發(fā)送給下一個行控制器;若是,則將對應指令/數(shù)據(jù)發(fā)送到RC_CTRL模塊進行相應操作。索引表(INDEX_MEM)如表1所示,為一個寬度為10深度為16的RAM,主要用于存儲SIMD指令的基址,每一個基址都對應一段完整的SIMD指令。行控制器的核心部分為RC_CTRL模塊,該模塊狀態(tài)轉(zhuǎn)移圖如圖7所示。
RC_CTRL模塊按照各個功能點歸納狀態(tài)轉(zhuǎn)移圖,主要包括初始化數(shù)據(jù)和數(shù)據(jù)的回收、SIMD運行模式和MIMD運行模式的切換等。初始化數(shù)據(jù)和數(shù)據(jù)回收的狀態(tài)轉(zhuǎn)移圖如圖7所示。
2.4 列控制器設計與實現(xiàn)
列控制器主要完成了整個陣列處理單元共享存儲的數(shù)據(jù)加載、數(shù)據(jù)的動態(tài)加載和數(shù)據(jù)回收。前向處理單元采用廣播的形式將指令和數(shù)據(jù)廣播給行、列控制器,當列控制器檢測到是初始化數(shù)據(jù)(包括MIMD數(shù)據(jù)和SIMD數(shù)據(jù))時,則將數(shù)據(jù)存儲到列存儲中;當檢測到是對列存儲數(shù)據(jù)的讀取操作時,列控制器則將所需數(shù)據(jù)從列存儲中讀取給前向處理單元;當列控制器檢測到是給PE動態(tài)讀取數(shù)據(jù)請求時,則將列存儲中對應的數(shù)據(jù)廣播給PE。
列控制器結構框圖如圖8所示,主要由1個Init_Ctrl(初始化控制器)、1個Dynamic_Ctrl(動態(tài)控制)和一個DMEM(數(shù)據(jù)存儲)3部分組成。Init_Ctrl模塊主要用于對初始化加載數(shù)據(jù)進行控制及完成外部對計算結果數(shù)據(jù)的讀取操作;Dynamic_Ctrl模塊主要用于對來自PE動態(tài)寫入或者讀取列存儲的數(shù)據(jù)進行控制;DMEM模塊為一個寬度為32 bit深度為1 M的RAM。
3 仿真與FPGA驗證
本文采用Xilinx公司的ISE工具進行電路綜合,F(xiàn)PGA選用Xilinx公司的XC7V2000t-2fhg1761,電路的最高頻率可達到316.877 MHz。
根據(jù)以上SIMD控制器的主要實現(xiàn)功能,設計了測試用例,主要針對SIMD控制器的基本功能的測試,包含一系列的數(shù)據(jù)和指令初始化、SIMD運行模式數(shù)據(jù)結果的回收等。針對SIMD運行模式主要測試了單行的SIMD運行模式,并依次測試了2行、3行以及4行同時執(zhí)行SIMD運行模式。
該電路資源利用率如圖9所示。
關鍵路徑如圖10所示。
4 總結
本文對時鐘共享多線程處理器結構進行深入研究,采用了有限狀態(tài)機設計并實現(xiàn)了SIMD控制器,并對電路進行了功能驗證和FPGA驗證,工作頻率為316.877 MHz。結果表明,該SIMD控制器電路能夠滿足圖形圖像處理中的需求,電路工作正常并且電路具有良好的可擴展性,實用性強,能夠滿足時鐘共享多線程處理器的要求。
參考文獻
[1] UNGERER T,ROBICB,SILC J.Multithreaded processors[J].Computer Journal,2002,45(1):320-348.
[2] BRUNIE N,COLLANGE S,DIAMOS G.Simultaneous branch and warp interweaving for sustained GPU performance[J].Acm Sigarch Computer Architecture News,2012,40(40):49-60.
[3] SANKARALINGAM K,NAGARAJAN R,LIU H,et al.Exploiting ILP,TLP,and DLP with the polymorphous TRIPS architecture[J].IEEE Micro,2003,31(6):422-433.
[4] EGGERS S J,EMER J S,LEVY H M,et al.Simultaneous multithreading:a platform for next-generation processors[J].IEEE Micro,1997,17(5):12-19.
[5] 張駿,樊曉椏,劉松鶴.多核、多線程處理器的低功耗設計技術研究[J].計算機科學,2007,34(10):301-305.
[6] 黃虎才.多態(tài)陣列處理器的并行計算研究[D].西安:西安郵電大學,2014.
[7] 李濤,楊婷,易學淵,等.螢火蟲2:一種多態(tài)并行機的硬件體系結構[J].計算機工程與科學,2014,36(2):191-200.