潘風蕊,李 濤,邢立冬,張好聰,吳冠中
1.西安郵電大學 電子工程學院,西安710121
2.西安郵電大學 計算機學院,西安710121
近年來,計算機視覺(computer vision,CV)在深度學習領域的應用迅速發展,圖像處理作為CV中比較活躍的一個分支,廣泛應用在醫療衛生、安檢刑偵、圖像檢索與分析、增強現實等領域中。而CV領域更新變化飛快,這就要求圖像處理具有很高的靈活性、實時性和精確性。傳統的硬件很難滿足可編程性、高性能和低功耗的要求。可編程技術的出現使得硬件變得可“編譯”,能在嵌入式系統上完成多種多樣的新任務。并行計算方式的出現使得硬件介質可以提供更加強大的計算能力和密度,大幅提高了芯片系統的總體性能,實現片上超級計算。業界典型的兩種并行可編程模型分布式共享內存MPI(multi-point interface)和集中式共享內存OpenMP,與當前GPU 多核、眾核架構相比,形式過于單一。可編程的專用指令集處理器可以兼顧功耗、性能和靈活性,一種專為圖形圖像處理而設計的新型多態陣列處理器應運而生,其不但處理性能在一定程度上接近于ASIC(application specific integrated circuit),而且具有靈活的可編程性,它能夠將線程并行、數據并行、指令并行和操作并行融合到一個單一的陣列結構中。對于圖像計算,ASIP(application specific instruction processor)是一種可行的硬件設計方法,基于ASIP 體系結構,本文提出了一種面向計算機視覺底層任務加速的可編程并行處理器。
首先,本文研究了各種拓撲特性對互聯網絡傳輸性能的影響,分析了一類基礎網絡的拓撲特性,選擇了一種更加靈活的新型網絡結構——層次交叉互聯網絡(hierarchically cross-connected mesh+,HCCM+),可以根據不同應用的網絡流量重新配置為Mesh、HCCM 或HCCM-網絡,降低整個系統的功耗。其次,以HCCM+的網絡拓撲結構為基礎,設計實現了一種可編程的OpenVX并行處理器,使用有限的硬件資源,以可編程的方式對OpenVX 1.3 標準中核心函數進行映射,實現通用的圖像處理。
2019年Khronos發布的OpenVX 1.3標準中,核心圖像處理函數包括了基本像素點處理、全局處理、局部處理、特征提取四大類。OpenVX 標準是按照新興的圖計算方式指定的,其基本加速原理是根據需求有目的性地對圖像矩陣進行一定的操作。如圖1 所示,OpenVX基本圖像處理核函數可以看作整個處理流程中的一個節點(node)。對于圖像處理流程往往是數據從源Node 流向目標Node,Node 與Node 之間形成一定的有向無環圖(graph)。開發者可以根據需要將這些基本的Node連成Graph,完成對圖像的操作。

圖1 OpenVX圖計算模型Fig. 1 OpenVX graph calculation model
OpenVX 作為計算機視覺一個標準化的功能框架,接口統一規范,具有良好的移植性,可以直接被應用程序使用;也可以作為高級視覺的加速層、框架、引擎或平臺API,被諸多芯片企業(如NVIDIA、AMD、Intel)采用,具有廣泛的應用前景。但專門為OpenVX 實現的硬件芯片十分匱乏。本文的工作屬于比較早涉及此標準的硬件設計之一,所提出的架構適合圖計算和數據并行計算,實現可編程的加速處理,最大限度地提高硬件功能和性能的可移植性。
OpenVX 并行處理器是利用有限的硬件資源實現OpenVX核心函數,圖像處理往往是密集且重復的操作,因此除了高速計算之外,提高硬件的通用性,盡可能地使資源共享、降低功耗也成為并行處理器設計的目的。
互連網絡是并行處理系統的重要組成部分,對于數據信息傳遞的并行計算,互連網絡對系統的整體性能尤為重要,是本文所提出的OpenVX并行處理器的主干。由于簡單的拓撲結構易于在超大規模集成電路(very large scale integration,VLSI)中實現和分析,互連網絡宜采用簡單的拓撲結構,拓撲特性包括:
(1)邊數(edge number):網絡鏈路數,影響互聯網絡的容量及靈活性。
(2)直徑(diameter):任意兩個節點之間的最短路徑中的路徑長度。直徑與通信時間成正比,直徑越長,所需通信時間越長。
(3)對分寬度(bisection bandwidth):網絡被分成節點數相等的兩部分,切口處最小邊數為對分寬度,該參數主要反映了整個網絡的最大流量。
互聯網絡的設計要兼顧上述3種拓撲特性,使得整體結構的性能在一定程度上有所提高。最基本的拓撲結構是Mesh型、XMesh型,本文在基本結構的基礎上,選擇了HCCM結構,并對HCCM進行擴展得到HCCM-、HCCM+兩種拓撲結構,如圖2所示。

