文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.11.006
中文引用格式: 劉歡,韓俊剛,李卯良,等. 時(shí)鐘共享多線程處理器SIMD控制器設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,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 引言
隨著并行計(jì)算和集成電路的不斷發(fā)展,如何有效地提高處理器的并行處理性能已經(jīng)成為熱點(diǎn)問(wèn)題。傳統(tǒng)處理器通過(guò)開(kāi)發(fā)指令級(jí)并行(Instruction Level Parallelism,ILP)[1]來(lái)提高處理器的性能,但硬件的復(fù)雜度及功耗等因素影響了處理器的性能。因此設(shè)計(jì)者們紛紛把目光投向更高層次的線程級(jí)并行(Thread Level Parallelism,TLP)[1-3]技術(shù),時(shí)鐘共享多線程處理器就是在這種背景下產(chǎn)生的。多線程這個(gè)概念最先由美國(guó)加州大學(xué)Tullsen等提出的,并提出了SMT[4-5]處理器模型。這種結(jié)構(gòu)通過(guò)資源競(jìng)爭(zhēng)和資源動(dòng)態(tài)共享的方式使所有的處理單元共同活躍,充分提高了資源利用率。本文根據(jù)時(shí)鐘共享多線程處理器的結(jié)構(gòu),在多核處理器[6-7]的基礎(chǔ)上設(shè)計(jì)實(shí)現(xiàn)了一種SIMD控制器,并且對(duì)電路進(jìn)行了功能驗(yàn)證和FPGA驗(yàn)證。
1 整體硬件結(jié)構(gòu)
時(shí)鐘共享多線程處理器是由16個(gè)處理單元(PE)互聯(lián)構(gòu)成的一個(gè)4×4二維陣列,它主要包括前向處理單元(FEP)、存儲(chǔ)管理器(mem_man)、調(diào)度器(Sche)和協(xié)處理器(ACCL)。整體結(jié)構(gòu)如圖1所示。
FEP(前向處理單元)模塊:接收外部CPU下發(fā)的配置信息、初始化指令和數(shù)據(jù)、預(yù)存數(shù)據(jù)加載到buffer_memory中、回收計(jì)算結(jié)果、構(gòu)建整個(gè)陣列進(jìn)行SIMD運(yùn)算等。
Sche(調(diào)度器)模塊:由四個(gè)行控制器(Row Controller,CRi)組成。每一個(gè)行控制器用來(lái)實(shí)現(xiàn)SIMD運(yùn)行模式的構(gòu)建、并將前向單元發(fā)送的初始化指令和數(shù)據(jù)、配置信息,發(fā)送給當(dāng)前行的各個(gè)PE。
mem_man(存儲(chǔ)管理)模塊:由四個(gè)列控制器(Column Controller,CWj)組成。每一個(gè)列控制器用來(lái)預(yù)存數(shù)據(jù)和回收計(jì)算結(jié)果。
ACCL(協(xié)處理器)模塊:每四個(gè)處理單元之間共享使用一個(gè)協(xié)處理器,處理單元可以直接調(diào)用該協(xié)處理器完成特殊函數(shù)運(yùn)算。
2 時(shí)鐘共享多線程處理器SIMD控制器
SIMD控制器是由一個(gè)前向處理單元(FEP)、一個(gè)調(diào)度器(Sche)、一個(gè)存儲(chǔ)管理(mem_man)構(gòu)成,其中mem_man模塊由4個(gè)列控制器組成,sche模塊由4個(gè)行控制器組成,每一列對(duì)應(yīng)一個(gè)列控制器,每一行對(duì)應(yīng)一個(gè)行控制器。SIMD控制器處于整個(gè)時(shí)鐘共享多線程處理器結(jié)構(gòu)的最頂層,控制該4×4陣列的運(yùn)行和調(diào)度處理。SIMD控制器具體實(shí)現(xiàn)功能如下:
(1)執(zhí)行整個(gè)時(shí)鐘共享多線程處理器的初始化,也就是說(shuō)對(duì)各個(gè)基本處理單元的指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)進(jìn)行加載;
(2)為提高整個(gè)時(shí)鐘共享多線程處理器的運(yùn)行效率,可對(duì)基本處理單元所需數(shù)據(jù)和相關(guān)指令進(jìn)行預(yù)存;
(3)在基本處理單元運(yùn)算過(guò)程中,可進(jìn)行動(dòng)態(tài)數(shù)據(jù)加載和讀??;
(4)對(duì)計(jì)算結(jié)果進(jìn)行回收,并實(shí)時(shí)監(jiān)測(cè)基本處理單元的運(yùn)行狀態(tài)。
2.1 SIMD控制器整體結(jié)構(gòu)
根據(jù)時(shí)鐘共享多線程處理器系統(tǒng)整體介紹和該系統(tǒng)具有的基本特征,以及SIMD控制器功能的確定和功能的劃分,可以確定SIMD控制器的整體結(jié)構(gòu),如圖2所示。
圖2中整個(gè)時(shí)鐘共享多線程處理器由PC控制發(fā)送數(shù)據(jù)和回收計(jì)算結(jié)果,通過(guò)PC機(jī)將按照數(shù)據(jù)包格式將數(shù)據(jù)、指令以及控制信息發(fā)送給FEP,F(xiàn)EP通過(guò)解析包頭,產(chǎn)生控制信號(hào),將數(shù)據(jù)或者指令發(fā)給行列控制器進(jìn)而控制PE陣列。
2.2 前向處理單元的設(shè)計(jì)與實(shí)現(xiàn)
前向處理單元主要完成整個(gè)基本陣列處理單元的控制,具體功能有:初始化FEP存儲(chǔ)、控制整個(gè)陣列中PE單元實(shí)現(xiàn)SIMD運(yùn)算、采用廣播的形式初始化行列控制器和配置線程管理器信息、讀取運(yùn)算結(jié)果、查詢(xún)PE執(zhí)行的狀態(tài)等。具體結(jié)構(gòu)如圖3所示。
外部PC將指令和數(shù)據(jù)寫(xiě)入FIFO0,接收控制模塊檢測(cè)FIFO0的fifo0_empty信號(hào)是否有效。當(dāng)fifo0_empty無(wú)效表示FIFO0不為空,此時(shí)接收控制模塊開(kāi)始讀取FIFO0中的數(shù)據(jù),將讀取來(lái)的數(shù)據(jù)包頭進(jìn)行解析,產(chǎn)生相應(yīng)的控制信號(hào),并將數(shù)據(jù)包頭及之后攜帶的數(shù)據(jù)寫(xiě)入FIFO1或FEP指令存儲(chǔ)中。其中寫(xiě)入到FIFO1時(shí)要查看FIFO1的fifo1_almost_full信號(hào)是否有效,也就是FIFO1幾乎滿(mǎn)信號(hào)是否為高,如果為高,則不能寫(xiě)入數(shù)據(jù),并反饋此信息讓外部PC停止發(fā)送數(shù)據(jù);否則,將數(shù)據(jù)寫(xiě)入FIFO1中。
當(dāng)發(fā)送模塊檢測(cè)FIFO1不空,也就是fifo1_empty信號(hào)時(shí)開(kāi)始讀取數(shù)據(jù),并將讀出的數(shù)據(jù)廣播給行列控制器,由行列控制器解析判斷是否接收此數(shù)據(jù)。對(duì)于行控制器,數(shù)據(jù)首先廣播給RC0控制器,如果RC0解析判斷該數(shù)據(jù)不是發(fā)送給該行,則RC0將數(shù)據(jù)發(fā)送給RC1,以此類(lèi)推。
當(dāng)外部PC發(fā)送的是讀取指令或數(shù)據(jù)命令時(shí),也是通過(guò)數(shù)據(jù)包將相關(guān)控制器信息以廣播的形式發(fā)送出去,然后根據(jù)FIFO2的幾乎滿(mǎn)標(biāo)志信號(hào)fifo2_almost_full來(lái)判斷是否將回收的數(shù)據(jù)寫(xiě)入FIFO2中,如果fifo2_almost_full幾乎滿(mǎn)信號(hào)為高,則阻塞;否則,將數(shù)據(jù)寫(xiě)入FIFO2。通過(guò)讀控制模塊來(lái)檢測(cè)FIFO2是否為空,即判斷fifo2_empty信號(hào)是否有效,如果無(wú)效,則將FIFO2的數(shù)據(jù)讀出,寫(xiě)入到FIFO3中,供外部PC讀?。环駝t,阻塞直到讀取操作完成。當(dāng)外部CPU需要讀取前向處理單元存儲(chǔ)或者行控制器中的SIMD指令時(shí),也發(fā)送相應(yīng)的指令從前向處理單元存儲(chǔ)中或者從4個(gè)行控制器中讀取SIMD指令;如果整個(gè)陣列進(jìn)行SIMD運(yùn)算,則發(fā)送SIMD請(qǐng)求給前向處理單元,前向處理單元中的接收模塊檢測(cè)到該請(qǐng)求后,將前向處理單元存儲(chǔ)中的SIMD指令發(fā)送給下一級(jí)的4個(gè)行控制器以完成該SIMD運(yùn)算,最后,發(fā)送一個(gè)請(qǐng)求指令來(lái)結(jié)束SIMD的運(yùn)算模式。
2.2.1 數(shù)據(jù)接收控制模塊的實(shí)現(xiàn)
數(shù)據(jù)接收模塊的功能是:檢測(cè)FIFO0中的空滿(mǎn)信號(hào),如果FIFO0不為空,則讀取該數(shù)據(jù),并對(duì)數(shù)據(jù)包包頭進(jìn)行解析,解析的相關(guān)命令可將SIMD指令寫(xiě)入前向處理單元存儲(chǔ)或者將MIMD指令或者數(shù)據(jù)以及SIMD指令寫(xiě)入FIFO1中,等待數(shù)據(jù)廣播;當(dāng)根據(jù)解析的數(shù)據(jù)包信息從FIFO2中讀取相關(guān)指令或者數(shù)據(jù),將讀取的數(shù)據(jù)寫(xiě)入FIFO3以供外部CPU讀??;如果解析為控制整個(gè)陣列單元來(lái)執(zhí)行SIMD運(yùn)行模式時(shí),則狀態(tài)跳轉(zhuǎn)到SIMD運(yùn)行模式狀態(tài),將整個(gè)基本陣列單元構(gòu)建成SIMD運(yùn)行模式。該前向處理單元的數(shù)據(jù)接收模塊采用狀態(tài)機(jī)實(shí)現(xiàn),狀態(tài)轉(zhuǎn)移圖如圖4所示。
2.2.2 數(shù)據(jù)發(fā)送控制模塊的實(shí)現(xiàn)
數(shù)據(jù)發(fā)送模塊將外部PC發(fā)送的初始化數(shù)據(jù)進(jìn)行下發(fā),其具體實(shí)現(xiàn)功能是檢測(cè)FIFO1的空信號(hào)和幾乎滿(mǎn)信號(hào),如果FIFO1不空而且行和列控制器處于空閑狀態(tài)時(shí),則負(fù)責(zé)將FIFO1中的指令或者數(shù)據(jù)以廣播的形式發(fā)送給4個(gè)列控制器和第一個(gè)行控制器。狀態(tài)轉(zhuǎn)移如圖5所示。
2.3 行控制器設(shè)計(jì)與實(shí)現(xiàn)
行控制器總體結(jié)構(gòu)如圖6所示,由1個(gè)RC_CTRL控制單元、1個(gè)深度為1 K寬度為48 bit的SIMD指令存儲(chǔ)(I-MEM,為RAM)和1個(gè)深度為16寬度為10 bit的索引表組成。組合邏輯電路部分主要負(fù)責(zé)判斷是否為加載給當(dāng)前行控制器的指令/數(shù)據(jù),若不是該行操作,則將指令/數(shù)據(jù)發(fā)送給下一個(gè)行控制器;若是,則將對(duì)應(yīng)指令/數(shù)據(jù)發(fā)送到RC_CTRL模塊進(jìn)行相應(yīng)操作。索引表(INDEX_MEM)如表1所示,為一個(gè)寬度為10深度為16的RAM,主要用于存儲(chǔ)SIMD指令的基址,每一個(gè)基址都對(duì)應(yīng)一段完整的SIMD指令。行控制器的核心部分為RC_CTRL模塊,該模塊狀態(tài)轉(zhuǎn)移圖如圖7所示。
RC_CTRL模塊按照各個(gè)功能點(diǎn)歸納狀態(tài)轉(zhuǎn)移圖,主要包括初始化數(shù)據(jù)和數(shù)據(jù)的回收、SIMD運(yùn)行模式和MIMD運(yùn)行模式的切換等。初始化數(shù)據(jù)和數(shù)據(jù)回收的狀態(tài)轉(zhuǎn)移圖如圖7所示。
2.4 列控制器設(shè)計(jì)與實(shí)現(xiàn)
列控制器主要完成了整個(gè)陣列處理單元共享存儲(chǔ)的數(shù)據(jù)加載、數(shù)據(jù)的動(dòng)態(tài)加載和數(shù)據(jù)回收。前向處理單元采用廣播的形式將指令和數(shù)據(jù)廣播給行、列控制器,當(dāng)列控制器檢測(cè)到是初始化數(shù)據(jù)(包括MIMD數(shù)據(jù)和SIMD數(shù)據(jù))時(shí),則將數(shù)據(jù)存儲(chǔ)到列存儲(chǔ)中;當(dāng)檢測(cè)到是對(duì)列存儲(chǔ)數(shù)據(jù)的讀取操作時(shí),列控制器則將所需數(shù)據(jù)從列存儲(chǔ)中讀取給前向處理單元;當(dāng)列控制器檢測(cè)到是給PE動(dòng)態(tài)讀取數(shù)據(jù)請(qǐng)求時(shí),則將列存儲(chǔ)中對(duì)應(yīng)的數(shù)據(jù)廣播給PE。
列控制器結(jié)構(gòu)框圖如圖8所示,主要由1個(gè)Init_Ctrl(初始化控制器)、1個(gè)Dynamic_Ctrl(動(dòng)態(tài)控制)和一個(gè)DMEM(數(shù)據(jù)存儲(chǔ))3部分組成。Init_Ctrl模塊主要用于對(duì)初始化加載數(shù)據(jù)進(jìn)行控制及完成外部對(duì)計(jì)算結(jié)果數(shù)據(jù)的讀取操作;Dynamic_Ctrl模塊主要用于對(duì)來(lái)自PE動(dòng)態(tài)寫(xiě)入或者讀取列存儲(chǔ)的數(shù)據(jù)進(jìn)行控制;DMEM模塊為一個(gè)寬度為32 bit深度為1 M的RAM。
3 仿真與FPGA驗(yàn)證
本文采用Xilinx公司的ISE工具進(jìn)行電路綜合,F(xiàn)PGA選用Xilinx公司的XC7V2000t-2fhg1761,電路的最高頻率可達(dá)到316.877 MHz。
根據(jù)以上SIMD控制器的主要實(shí)現(xiàn)功能,設(shè)計(jì)了測(cè)試用例,主要針對(duì)SIMD控制器的基本功能的測(cè)試,包含一系列的數(shù)據(jù)和指令初始化、SIMD運(yùn)行模式數(shù)據(jù)結(jié)果的回收等。針對(duì)SIMD運(yùn)行模式主要測(cè)試了單行的SIMD運(yùn)行模式,并依次測(cè)試了2行、3行以及4行同時(shí)執(zhí)行SIMD運(yùn)行模式。
該電路資源利用率如圖9所示。
關(guān)鍵路徑如圖10所示。
4 總結(jié)
本文對(duì)時(shí)鐘共享多線程處理器結(jié)構(gòu)進(jìn)行深入研究,采用了有限狀態(tài)機(jī)設(shè)計(jì)并實(shí)現(xiàn)了SIMD控制器,并對(duì)電路進(jìn)行了功能驗(yàn)證和FPGA驗(yàn)證,工作頻率為316.877 MHz。結(jié)果表明,該SIMD控制器電路能夠滿(mǎn)足圖形圖像處理中的需求,電路工作正常并且電路具有良好的可擴(kuò)展性,實(shí)用性強(qiáng),能夠滿(mǎn)足時(shí)鐘共享多線程處理器的要求。
參考文獻(xiàn)
[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] 張駿,樊曉椏,劉松鶴.多核、多線程處理器的低功耗設(shè)計(jì)技術(shù)研究[J].計(jì)算機(jī)科學(xué),2007,34(10):301-305.
[6] 黃虎才.多態(tài)陣列處理器的并行計(jì)算研究[D].西安:西安郵電大學(xué),2014.
[7] 李濤,楊婷,易學(xué)淵,等.螢火蟲(chóng)2:一種多態(tài)并行機(jī)的硬件體系結(jié)構(gòu)[J].計(jì)算機(jī)工程與科學(xué),2014,36(2):191-200.