蒲 林 ,李 濤 ,易學(xué)淵 ,韓俊剛
(1.西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061;2.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安710061)
圖形圖像處理技術(shù)是信息處理領(lǐng)域中的一項(xiàng)熱門技術(shù),在計(jì)算機(jī)視覺(jué)、氣象信息、地球資源勘測(cè)等領(lǐng)域得到廣泛的應(yīng)用[1]。隨著人們對(duì)圖形圖像信息應(yīng)用需求的擴(kuò)大和計(jì)算機(jī)技術(shù)的飛速發(fā)展,提高處理的速度成為了圖形圖像處理中需要解決的難點(diǎn)之一。并行處理[2]是解決大規(guī)模圖形圖像處理問(wèn)題的有效手段,但由于體積大、功耗高和難以維護(hù)等特點(diǎn),使以多處理系統(tǒng)為代表的很多圖形圖像處理系統(tǒng)難以得到廣泛應(yīng)用[3]。多態(tài)并行處理器實(shí)現(xiàn)了單指令多數(shù)據(jù)(SIMD)和多指令多數(shù)據(jù)(MIMD)計(jì)算模式的混合,其結(jié)構(gòu)簡(jiǎn)單,功耗低,同時(shí)在陣列機(jī)上分區(qū)并發(fā)實(shí)現(xiàn)該兩種模式,并且能夠在兩種模式間實(shí)現(xiàn)一步轉(zhuǎn)換[4-5]。其中SIMD控制器能夠針對(duì)圖形圖像處理算法開(kāi)發(fā)出更多的數(shù)據(jù)并行性[6],提高圖形圖像的處理性能。
本文設(shè)計(jì)了一種新型的多態(tài)并行處理器中的SIMD控制器。該多態(tài)并行處理器是一個(gè)陣列機(jī),由多個(gè)處理器簇組成,每個(gè)簇是由處理單元(PE)組成的二維陣列,是一種較常見(jiàn)的陣列結(jié)構(gòu),這種簇結(jié)構(gòu)可以分層次構(gòu)成。如圖1所示,一個(gè)基本簇是由 16個(gè)PE組成的 4×4陣列,處理單元通過(guò)近鄰互聯(lián)組成二維陣列。每一行有行控制器(RC),每一列有列控制器(CC),整個(gè)簇由簇控制器進(jìn)行控制。
多態(tài)并行處理器包含1個(gè)前端處理器、4個(gè)F簇、4個(gè)S簇、一些專用硬件加速器、一個(gè)帶有緩存的片上SRAM存儲(chǔ)和內(nèi)部互聯(lián)通道,如圖2所示。F簇處理單元包含浮點(diǎn)處理器和定點(diǎn)處理器,S簇只包含定點(diǎn)處理器。
如圖3所示,單個(gè)處理單元由帶有路由器(RU)的ALU、數(shù)據(jù)存儲(chǔ)(D-mem)、指令存儲(chǔ)(I-mem)、鄰接共享存儲(chǔ)和SIMD接口控制器(ICTL)構(gòu)成。
圖1 基本簇結(jié)構(gòu)
圖2 多態(tài)并行處理器整體結(jié)構(gòu)
圖3 處理器結(jié)構(gòu)
在多態(tài)并行處理器中,各PE的數(shù)據(jù)和程序的加載均由SIMD控制器控制,SIMD控制器設(shè)計(jì)的好壞直接影響到各PE的執(zhí)行效率及并行度。
SIMD控制器主要由1個(gè)簇控制器模塊、4個(gè)行控制器模塊和4個(gè)列控制器模塊構(gòu)成,如圖1所示。各模塊功能:簇控制器模塊主要完成整個(gè)簇中處理單元的控制,包括協(xié)調(diào)程序和數(shù)據(jù)的加載以及控制整個(gè)簇實(shí)現(xiàn)SIMD計(jì)算;行控制器模塊主要功能是將一行的PE重構(gòu)成SIMD模式,進(jìn)行數(shù)據(jù)級(jí)并行計(jì)算以及初始化SIMD指令;列控制器模塊主要完成對(duì)簇內(nèi)共享存儲(chǔ)和互聯(lián)數(shù)據(jù)通道的控制。
各模塊間以包進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)包格式如表1所示,其中包頭格式如表2所示。
表1 數(shù)據(jù)包格式
表2 包頭格式
數(shù)據(jù)包包頭[31]位表示讀/寫操作(1=寫/0=讀),[30]位表示指令/數(shù)據(jù)(1=指令/0=數(shù)據(jù)),[29:27]位為傳輸?shù)臄?shù)據(jù)大小,一次最多可傳8個(gè)字的數(shù)據(jù);[26:0]位表示目標(biāo)地址,可在128 MB范圍內(nèi)尋址。PE、行、列控制器統(tǒng)一編址,[14:10]表示 PE/行控制器號(hào),當(dāng)[26:15]全為 0且[14]位為 1時(shí)表示對(duì) PE進(jìn)行操作,[13:10]則為 PE編號(hào),[9:0]為PE內(nèi)存儲(chǔ)地址。當(dāng)[26:14]全為0時(shí),表示對(duì)行控制器進(jìn)行操作,[13:12]為行控制器編號(hào),此時(shí)[11:0]為行控制器內(nèi)存儲(chǔ)地址。當(dāng)[26:15]不全為0時(shí),表示對(duì)列存儲(chǔ)器進(jìn)行操作。
用于SIMD操作的專用指令有CALLC和RETC,其數(shù)據(jù)包格式分別如表3、表4所示。
表3 CALLC數(shù)據(jù)包格式
表4 RETC數(shù)據(jù)包格式
表3數(shù)據(jù)包為兩個(gè) 32 bit,tID為目標(biāo)線程 ID號(hào),Addr為目標(biāo)地址,Ctrl為目標(biāo)行控制器號(hào),mask為掩碼,rID為源線程ID號(hào),rPE為源PE號(hào),rAddr為源地址。當(dāng)CALLC結(jié)束后,需要給發(fā)送CALLC指令的PE發(fā)去一個(gè)如表4所示的RETC數(shù)據(jù)包。
簇控制器的設(shè)計(jì)分為兩部分:一是初始化程序和數(shù)據(jù),二是動(dòng)態(tài)讀取程序和數(shù)據(jù),如圖4所示。
圖4 簇控制器模塊狀態(tài)機(jī)
狀態(tài)跳轉(zhuǎn)說(shuō)明如下:
(1)IDLE:空閑狀態(tài)。接收到初始化請(qǐng)求后,跳轉(zhuǎn)至INIT_DATA狀態(tài),開(kāi)始加載數(shù)據(jù)/指令。
(2)INIT_DATA:初始化指令/數(shù)據(jù)到簇緩存狀態(tài)。簇緩存大小有限,指令/數(shù)據(jù)的加載需分批進(jìn)行,待當(dāng)前批的指令/數(shù)據(jù)加載完成后,跳轉(zhuǎn)到SEND_DATA狀態(tài)。
(3)SEND_DATA:發(fā)送指令/數(shù)據(jù)狀態(tài)。指令/數(shù)據(jù)加載完成后,簇控制器將簇緩存中的指令/數(shù)據(jù)廣播給行、列控制器,若檢測(cè)到數(shù)據(jù)包頭信息為寫操作,則發(fā)送完相應(yīng)指令/數(shù)據(jù)后,跳回IDLE狀態(tài);若檢測(cè)到為讀操作,則跳轉(zhuǎn)至RD_DATA。
(4)RD_DATA:讀數(shù)據(jù)狀態(tài)。根據(jù)包頭所含數(shù)據(jù)大小信息,待接收完列控制器發(fā)送的所需數(shù)據(jù)后,跳轉(zhuǎn)至IDLE狀態(tài)。
行控制器分為兩個(gè)部分進(jìn)行設(shè)計(jì):一是初始化SIMD指令;二是將行控制器所在行的PE重構(gòu)成SIMD模式進(jìn)行數(shù)據(jù)并行計(jì)算,如圖5所示。
圖5 行控制器模塊狀態(tài)機(jī)
各狀態(tài)說(shuō)明如下:
(1)IDLE:空閑狀態(tài)。若檢測(cè)到初始化使能及數(shù)據(jù)有效信號(hào),則開(kāi)始解析數(shù)據(jù)包,狀態(tài)跳轉(zhuǎn)到RECV_INSTR_PACK;若檢測(cè)到路由器請(qǐng)求信號(hào),則跳轉(zhuǎn)到RECV_RT狀態(tài),同時(shí)給路由器一個(gè)接收數(shù)據(jù)包響應(yīng)信號(hào)。
(2)RECV_INSTR_PACK:接收指令包狀態(tài)。若數(shù)據(jù)經(jīng)檢測(cè)不是加載給本控制器,則跳回至IDLE狀態(tài);若是加載給本行控制器且是寫操作,則跳轉(zhuǎn)到INIT狀態(tài)。
(3)INIT:指令初始化狀態(tài)。指令加載完成后,跳轉(zhuǎn)回IDLE狀態(tài)。
(4)RECV_RT:接收路由器包狀態(tài)。若檢測(cè)到CALLC指令,則給行控制器所在行的PE發(fā)送請(qǐng)求,同時(shí)狀態(tài)跳轉(zhuǎn)到WAIT;若路由器傳來(lái)的數(shù)據(jù)包有誤,則跳回IDLE狀態(tài)。
(5)WAIT:等待狀態(tài)。給行控制器所在行的4個(gè)PE發(fā)送SIMD請(qǐng)求信號(hào)后,PE停止取址,待流水線中的指令排空且4個(gè)PE均返回了響應(yīng)信號(hào)后,跳轉(zhuǎn)至SEND_INSTR狀態(tài)。
(6)SEND_INSTR:發(fā)送指令狀態(tài)。將從解析出的起始地址開(kāi)始的指令同時(shí)發(fā)送給所在行的4個(gè)PE以執(zhí)行SIMD運(yùn)行模式,待檢測(cè)到RETC指令后,停止發(fā)送指令,給路由器發(fā)送請(qǐng)求信號(hào),同時(shí)給4個(gè)PE一個(gè)結(jié)束信號(hào)(PE則繼續(xù)之前的MIMD取址),此時(shí)跳轉(zhuǎn)到SEND_RT狀態(tài)。
(7)SEND_RT:發(fā)送路由器包狀態(tài)。接收到路由器響應(yīng)信號(hào)后,行控制器發(fā)送數(shù)據(jù)包,同時(shí)跳轉(zhuǎn)回IDLE狀態(tài)。
列控制器模塊的設(shè)計(jì)分為4個(gè)部分:(1)初始化程序/數(shù)據(jù)的加載;(2)簇控制器對(duì)列控制器存儲(chǔ)中計(jì)算結(jié)果的讀?。?3)將 PE計(jì)算結(jié)果寫入到列存儲(chǔ)中;(4)從列存儲(chǔ)中動(dòng)態(tài)讀取數(shù)據(jù)。狀態(tài)機(jī)如圖6所示。
圖6 列控制器模塊狀態(tài)機(jī)
各狀態(tài)說(shuō)明如下:
(1)IDLE:空閑狀態(tài)。若檢測(cè)到廣播的初始化使能及數(shù)據(jù)有效信號(hào),則開(kāi)始解析數(shù)據(jù)包,同時(shí)跳轉(zhuǎn)到RECV_PACK狀態(tài);若檢測(cè)到路由器請(qǐng)求信號(hào),則跳轉(zhuǎn)到RECV_RT_PACK狀態(tài)。
(2)RECV_PACK:接收初始化數(shù)據(jù)包結(jié)束狀態(tài)。若檢測(cè)到不是發(fā)送給本列控制器的數(shù)據(jù),則下一狀態(tài)跳轉(zhuǎn)回IDLE,繼續(xù)等待下一個(gè)廣播包頭;否則,若操作類為寫,則狀態(tài)跳轉(zhuǎn)到INIT_DATA,若為讀,則跳轉(zhuǎn)到 RD_DATA狀態(tài)。
(3)INIT_DATA:初始化數(shù)據(jù)狀態(tài)。將初始化數(shù)據(jù)廣播給對(duì)應(yīng)列存儲(chǔ)和4個(gè)PE,待初始化數(shù)據(jù)完成,跳回IDLE狀態(tài)。
(4)RD_DATA:讀數(shù)據(jù)狀態(tài)。根據(jù)包頭中信息,簇控制器從列存儲(chǔ)讀取數(shù)據(jù),待數(shù)據(jù)讀取完成,跳回IDLE狀態(tài)。
(5)RECV_RT_PACK:接收路由器包頭狀態(tài)。開(kāi)始接收由路由器傳來(lái)的數(shù)據(jù)包頭,此時(shí)有兩種不同的數(shù)據(jù)包格式,一種用于動(dòng)態(tài)讀取數(shù)據(jù)(MVF指令),另一種用于將數(shù)據(jù)寫入列存儲(chǔ)(MVT指令)。若檢測(cè)到是MVT指令,則跳轉(zhuǎn)到RECV_DATA狀態(tài);若檢測(cè)到是MVF指令,則跳轉(zhuǎn)到WAIT_ACK狀態(tài)。
(6)RECV_DATA:將PE計(jì)算結(jié)果寫入列存儲(chǔ)。數(shù)據(jù)寫入完成后,跳轉(zhuǎn)到IDLE狀態(tài)。
(7)WAIT_ACK:等待路由器響應(yīng)狀態(tài)。請(qǐng)求使用路由器傳輸數(shù)據(jù)后,必須等待路由器空閑才能得到響應(yīng),等到響應(yīng)信號(hào)后跳轉(zhuǎn)到SEND_DATA狀態(tài)。
(8)SEND_DATA:發(fā)送數(shù)據(jù)狀態(tài)。根據(jù)數(shù)據(jù)包頭中包含的數(shù)據(jù)起始地址和大小動(dòng)態(tài)讀取列存儲(chǔ)內(nèi)數(shù)據(jù),當(dāng)請(qǐng)求的數(shù)據(jù)讀取完成后跳轉(zhuǎn)到IDLE狀態(tài)。
本文采用狀態(tài)機(jī)設(shè)計(jì)和實(shí)現(xiàn)了SIMD控制器,并對(duì)電路進(jìn)行了功能驗(yàn)證與DC綜合以及FPGA驗(yàn)證。結(jié)果表明,SIMD控制器電路工作正常且電路具有良好的可擴(kuò)展性,實(shí)用性強(qiáng),能夠滿足多態(tài)并行處理器的要求。
[1]李勇.一種SIMD多DSP數(shù)字圖像處理系統(tǒng)研究與設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2007,33(11):71-73.
[2]BOYD C.Data parallel computing[J].ACM Queue,2008,6(2):30-39.
[3]李強(qiáng).32位圖像向量處理器關(guān)鍵技術(shù)研究與設(shè)計(jì)[D].大連:大連理工大學(xué),2009.
[4]李濤.面向圖形和圖像處理的輕核陣列機(jī)結(jié)構(gòu)[J].西安郵電學(xué)院學(xué)報(bào),2012,17(3):41-47.
[5]Li Tao.A polymorphic array architecture for graphics and image processing[C].2012 Fifth International Symposium on PAAP,2012:242-249.
[6]MAROWKA A,GAN R.Back to thin-core massively parallel processors[J].IEEE Computer,2011,44(12):49-54.