圖2 互連網絡拓撲結構Fig. 2 Interconnection network topology
根據遞歸特性、循環和邊界條件,推導計算出4種結構的拓撲特性公式,如表1所示。

表1 互聯網絡拓撲性能比較Table 1 Comparison of network topology performance
通過對比四種結構的拓撲特性,HCCM+的直徑小于Mesh 和HCCM,且比Mesh、HCCM 和HCCM-具有更寬的對分寬度。在理論上它可以比其他結構承載更大的傳輸量,性能優于其他結構。因此本文采用HCCM+作為并行處理器的基礎網絡。
OpenVX 并行處理器采用了性能較為突出的HCCM+網絡,包含了4×4 個處理單元(processing element,PE)、路由(RU)及全局控制(global control),整體結構如圖3所示。在開始計算前,全局控制器接收微控制器(micro control unit,MCU)發送的微指令,根據指令中的PE標識號(ID),將配置及數據信息經配置開關模塊(cfg&switch)下發至相應的PE 中。PE 執行任務時以微指令信息為單位,可以循環執行微指令攜帶的操作信息,中間結果可暫存到PE 內部緩存中,由RU控制選通PE之間的數據鏈路,完成數據的傳輸。MCU 下發的微指令可實現多個PE 的任務切換,實現整體可配置。

圖3 OpenVX并行處理器整體架構Fig. 3 OpenVX parallel processor architecture
每個PE 中包含了8 個ALU、2 個定點乘法器(MUL)、2 個浮點乘法器(FMUL)、1 個定點除法器(DIV)、1 個浮點除法器(FDIV)、1 個內部交叉開關(Crossbar)、5 個32×16 的寄存器堆(regfile)以及寄存器堆的訪存模塊(RD_CTRL,LOAD_PIXEL),整體結構如圖4所示。

圖4 PE整體結構Fig. 4 PE architecture
(1)ALU負責執行add、sub、and、or、xor、sll、srl等指令。當ALU 執行add 指令時,a 輸入端和b 輸入端有三個數據源:①指定寄存器堆內的數據;②譯碼單元的立即數;③計算單元的輸出數據。Crossbar從三個數據源中選擇一個送至ALU 的輸入端,輸出結果由分配器派遣至下一個指定的PE,進行新的處理。其中第三個數據源的選擇,是為了處理比較復雜的函數如Canny邊緣檢測、Harris角點檢測等,中間結果寫回,進行新的配置,繼續計算至最終結果的輸出。
(2)PE 內部的Crossbar 設計為60×32 的開關矩陣(switch matrix)、60個輸入、32個輸出。通過配置譯碼模塊(configer decode)將選通信號發送給分配器和選擇器,ALU輸入操作數可以有選擇性地連接寄存器堆或ALU 的計算結果。如圖5 所示,以ALU0 為例,ALU0 的兩個操作數是多路選擇器的輸出,ALU0 計算結果(Mid_out)通過分配器輸出。輸入、輸出數據流向選擇取決于譯碼模塊的配置指令。將多個計算單元的輸入、輸出數據通路進行互聯,組成開關矩陣。

