潘風(fēng)蕊,李 濤,邢立冬,張好聰,吳冠中
1.西安郵電大學(xué) 電子工程學(xué)院,西安710121
2.西安郵電大學(xué) 計(jì)算機(jī)學(xué)院,西安710121
近年來,計(jì)算機(jī)視覺(computer vision,CV)在深度學(xué)習(xí)領(lǐng)域的應(yīng)用迅速發(fā)展,圖像處理作為CV中比較活躍的一個(gè)分支,廣泛應(yīng)用在醫(yī)療衛(wèi)生、安檢刑偵、圖像檢索與分析、增強(qiáng)現(xiàn)實(shí)等領(lǐng)域中。而CV領(lǐng)域更新變化飛快,這就要求圖像處理具有很高的靈活性、實(shí)時(shí)性和精確性。傳統(tǒng)的硬件很難滿足可編程性、高性能和低功耗的要求??删幊碳夹g(shù)的出現(xiàn)使得硬件變得可“編譯”,能在嵌入式系統(tǒng)上完成多種多樣的新任務(wù)。并行計(jì)算方式的出現(xiàn)使得硬件介質(zhì)可以提供更加強(qiáng)大的計(jì)算能力和密度,大幅提高了芯片系統(tǒng)的總體性能,實(shí)現(xiàn)片上超級(jí)計(jì)算。業(yè)界典型的兩種并行可編程模型分布式共享內(nèi)存MPI(multi-point interface)和集中式共享內(nèi)存OpenMP,與當(dāng)前GPU 多核、眾核架構(gòu)相比,形式過于單一??删幊痰膶S弥噶罴幚砥骺梢约骖櫣?、性能和靈活性,一種專為圖形圖像處理而設(shè)計(jì)的新型多態(tài)陣列處理器應(yīng)運(yùn)而生,其不但處理性能在一定程度上接近于ASIC(application specific integrated circuit),而且具有靈活的可編程性,它能夠?qū)⒕€程并行、數(shù)據(jù)并行、指令并行和操作并行融合到一個(gè)單一的陣列結(jié)構(gòu)中。對(duì)于圖像計(jì)算,ASIP(application specific instruction processor)是一種可行的硬件設(shè)計(jì)方法,基于ASIP 體系結(jié)構(gòu),本文提出了一種面向計(jì)算機(jī)視覺底層任務(wù)加速的可編程并行處理器。
首先,本文研究了各種拓?fù)涮匦詫?duì)互聯(lián)網(wǎng)絡(luò)傳輸性能的影響,分析了一類基礎(chǔ)網(wǎng)絡(luò)的拓?fù)涮匦?,選擇了一種更加靈活的新型網(wǎng)絡(luò)結(jié)構(gòu)——層次交叉互聯(lián)網(wǎng)絡(luò)(hierarchically cross-connected mesh+,HCCM+),可以根據(jù)不同應(yīng)用的網(wǎng)絡(luò)流量重新配置為Mesh、HCCM 或HCCM-網(wǎng)絡(luò),降低整個(gè)系統(tǒng)的功耗。其次,以HCCM+的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)為基礎(chǔ),設(shè)計(jì)實(shí)現(xiàn)了一種可編程的OpenVX并行處理器,使用有限的硬件資源,以可編程的方式對(duì)OpenVX 1.3 標(biāo)準(zhǔn)中核心函數(shù)進(jìn)行映射,實(shí)現(xiàn)通用的圖像處理。
2019年Khronos發(fā)布的OpenVX 1.3標(biāo)準(zhǔn)中,核心圖像處理函數(shù)包括了基本像素點(diǎn)處理、全局處理、局部處理、特征提取四大類。OpenVX 標(biāo)準(zhǔn)是按照新興的圖計(jì)算方式指定的,其基本加速原理是根據(jù)需求有目的性地對(duì)圖像矩陣進(jìn)行一定的操作。如圖1 所示,OpenVX基本圖像處理核函數(shù)可以看作整個(gè)處理流程中的一個(gè)節(jié)點(diǎn)(node)。對(duì)于圖像處理流程往往是數(shù)據(jù)從源Node 流向目標(biāo)Node,Node 與Node 之間形成一定的有向無環(huán)圖(graph)。開發(fā)者可以根據(jù)需要將這些基本的Node連成Graph,完成對(duì)圖像的操作。
圖1 OpenVX圖計(jì)算模型Fig. 1 OpenVX graph calculation model
OpenVX 作為計(jì)算機(jī)視覺一個(gè)標(biāo)準(zhǔn)化的功能框架,接口統(tǒng)一規(guī)范,具有良好的移植性,可以直接被應(yīng)用程序使用;也可以作為高級(jí)視覺的加速層、框架、引擎或平臺(tái)API,被諸多芯片企業(yè)(如NVIDIA、AMD、Intel)采用,具有廣泛的應(yīng)用前景。但專門為OpenVX 實(shí)現(xiàn)的硬件芯片十分匱乏。本文的工作屬于比較早涉及此標(biāo)準(zhǔn)的硬件設(shè)計(jì)之一,所提出的架構(gòu)適合圖計(jì)算和數(shù)據(jù)并行計(jì)算,實(shí)現(xiàn)可編程的加速處理,最大限度地提高硬件功能和性能的可移植性。
OpenVX 并行處理器是利用有限的硬件資源實(shí)現(xiàn)OpenVX核心函數(shù),圖像處理往往是密集且重復(fù)的操作,因此除了高速計(jì)算之外,提高硬件的通用性,盡可能地使資源共享、降低功耗也成為并行處理器設(shè)計(jì)的目的。
互連網(wǎng)絡(luò)是并行處理系統(tǒng)的重要組成部分,對(duì)于數(shù)據(jù)信息傳遞的并行計(jì)算,互連網(wǎng)絡(luò)對(duì)系統(tǒng)的整體性能尤為重要,是本文所提出的OpenVX并行處理器的主干。由于簡單的拓?fù)浣Y(jié)構(gòu)易于在超大規(guī)模集成電路(very large scale integration,VLSI)中實(shí)現(xiàn)和分析,互連網(wǎng)絡(luò)宜采用簡單的拓?fù)浣Y(jié)構(gòu),拓?fù)涮匦园ǎ?/p>
(1)邊數(shù)(edge number):網(wǎng)絡(luò)鏈路數(shù),影響互聯(lián)網(wǎng)絡(luò)的容量及靈活性。
(2)直徑(diameter):任意兩個(gè)節(jié)點(diǎn)之間的最短路徑中的路徑長度。直徑與通信時(shí)間成正比,直徑越長,所需通信時(shí)間越長。
(3)對(duì)分寬度(bisection bandwidth):網(wǎng)絡(luò)被分成節(jié)點(diǎn)數(shù)相等的兩部分,切口處最小邊數(shù)為對(duì)分寬度,該參數(shù)主要反映了整個(gè)網(wǎng)絡(luò)的最大流量。
互聯(lián)網(wǎng)絡(luò)的設(shè)計(jì)要兼顧上述3種拓?fù)涮匦?,使得整體結(jié)構(gòu)的性能在一定程度上有所提高。最基本的拓?fù)浣Y(jié)構(gòu)是Mesh型、XMesh型,本文在基本結(jié)構(gòu)的基礎(chǔ)上,選擇了HCCM結(jié)構(gòu),并對(duì)HCCM進(jìn)行擴(kuò)展得到HCCM-、HCCM+兩種拓?fù)浣Y(jié)構(gòu),如圖2所示。
圖2 互連網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)Fig. 2 Interconnection network topology
根據(jù)遞歸特性、循環(huán)和邊界條件,推導(dǎo)計(jì)算出4種結(jié)構(gòu)的拓?fù)涮匦怨?,如?所示。
表1 互聯(lián)網(wǎng)絡(luò)拓?fù)湫阅鼙容^Table 1 Comparison of network topology performance
通過對(duì)比四種結(jié)構(gòu)的拓?fù)涮匦裕琀CCM+的直徑小于Mesh 和HCCM,且比Mesh、HCCM 和HCCM-具有更寬的對(duì)分寬度。在理論上它可以比其他結(jié)構(gòu)承載更大的傳輸量,性能優(yōu)于其他結(jié)構(gòu)。因此本文采用HCCM+作為并行處理器的基礎(chǔ)網(wǎng)絡(luò)。
OpenVX 并行處理器采用了性能較為突出的HCCM+網(wǎng)絡(luò),包含了4×4 個(gè)處理單元(processing element,PE)、路由(RU)及全局控制(global control),整體結(jié)構(gòu)如圖3所示。在開始計(jì)算前,全局控制器接收微控制器(micro control unit,MCU)發(fā)送的微指令,根據(jù)指令中的PE標(biāo)識(shí)號(hào)(ID),將配置及數(shù)據(jù)信息經(jīng)配置開關(guān)模塊(cfg&switch)下發(fā)至相應(yīng)的PE 中。PE 執(zhí)行任務(wù)時(shí)以微指令信息為單位,可以循環(huán)執(zhí)行微指令攜帶的操作信息,中間結(jié)果可暫存到PE 內(nèi)部緩存中,由RU控制選通PE之間的數(shù)據(jù)鏈路,完成數(shù)據(jù)的傳輸。MCU 下發(fā)的微指令可實(shí)現(xiàn)多個(gè)PE 的任務(wù)切換,實(shí)現(xiàn)整體可配置。
圖3 OpenVX并行處理器整體架構(gòu)Fig. 3 OpenVX parallel processor architecture
每個(gè)PE 中包含了8 個(gè)ALU、2 個(gè)定點(diǎn)乘法器(MUL)、2 個(gè)浮點(diǎn)乘法器(FMUL)、1 個(gè)定點(diǎn)除法器(DIV)、1 個(gè)浮點(diǎn)除法器(FDIV)、1 個(gè)內(nèi)部交叉開關(guān)(Crossbar)、5 個(gè)32×16 的寄存器堆(regfile)以及寄存器堆的訪存模塊(RD_CTRL,LOAD_PIXEL),整體結(jié)構(gòu)如圖4所示。
圖4 PE整體結(jié)構(gòu)Fig. 4 PE architecture
(1)ALU負(fù)責(zé)執(zhí)行add、sub、and、or、xor、sll、srl等指令。當(dāng)ALU 執(zhí)行add 指令時(shí),a 輸入端和b 輸入端有三個(gè)數(shù)據(jù)源:①指定寄存器堆內(nèi)的數(shù)據(jù);②譯碼單元的立即數(shù);③計(jì)算單元的輸出數(shù)據(jù)。Crossbar從三個(gè)數(shù)據(jù)源中選擇一個(gè)送至ALU 的輸入端,輸出結(jié)果由分配器派遣至下一個(gè)指定的PE,進(jìn)行新的處理。其中第三個(gè)數(shù)據(jù)源的選擇,是為了處理比較復(fù)雜的函數(shù)如Canny邊緣檢測、Harris角點(diǎn)檢測等,中間結(jié)果寫回,進(jìn)行新的配置,繼續(xù)計(jì)算至最終結(jié)果的輸出。
(2)PE 內(nèi)部的Crossbar 設(shè)計(jì)為60×32 的開關(guān)矩陣(switch matrix)、60個(gè)輸入、32個(gè)輸出。通過配置譯碼模塊(configer decode)將選通信號(hào)發(fā)送給分配器和選擇器,ALU輸入操作數(shù)可以有選擇性地連接寄存器堆或ALU 的計(jì)算結(jié)果。如圖5 所示,以ALU0 為例,ALU0 的兩個(gè)操作數(shù)是多路選擇器的輸出,ALU0 計(jì)算結(jié)果(Mid_out)通過分配器輸出。輸入、輸出數(shù)據(jù)流向選擇取決于譯碼模塊的配置指令。將多個(gè)計(jì)算單元的輸入、輸出數(shù)據(jù)通路進(jìn)行互聯(lián),組成開關(guān)矩陣。
圖5 ALU0 I/O數(shù)據(jù)通路Fig. 5 ALU0 I/O data path
(3)寄存器堆訪存模塊包括了RD_CTRL 和LOAD_PIXEL。RD_CTRL通過AXI總線訪問DDR,采用突發(fā)讀寫的模式,將像素?cái)?shù)據(jù)加載至寄存器堆中,減少了對(duì)DDR 訪問次數(shù)。LOAD_PIXEL 訪問寄存器堆,將像素?cái)?shù)據(jù)加載至Crossbar 的數(shù)據(jù)端口,對(duì)于像素點(diǎn)操作和模板類操作的函數(shù),由譯碼模塊發(fā)送的操作類型信號(hào)(operation_type)配置不同的加載方式。當(dāng)LOAD_PIXEL模塊訪問至寄存器堆的中間或最大地址時(shí),會(huì)向RD_CTRL 發(fā)送Half_empty 信號(hào),RD_CTRL 繼續(xù)訪問DDR,形成一個(gè)動(dòng)態(tài)加載和動(dòng)態(tài)取數(shù)的過程。
全局控制(global control)負(fù)責(zé)控制各個(gè)模塊之間以及模塊內(nèi)部的數(shù)據(jù)交互、數(shù)據(jù)流向及數(shù)據(jù)選擇。圖6是對(duì)一個(gè)PE進(jìn)行控制的電路設(shè)計(jì)。
圖6 全局控制電路Fig. 6 Global control circuit
MCU 負(fù)責(zé)發(fā)送Node 類型,開始進(jìn)行圖像處理。RD_INST 向INST_MEM 發(fā)送請(qǐng)求,讀取微指令。派遣模塊(dispatch)負(fù)責(zé)將微指令派遣至相應(yīng)PE 的譯碼單元(decode)進(jìn)行解析。譯碼單元將地址信息(address)發(fā)送至寄存器堆(regfile)的地址端,將配置信息(cfg_inst)順序?qū)懭氲介_關(guān)矩陣(switch matrix)的配置寄存器(Cfg_inst)中,進(jìn)行數(shù)據(jù)通路的選擇,像素?cái)?shù)據(jù)流向?qū)?yīng)的ALU進(jìn)行計(jì)算。ALU的輸出可作為中間結(jié)果(Mid_results)返回,也可經(jīng)RU 直接輸出至下一個(gè)PE對(duì)應(yīng)的緩存中。
PE 之間數(shù)據(jù)路由受全局控制模塊控制,本文路由以XY 路由為基礎(chǔ),并對(duì)其進(jìn)行了一定的改進(jìn),增加了新的判斷狀態(tài),在數(shù)據(jù)從當(dāng)前節(jié)點(diǎn)流向目標(biāo)節(jié)點(diǎn)的過程中增加一條對(duì)角邊。路由結(jié)構(gòu)如圖7 所示,上一級(jí)各個(gè)方向PE 的輸出Edout、Sdout、Wdout、Ndout、ESdout、WNdout 輸入至相應(yīng)的緩存E_buf、S_buf、W_buf、N_buf、ES_buf、WN_buf。Arbiter 模塊采用先來先到的仲裁機(jī)制決定數(shù)據(jù)的傳輸順序。RU模塊根據(jù)規(guī)定的傳輸方向優(yōu)先級(jí)決定數(shù)據(jù)流向,數(shù)據(jù)經(jīng)全互聯(lián)交叉開關(guān)輸入至目的PE。
圖7 路由結(jié)構(gòu)Fig. 7 Route structure
RU 模塊支持一對(duì)一單目標(biāo)傳輸,其中對(duì)角快速通道優(yōu)先級(jí)最高,其次為水平方向的數(shù)據(jù)通路,最后為豎直方向;RU 也支持一對(duì)多目標(biāo)的數(shù)據(jù)扇出,此時(shí)目標(biāo)與目標(biāo)之間優(yōu)先級(jí)相同,對(duì)于某一目標(biāo)通道優(yōu)先級(jí)與一對(duì)一單目標(biāo)傳輸時(shí)優(yōu)先級(jí)相同。譯碼模塊將路由配置信息寫入PE 內(nèi)部路由選擇寄存器中,選通本地PE到目標(biāo)PE的通信路徑,將計(jì)算結(jié)果發(fā)送至目標(biāo)PE,執(zhí)行新任務(wù)。
PE之間主要數(shù)據(jù)通路如圖8所示,假設(shè)當(dāng)前節(jié)點(diǎn)為PE00,目標(biāo)節(jié)點(diǎn)為PE32,則數(shù)據(jù)流向?yàn)椋篜E00→ES_dout→PE11→ES_dout→PE22→S_dout→PE32。
圖8 PE之間數(shù)據(jù)路由Fig. 8 Data routing between PEs
高性能OpenVX并行處理器共有五種指令類型:定點(diǎn)運(yùn)算、浮點(diǎn)運(yùn)算、邏輯運(yùn)算、加載/存儲(chǔ)、特殊指令(控制、存取及停止)。以定點(diǎn)運(yùn)算為例,常規(guī)的指令格式為:
本文指令格式為:
其中,Rd為目的寄存器,提供計(jì)算結(jié)果地址;Ra為源寄存器,提供源操作數(shù)A 地址;Rb 為源寄存器,提供源操作數(shù)B地址。opcode為操作類型,相比于傳統(tǒng)的指令,本文每條指令中有4 個(gè)opcode,一次可控制多個(gè)操作,使得更多運(yùn)算單元能夠同時(shí)工作,增大了操作的并行度,提高了像素的吞吐率。
為了減少數(shù)據(jù)通路,ALU中將加法和移位合并,同時(shí)包含了與、或、非以及異或等布爾運(yùn)算。例如局部圖像處理,模板總是固定的常系數(shù),目標(biāo)中心像素由常系數(shù)與窗口內(nèi)的像素進(jìn)行乘加得到。而OpenVX并行處理器中只需要配置ALU執(zhí)行ADD操作即可,耗費(fèi)一個(gè)時(shí)鐘周期就可完成4組像素的乘加操作。
同時(shí)在用匯編指令實(shí)現(xiàn)核心函數(shù)時(shí),可以合理地、自由地調(diào)整配置指令的順序,盡量避免相鄰指令間數(shù)據(jù)傳遞依賴性,減小整個(gè)程序的執(zhí)行時(shí)間。
傳統(tǒng)運(yùn)算單元中只有一個(gè)ALU,合理地增加PE中ALU數(shù)目,可以減少流水停滯時(shí)間,增大像素吞吐率,計(jì)算速度快。
為減少PE通過AXI總線訪問DDR的次數(shù),在PE內(nèi)部設(shè)置了5個(gè)深度為16,寬度為32 bit寄存器堆,用于快速存取原像素?cái)?shù)據(jù)及中間計(jì)算結(jié)果。PE之間傳遞數(shù)據(jù)直接通過訪問鄰接共享存儲(chǔ),實(shí)現(xiàn)數(shù)據(jù)的傳遞復(fù)用,只有最后一個(gè)PE 的計(jì)算結(jié)果才寫回DDR,用于最終的顯示。
本文所采用的HCCM+中,嵌入了Mesh、HCCM和HCCM-,可以根據(jù)不同應(yīng)用的網(wǎng)絡(luò)流量重新配置為Mesh 型、HCCM 型或HCCM-型結(jié)構(gòu)。對(duì)于流量較大的應(yīng)用,可以使用HCCM+所有邊緣。對(duì)于中等級(jí)別的流量,可以關(guān)閉一些邊緣以形成HCCM網(wǎng)絡(luò),這有助于節(jié)省功耗。對(duì)于大多數(shù)短距離輕型通信,可以關(guān)閉更多的邊緣來形成HCCM-網(wǎng)絡(luò),進(jìn)一步降低功耗且更加靈活。
為了適應(yīng)系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu),本文路由在XY路由算法的基礎(chǔ)上,增加了對(duì)角傳輸路徑。這種改進(jìn)不僅為數(shù)據(jù)到達(dá)目標(biāo)節(jié)點(diǎn)提供了最佳傳輸路徑,而且增大了單節(jié)點(diǎn)的數(shù)據(jù)扇出,可以適應(yīng)復(fù)雜度更高的Graph,使更多的PE 可以交互,延長PE 數(shù)據(jù)傳輸鏈路,提高PE單元的復(fù)用率。同時(shí)路由中采用結(jié)構(gòu)簡單的全互聯(lián)交叉開關(guān),傳輸延遲低,速度快,可實(shí)現(xiàn)數(shù)據(jù)并行傳輸。
并行處理器的流處理類似于FPGA(field programmable gate array)或ASIC 的流水線,每個(gè)運(yùn)算單元處理的顆粒粗細(xì)程度由MCU進(jìn)行配置調(diào)整,宏觀上實(shí)現(xiàn)流水處理。
數(shù)據(jù)并行計(jì)算模式是對(duì)圖像分塊處理,將圖像分配至不同的處理單元,配置相同的指令,對(duì)不同的圖像數(shù)據(jù)進(jìn)行相同的操作,實(shí)現(xiàn)數(shù)據(jù)級(jí)并行操作。針對(duì)該模式,選取基本的核心函數(shù)在并行處理器上進(jìn)行映射,多個(gè)處理單元同時(shí)執(zhí)行同一種操作。如圖9 所示,將Sobel 函數(shù)在并行處理器上以數(shù)據(jù)并行處理的模式進(jìn)行映射。圖10為數(shù)據(jù)并行處理模式下圖像分塊方式,PE 調(diào)度的個(gè)數(shù)與圖像分塊的個(gè)數(shù)相關(guān)。在每個(gè)PE內(nèi)部,針對(duì)核心函數(shù)的算法,對(duì)基本算數(shù)邏輯操作流水細(xì)分,按需分配,微觀上實(shí)現(xiàn)細(xì)粒度并行運(yùn)算。
圖9 數(shù)據(jù)并行計(jì)算模式映射Fig. 9 Data parallel computing pattern mapping
圖10 數(shù)據(jù)并行計(jì)算模式下圖像分塊Fig. 10 Image segmentation in data parallel computing mode
流水線處理是將復(fù)雜的程序分解為數(shù)個(gè)簡單的操作,分配到不同的處理單元上,處理單元之間可通過相鄰的數(shù)據(jù)通路進(jìn)行數(shù)據(jù)傳遞,整體實(shí)現(xiàn)流水處理。相鄰處理單元之間指令獨(dú)立,使本結(jié)構(gòu)非常適合流水線處理的運(yùn)行方式。針對(duì)該模式,選取均值濾波(box filter)、通道合并(channel combine)、色系轉(zhuǎn)換(color convert)、圖像膨脹(image dilate)和圖像腐蝕(image erode),構(gòu)造形態(tài)學(xué)濾波的Graph計(jì)算模型,執(zhí)行流程如圖11 所示。每個(gè)基本函數(shù)為一個(gè)Node,將該執(zhí)行流程映射到并行處理器上,由于通道合并和通道提取比較簡單,將其與均值濾波合并到一起,在結(jié)構(gòu)映射中并未體現(xiàn),映射結(jié)果如圖12所示。
圖11 形態(tài)學(xué)濾波執(zhí)行流程Fig. 11 Morphological filtering execution flow
圖12 流水線處理模式映射Fig. 12 Pipeline processing pattern mapping
如圖13 所示是形態(tài)學(xué)濾波數(shù)據(jù)分塊分配方式,將圖像數(shù)據(jù)分成四塊,其中陰影部分為圖像分塊后的邊界。常見的邊界處理方法是邊界復(fù)制和邊界填零。MCU 控制加載圖像像素?cái)?shù)據(jù)時(shí),發(fā)送兩次邊緣像素的讀取指令,實(shí)現(xiàn)對(duì)邊界像素進(jìn)行復(fù)制。第一塊圖像數(shù)據(jù)經(jīng)過P00、P01、P02、P03 所構(gòu)成的運(yùn)算單元鏈(流水線)分任務(wù)進(jìn)行處理。實(shí)際上,形態(tài)學(xué)濾波是由多流水線并行處理實(shí)現(xiàn)的,執(zhí)行不同任務(wù)的PE實(shí)現(xiàn)流水線處理,執(zhí)行同一任務(wù)的PE實(shí)現(xiàn)數(shù)據(jù)并行處理,宏觀上實(shí)現(xiàn)粗粒度并行運(yùn)算。
圖13 形態(tài)學(xué)濾波數(shù)據(jù)分塊Fig. 13 Morphological filtering data segmentation
對(duì)圖像處理硬件系統(tǒng)設(shè)計(jì)一個(gè)完整穩(wěn)定的驗(yàn)證系統(tǒng)也是至關(guān)重要的,本設(shè)計(jì)基于VS2015的MFC仿真測試平臺(tái),如圖14 所示。VS 平臺(tái)和FPGA 平臺(tái)共享輸入源圖像數(shù)據(jù),經(jīng)過相同的算法,將最終圖像處理的結(jié)果打印至文本中??梢灾苯哟蜷_文本查看結(jié)果,也可以對(duì)軟件算法處理結(jié)果與FPGA的處理結(jié)果進(jìn)行逐像素對(duì)比驗(yàn)證,并輸出兩者的比對(duì)結(jié)果。
圖14 仿真測試平臺(tái)Fig. 14 Simulation test platform
除了要關(guān)注圖像處理的正確性外,還要考慮并行處理器的性能,性能可以通過阿姆達(dá)爾定律模型展開分析,用加速比來衡量并行處理的效果,式(1)在高度理想情況下等號(hào)成立,因此加速比往往是小于處理器的個(gè)數(shù)。
式中,為串行處理部分,為可并行處理部分。在數(shù)據(jù)并行計(jì)算模式下,為正在處理的像素?cái)?shù)據(jù)個(gè)數(shù),即圖像分塊的個(gè)數(shù)。在流水線處理模式下,為執(zhí)行不同指令的處理器個(gè)數(shù),同時(shí)也是Graph計(jì)算模型流水線的階段個(gè)數(shù)。
在數(shù)據(jù)并行計(jì)算模式下,從OpenVX視覺函數(shù)庫中四類函數(shù)(Ⅰ基本像素點(diǎn)處理函數(shù)、Ⅱ全局處理函數(shù)、Ⅲ局部處理函數(shù)、Ⅳ特征提取函數(shù))中選取部分典型函數(shù)進(jìn)行映射。用Modelsim 仿真工具進(jìn)行仿真,調(diào)用不同數(shù)目PE 對(duì)分辨率為640×480 像素的圖像進(jìn)行處理,對(duì)每個(gè)函數(shù)的處理時(shí)間進(jìn)行了統(tǒng)計(jì)。如表2 所示,對(duì)圖像處理時(shí)間為,結(jié)合阿達(dá)姆定律計(jì)算了相應(yīng)的加速比。經(jīng)統(tǒng)計(jì)分析后,對(duì)同一函數(shù),調(diào)用更多數(shù)目PE 的情況下,圖像處理時(shí)間驟減,所對(duì)應(yīng)的加速比成線性增長。但對(duì)于不同類別的函數(shù)加速效果存在一定的差異,Ⅱ、Ⅳ類函數(shù)的加速比略低于Ⅰ、Ⅲ類函數(shù)。
表2 基本核心函數(shù)加速比對(duì)比Table 2 Comparison of speedups of basic kernel functions
為進(jìn)一步分析每類函數(shù)加速比存在差異的影響因素,在每一類中選取一個(gè)具有代表性的函數(shù),分別對(duì)處理過程串并比例進(jìn)行統(tǒng)計(jì)。如圖15 所示,分別為通道提取、直方圖、Sobel、高斯金字塔中串行并行比重統(tǒng)計(jì),表示串行處理部分,表示并行處理部分。對(duì)于Ⅰ類函數(shù),串行處理時(shí)間主要為預(yù)加載像素的時(shí)間;Ⅲ類函數(shù)相較于Ⅰ類,串行處理額外地增加了讀取窗口內(nèi)多個(gè)像素及多像素之間相關(guān)性操作時(shí)間。Ⅱ類函數(shù)串行處理時(shí)間主要來自遍歷整幅圖像、統(tǒng)計(jì)或累加預(yù)處理的時(shí)間,串行預(yù)處理完后才開始進(jìn)行并行處理。Ⅳ類函數(shù),復(fù)雜度明顯高于其他三類,存在中間結(jié)果寫回,導(dǎo)致流水細(xì)分程度略低于其他三類函數(shù)。
圖15 不同函數(shù)串并比處理權(quán)重對(duì)比Fig. 15 Weight comparison of different functions serial parallelism ratio
在調(diào)用不同數(shù)目PE 下,四個(gè)代表函數(shù)處理時(shí)間對(duì)比如圖16 所示,由于每類函數(shù)的可并行處理部分所占的比重不同,處理時(shí)間存在較大的差異,可并行處理度越高的函數(shù),實(shí)現(xiàn)所用時(shí)間越短。
圖16 不同函數(shù)處理時(shí)間對(duì)比Fig. 16 Comparison of processing time of different functions
在流水線處理模式下,將形態(tài)學(xué)濾波Graph執(zhí)行模型映射到本結(jié)構(gòu)上,啟用多個(gè)流水線進(jìn)行同一Graph 的運(yùn)算。本文將PE 陣列分為4 個(gè)流水線進(jìn)行加速比的計(jì)算。如果需要增加線程數(shù),則需要將Graph 計(jì)算模型中的操作重新劃分,增加每個(gè)PE 的任務(wù)負(fù)載,在總?cè)蝿?wù)不變的情況下,對(duì)空閑的PE重新分配任務(wù)?;蚴菍⒈静⑿刑幚砥髯鳛榛敬兀源藬U(kuò)展,實(shí)現(xiàn)多簇并行執(zhí)行任務(wù),進(jìn)一步提高整體的并行性。如圖17所示是原圖與本文硬件處理后結(jié)果圖的對(duì)比,其中(a)是源圖像,(b)是膨脹腐蝕后的開操作結(jié)果,(c)是Sobel邊緣檢測結(jié)果圖,(d)是軟硬件處理結(jié)果比對(duì)圖,驗(yàn)證了硬件電路功能的正確性。
圖17 圖像處理前后對(duì)比Fig. 17 Contrast before and after image processing
圖18 為Graph 單流水線處理圖,是加載PE內(nèi)部寄存器堆時(shí)間(預(yù)處理),為加載PE間緩存時(shí)間,圖像數(shù)據(jù)從Graph中的第一個(gè)節(jié)點(diǎn)流向最后一個(gè)節(jié)點(diǎn)并輸出,整體流水實(shí)現(xiàn)耗時(shí)為313 045 clk,相比逐函數(shù)串行處理(=1 843 860 clk)速度提升了4.89倍。
圖18 Graph單流水線處理Fig. 18 Graph pipeline processing
啟用不同數(shù)目的流水線對(duì)同一Graph進(jìn)行處理,測試結(jié)果如表3所示,根據(jù)阿達(dá)姆定律計(jì)算了相應(yīng)的加速比,如圖19 所示。當(dāng)執(zhí)行流水線數(shù)增加時(shí),Graph的處理加速比成線性增長。
表3 不同數(shù)目流水線處理時(shí)間Table 3 Processing time of different number of pipelines
圖19 Graph計(jì)算模型加速比Fig. 19 Graph execution model acceleration ratio
文獻(xiàn)[4,8]針對(duì)OpenVX 1.0 標(biāo)準(zhǔn)中的核心庫函數(shù),提出了基于Mesh 型結(jié)構(gòu)的陣列處理器。通過改變?cè)垂?jié)點(diǎn)的數(shù)據(jù)注入率,對(duì)本文系統(tǒng)與文獻(xiàn)[4,8]系統(tǒng)的平均延時(shí)和吞吐量進(jìn)行了統(tǒng)計(jì)分析。測試中每個(gè)節(jié)點(diǎn)作為源節(jié)點(diǎn)注入數(shù)據(jù)的概率是相同的,通過一定約束,對(duì)目標(biāo)節(jié)點(diǎn)的選擇符合隨機(jī)均勻分布。如圖20 所示,平均延時(shí)均隨著數(shù)據(jù)注入率的增大而增大,由于HCCM+相比于Mesh 型網(wǎng)絡(luò)多了對(duì)角快速傳輸通道,本文平均延時(shí)整體小于Mesh型系統(tǒng)。
圖20 平均延時(shí)對(duì)比Fig. 20 Average delay comparison
如圖21所示,隨著數(shù)據(jù)注入率的增大,網(wǎng)絡(luò)負(fù)載增大,吞吐量也隨之增大。當(dāng)數(shù)據(jù)注入量增大到一定程度時(shí),網(wǎng)絡(luò)負(fù)載達(dá)到飽和,吞吐量處于穩(wěn)定狀態(tài)。由于本文系統(tǒng)中網(wǎng)絡(luò)的對(duì)分寬度大于文獻(xiàn)[4,8],本文系統(tǒng)的吞吐量整體上更大,可以承載更大的數(shù)據(jù)流量。
圖21 吞吐量對(duì)比Fig. 21 Throughput comparison
針對(duì)相同Kernel 函數(shù),本文與文獻(xiàn)[8]的加速比對(duì)比如圖22所示,(a)、(b)和(c)分別是中值濾波、顏色轉(zhuǎn)換及圖像腐蝕的加速比對(duì)比。結(jié)果表明,在處理性能上,本文相比同類的圖像陣列處理器,具有更大的加速比,更有優(yōu)勢。
圖22 核心函數(shù)加速比對(duì)比Fig. 22 Speedup comparison of kernel functions
文獻(xiàn)[18-20]是基于FPGA對(duì)Sobel算法的并行化設(shè)計(jì),實(shí)現(xiàn)了專用的圖像處理。如表4 所示,當(dāng)本文調(diào)用的PE 數(shù)目比較少時(shí),處理速度小于專用硬件電路,但是隨著調(diào)用PE 數(shù)目的增加,處理速度明顯提高,當(dāng)采用16 個(gè)PE 進(jìn)行映射時(shí),處理速度大于專用硬件電路。本文與文獻(xiàn)[18-20]資源占用對(duì)比如表5所示,本文資源占用高于其他三個(gè)設(shè)計(jì),但系統(tǒng)工作頻率更高,可支持更多的圖像處理類型,更加通用。
表4 處理時(shí)間對(duì)比Table 4 Comparison of processing time
表5 性能對(duì)比Table 5 Performance comparison
針對(duì)傳統(tǒng)的處理器靈活性與處理速度不能兼顧的問題,本文設(shè)計(jì)實(shí)現(xiàn)了一種OpenVX 并行處理器,不但在性能上接近于ASIC,而且具有靈活的可編程性,結(jié)構(gòu)簡單易擴(kuò)展。并行處理器支持?jǐn)?shù)據(jù)并行和管線處理兩種計(jì)算方式,使用有限的硬件資源完成對(duì)OpenVX 核心函數(shù)和復(fù)雜Graph 執(zhí)行模型的映射并且線性加速。對(duì)Ⅰ類函數(shù)的最大平均加速比為15.170,對(duì)Ⅱ類函數(shù)的最大平均加速比為14.825,對(duì)Ⅲ類函數(shù)的最大平均加速比為15.215,對(duì)Ⅳ類函數(shù)的最大平均加速比為14.810,能夠有效地提高圖像的處理速度,實(shí)現(xiàn)數(shù)據(jù)級(jí)并行和任務(wù)級(jí)并行。與同類陣列處理器相比,加速效果更加明顯。今后研究工作重點(diǎn)是繼續(xù)分析各個(gè)函數(shù)的處理瓶頸,找到更優(yōu)的映射方式,優(yōu)化最長路徑。其次以本并行處理器為基本簇,結(jié)合更加有效的通信管理機(jī)制,對(duì)其進(jìn)一步擴(kuò)展,實(shí)現(xiàn)多并行處理器簇,進(jìn)一步提高整個(gè)系統(tǒng)的性能。