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