圖5 ALU0 I/O數據通路Fig. 5 ALU0 I/O data path
(3)寄存器堆訪存模塊包括了RD_CTRL 和LOAD_PIXEL。RD_CTRL通過AXI總線訪問DDR,采用突發讀寫的模式,將像素數據加載至寄存器堆中,減少了對DDR 訪問次數。LOAD_PIXEL 訪問寄存器堆,將像素數據加載至Crossbar 的數據端口,對于像素點操作和模板類操作的函數,由譯碼模塊發送的操作類型信號(operation_type)配置不同的加載方式。當LOAD_PIXEL模塊訪問至寄存器堆的中間或最大地址時,會向RD_CTRL 發送Half_empty 信號,RD_CTRL 繼續訪問DDR,形成一個動態加載和動態取數的過程。
全局控制(global control)負責控制各個模塊之間以及模塊內部的數據交互、數據流向及數據選擇。圖6是對一個PE進行控制的電路設計。

圖6 全局控制電路Fig. 6 Global control circuit
MCU 負責發送Node 類型,開始進行圖像處理。RD_INST 向INST_MEM 發送請求,讀取微指令。派遣模塊(dispatch)負責將微指令派遣至相應PE 的譯碼單元(decode)進行解析。譯碼單元將地址信息(address)發送至寄存器堆(regfile)的地址端,將配置信息(cfg_inst)順序寫入到開關矩陣(switch matrix)的配置寄存器(Cfg_inst)中,進行數據通路的選擇,像素數據流向對應的ALU進行計算。ALU的輸出可作為中間結果(Mid_results)返回,也可經RU 直接輸出至下一個PE對應的緩存中。
PE 之間數據路由受全局控制模塊控制,本文路由以XY 路由為基礎,并對其進行了一定的改進,增加了新的判斷狀態,在數據從當前節點流向目標節點的過程中增加一條對角邊。路由結構如圖7 所示,上一級各個方向PE 的輸出Edout、Sdout、Wdout、Ndout、ESdout、WNdout 輸入至相應的緩存E_buf、S_buf、W_buf、N_buf、ES_buf、WN_buf。Arbiter 模塊采用先來先到的仲裁機制決定數據的傳輸順序。RU模塊根據規定的傳輸方向優先級決定數據流向,數據經全互聯交叉開關輸入至目的PE。

圖7 路由結構Fig. 7 Route structure
RU 模塊支持一對一單目標傳輸,其中對角快速通道優先級最高,其次為水平方向的數據通路,最后為豎直方向;RU 也支持一對多目標的數據扇出,此時目標與目標之間優先級相同,對于某一目標通道優先級與一對一單目標傳輸時優先級相同。譯碼模塊將路由配置信息寫入PE 內部路由選擇寄存器中,選通本地PE到目標PE的通信路徑,將計算結果發送至目標PE,執行新任務。
PE之間主要數據通路如圖8所示,假設當前節點為PE00,目標節點為PE32,則數據流向為:PE00→ES_dout→PE11→ES_dout→PE22→S_dout→PE32。

圖8 PE之間數據路由Fig. 8 Data routing between PEs
高性能OpenVX并行處理器共有五種指令類型:定點運算、浮點運算、邏輯運算、加載/存儲、特殊指令(控制、存取及停止)。以定點運算為例,常規的指令格式為:

本文指令格式為:

其中,Rd為目的寄存器,提供計算結果地址;Ra為源寄存器,提供源操作數A 地址;Rb 為源寄存器,提供源操作數B地址。opcode為操作類型,相比于傳統的指令,本文每條指令中有4 個opcode,一次可控制多個操作,使得更多運算單元能夠同時工作,增大了操作的并行度,提高了像素的吞吐率。
為了減少數據通路,ALU中將加法和移位合并,同時包含了與、或、非以及異或等布爾運算。例如局部圖像處理,模板總是固定的常系數,目標中心像素由常系數與窗口內的像素進行乘加得到。而OpenVX并行處理器中只需要配置ALU執行ADD操作即可,耗費一個時鐘周期就可完成4組像素的乘加操作。
同時在用匯編指令實現核心函數時,可以合理地、自由地調整配置指令的順序,盡量避免相鄰指令間數據傳遞依賴性,減小整個程序的執行時間。
傳統運算單元中只有一個ALU,合理地增加PE中ALU數目,可以減少流水停滯時間,增大像素吞吐率,計算速度快。
為減少PE通過AXI總線訪問DDR的次數,在PE內部設置了5個深度為16,寬度為32 bit寄存器堆,用于快速存取原像素數據及中間計算結果。PE之間傳遞數據直接通過訪問鄰接共享存儲,實現數據的傳遞復用,只有最后一個PE 的計算結果才寫回DDR,用于最終的顯示。
本文所采用的HCCM+中,嵌入了Mesh、HCCM和HCCM-,可以根據不同應用的網絡流量重新配置為Mesh 型、HCCM 型或HCCM-型結構。對于流量較大的應用,可以使用HCCM+所有邊緣。對于中等級別的流量,可以關閉一些邊緣以形成HCCM網絡,這有助于節省功耗。對于大多數短距離輕型通信,可以關閉更多的邊緣來形成HCCM-網絡,進一步降低功耗且更加靈活。
為了適應系統網絡結構,本文路由在XY路由算法的基礎上,增加了對角傳輸路徑。這種改進不僅為數據到達目標節點提供了最佳傳輸路徑,而且增大了單節點的數據扇出,可以適應復雜度更高的Graph,使更多的PE 可以交互,延長PE 數據傳輸鏈路,提高PE單元的復用率。同時路由中采用結構簡單的全互聯交叉開關,傳輸延遲低,速度快,可實現數據并行傳輸。
并行處理器的流處理類似于FPGA(field programmable gate array)或ASIC 的流水線,每個運算單元處理的顆粒粗細程度由MCU進行配置調整,宏觀上實現流水處理。
數據并行計算模式是對圖像分塊處理,將圖像分配至不同的處理單元,配置相同的指令,對不同的圖像數據進行相同的操作,實現數據級并行操作。針對該模式,選取基本的核心函數在并行處理器上進行映射,多個處理單元同時執行同一種操作。如圖9 所示,將Sobel 函數在并行處理器上以數據并行處理的模式進行映射。圖10為數據并行處理模式下圖像分塊方式,PE 調度的個數與圖像分塊的個數相關。在每個PE內部,針對核心函數的算法,對基本算數邏輯操作流水細分,按需分配,微觀上實現細粒度并行運算。

圖9 數據并行計算模式映射Fig. 9 Data parallel computing pattern mapping

圖10 數據并行計算模式下圖像分塊Fig. 10 Image segmentation in data parallel computing mode
流水線處理是將復雜的程序分解為數個簡單的操作,分配到不同的處理單元上,處理單元之間可通過相鄰的數據通路進行數據傳遞,整體實現流水處理。相鄰處理單元之間指令獨立,使本結構非常適合流水線處理的運行方式。針對該模式,選取均值濾波(box filter)、通道合并(channel combine)、色系轉換(color convert)、圖像膨脹(image dilate)和圖像腐蝕(image erode),構造形態學濾波的Graph計算模型,執行流程如圖11 所示。每個基本函數為一個Node,將該執行流程映射到并行處理器上,由于通道合并和通道提取比較簡單,將其與均值濾波合并到一起,在結構映射中并未體現,映射結果如圖12所示。

圖11 形態學濾波執行流程Fig. 11 Morphological filtering execution flow

圖12 流水線處理模式映射Fig. 12 Pipeline processing pattern mapping
如圖13 所示是形態學濾波數據分塊分配方式,將圖像數據分成四塊,其中陰影部分為圖像分塊后的邊界。常見的邊界處理方法是邊界復制和邊界填零。MCU 控制加載圖像像素數據時,發送兩次邊緣像素的讀取指令,實現對邊界像素進行復制。第一塊圖像數據經過P00、P01、P02、P03 所構成的運算單元鏈(流水線)分任務進行處理。實際上,形態學濾波是由多流水線并行處理實現的,執行不同任務的PE實現流水線處理,執行同一任務的PE實現數據并行處理,宏觀上實現粗粒度并行運算。

圖13 形態學濾波數據分塊Fig. 13 Morphological filtering data segmentation
對圖像處理硬件系統設計一個完整穩定的驗證系統也是至關重要的,本設計基于VS2015的MFC仿真測試平臺,如圖14 所示。VS 平臺和FPGA 平臺共享輸入源圖像數據,經過相同的算法,將最終圖像處理的結果打印至文本中。可以直接打開文本查看結果,也可以對軟件算法處理結果與FPGA的處理結果進行逐像素對比驗證,并輸出兩者的比對結果。

圖14 仿真測試平臺Fig. 14 Simulation test platform
除了要關注圖像處理的正確性外,還要考慮并行處理器的性能,性能可以通過阿姆達爾定律模型展開分析,用加速比來衡量并行處理的效果,式(1)在高度理想情況下等號成立,因此加速比往往是小于處理器的個數。

式中,為串行處理部分,為可并行處理部分。在數據并行計算模式下,為正在處理的像素數據個數,即圖像分塊的個數。在流水線處理模式下,為執行不同指令的處理器個數,同時也是Graph計算模型流水線的階段個數。
在數據并行計算模式下,從OpenVX視覺函數庫中四類函數(Ⅰ基本像素點處理函數、Ⅱ全局處理函數、Ⅲ局部處理函數、Ⅳ特征提取函數)中選取部分典型函數進行映射。用Modelsim 仿真工具進行仿真,調用不同數目PE 對分辨率為640×480 像素的圖像進行處理,對每個函數的處理時間進行了統計。如表2 所示,對圖像處理時間為,結合阿達姆定律計算了相應的加速比。經統計分析后,對同一函數,調用更多數目PE 的情況下,圖像處理時間驟減,所對應的加速比成線性增長。但對于不同類別的函數加速效果存在一定的差異,Ⅱ、Ⅳ類函數的加速比略低于Ⅰ、Ⅲ類函數。

表2 基本核心函數加速比對比Table 2 Comparison of speedups of basic kernel functions
為進一步分析每類函數加速比存在差異的影響因素,在每一類中選取一個具有代表性的函數,分別對處理過程串并比例進行統計。如圖15 所示,分別為通道提取、直方圖、Sobel、高斯金字塔中串行并行比重統計,表示串行處理部分,表示并行處理部分。對于Ⅰ類函數,串行處理時間主要為預加載像素的時間;Ⅲ類函數相較于Ⅰ類,串行處理額外地增加了讀取窗口內多個像素及多像素之間相關性操作時間。Ⅱ類函數串行處理時間主要來自遍歷整幅圖像、統計或累加預處理的時間,串行預處理完后才開始進行并行處理。Ⅳ類函數,復雜度明顯高于其他三類,存在中間結果寫回,導致流水細分程度略低于其他三類函數。

圖15 不同函數串并比處理權重對比Fig. 15 Weight comparison of different functions serial parallelism ratio
在調用不同數目PE 下,四個代表函數處理時間對比如圖16 所示,由于每類函數的可并行處理部分所占的比重不同,處理時間存在較大的差異,可并行處理度越高的函數,實現所用時間越短。

圖16 不同函數處理時間對比Fig. 16 Comparison of processing time of different functions
在流水線處理模式下,將形態學濾波Graph執行模型映射到本結構上,啟用多個流水線進行同一Graph 的運算。本文將PE 陣列分為4 個流水線進行加速比的計算。如果需要增加線程數,則需要將Graph 計算模型中的操作重新劃分,增加每個PE 的任務負載,在總任務不變的情況下,對空閑的PE重新分配任務。或是將本并行處理器作為基本簇,以此擴展,實現多簇并行執行任務,進一步提高整體的并行性。如圖17所示是原圖與本文硬件處理后結果圖的對比,其中(a)是源圖像,(b)是膨脹腐蝕后的開操作結果,(c)是Sobel邊緣檢測結果圖,(d)是軟硬件處理結果比對圖,驗證了硬件電路功能的正確性。

圖17 圖像處理前后對比Fig. 17 Contrast before and after image processing
圖18 為Graph 單流水線處理圖,是加載PE內部寄存器堆時間(預處理),為加載PE間緩存時間,圖像數據從Graph中的第一個節點流向最后一個節點并輸出,整體流水實現耗時為313 045 clk,相比逐函數串行處理(=1 843 860 clk)速度提升了4.89倍。

圖18 Graph單流水線處理Fig. 18 Graph pipeline processing
啟用不同數目的流水線對同一Graph進行處理,測試結果如表3所示,根據阿達姆定律計算了相應的加速比,如圖19 所示。當執行流水線數增加時,Graph的處理加速比成線性增長。

表3 不同數目流水線處理時間Table 3 Processing time of different number of pipelines

圖19 Graph計算模型加速比Fig. 19 Graph execution model acceleration ratio
文獻[4,8]針對OpenVX 1.0 標準中的核心庫函數,提出了基于Mesh 型結構的陣列處理器。通過改變源節點的數據注入率,對本文系統與文獻[4,8]系統的平均延時和吞吐量進行了統計分析。測試中每個節點作為源節點注入數據的概率是相同的,通過一定約束,對目標節點的選擇符合隨機均勻分布。如圖20 所示,平均延時均隨著數據注入率的增大而增大,由于HCCM+相比于Mesh 型網絡多了對角快速傳輸通道,本文平均延時整體小于Mesh型系統。

圖20 平均延時對比Fig. 20 Average delay comparison
如圖21所示,隨著數據注入率的增大,網絡負載增大,吞吐量也隨之增大。當數據注入量增大到一定程度時,網絡負載達到飽和,吞吐量處于穩定狀態。由于本文系統中網絡的對分寬度大于文獻[4,8],本文系統的吞吐量整體上更大,可以承載更大的數據流量。

圖21 吞吐量對比Fig. 21 Throughput comparison
針對相同Kernel 函數,本文與文獻[8]的加速比對比如圖22所示,(a)、(b)和(c)分別是中值濾波、顏色轉換及圖像腐蝕的加速比對比。結果表明,在處理性能上,本文相比同類的圖像陣列處理器,具有更大的加速比,更有優勢。

圖22 核心函數加速比對比Fig. 22 Speedup comparison of kernel functions
文獻[18-20]是基于FPGA對Sobel算法的并行化設計,實現了專用的圖像處理。如表4 所示,當本文調用的PE 數目比較少時,處理速度小于專用硬件電路,但是隨著調用PE 數目的增加,處理速度明顯提高,當采用16 個PE 進行映射時,處理速度大于專用硬件電路。本文與文獻[18-20]資源占用對比如表5所示,本文資源占用高于其他三個設計,但系統工作頻率更高,可支持更多的圖像處理類型,更加通用。

表4 處理時間對比Table 4 Comparison of processing time

表5 性能對比Table 5 Performance comparison
針對傳統的處理器靈活性與處理速度不能兼顧的問題,本文設計實現了一種OpenVX 并行處理器,不但在性能上接近于ASIC,而且具有靈活的可編程性,結構簡單易擴展。并行處理器支持數據并行和管線處理兩種計算方式,使用有限的硬件資源完成對OpenVX 核心函數和復雜Graph 執行模型的映射并且線性加速。對Ⅰ類函數的最大平均加速比為15.170,對Ⅱ類函數的最大平均加速比為14.825,對Ⅲ類函數的最大平均加速比為15.215,對Ⅳ類函數的最大平均加速比為14.810,能夠有效地提高圖像的處理速度,實現數據級并行和任務級并行。與同類陣列處理器相比,加速效果更加明顯。今后研究工作重點是繼續分析各個函數的處理瓶頸,找到更優的映射方式,優化最長路徑。其次以本并行處理器為基本簇,結合更加有效的通信管理機制,對其進一步擴展,實現多并行處理器簇,進一步提高整個系統的性能。