范明亮,郭子涵,柴曉楠,商建東
(1.鄭州大學 信息工程學院,鄭州 450001;2.國家超級計算鄭州中心,鄭州 450001)
隨著大規(guī)模集成電路和信息技術(shù)的發(fā)展,數(shù)字信號處理器(Digital Signal Processor,DSP)受到廣泛關(guān)注,DSP 具有高性能、低功耗等特點,可以滿足圖像處理實時性以及密集型計算的需求,因此,在圖像處理領(lǐng)域得到大范圍應用。目前,使用較多的高性能DSP 主要有TI 的C66X 系列,其片上集成8 個DSP 核心,單核浮點運算能力可達20 GFlops[1-2]。近年來,我國高性能DSP 的相關(guān)研究也取得了一定的成果,其中,由國防科技大學獨立研制的FT-M7002性能較為突出。FT 處理器片上集成2 個DSP 核心和1 個CPU 核心,浮點運算能力達200 GFlops[3-4]。但是,在目前硬件發(fā)展較快的同時也顯現(xiàn)出國產(chǎn)DSP平臺缺乏相應軟件支撐的問題。因此,對國產(chǎn)高性能DSP 處理器相應的軟件環(huán)境以及函數(shù)庫進行適配與調(diào)優(yōu),充分發(fā)揮國產(chǎn)DSP 的特殊硬件架構(gòu)優(yōu)勢具有重大意義。
邊緣檢測是圖像處理和計算機視覺中的重要研究課題,其目的是識別出圖像中那些亮度發(fā)生明顯變化的點。目前,圖像邊緣檢測[5]廣泛應用于圖像識別、醫(yī)學影像處理、機器學習等[6-8]領(lǐng)域。傳統(tǒng)邊緣檢測算子包括Roberts 算子、Sobel 算子、Canny 算子、Prewitt 算子等[9]。Sobel 算子因其耗時短、具有一定的抗噪性、邊緣檢測效果好而得到廣泛應用。近年來,很多學者基于硬件特性對Sobel 算法進行改進,并取得了一定的成果。文獻[10]基于FPGA 提出一種多核矩陣處理器,其采用同構(gòu)多核結(jié)構(gòu)使數(shù)據(jù)并行傳輸和運算。文獻[11]基于CUDA 架構(gòu),根據(jù)GPU 的并行結(jié)構(gòu)和硬件特點優(yōu)化數(shù)據(jù)存儲結(jié)構(gòu)。文獻[12]基于Zynq-7000 系列平臺,將ARM 處理器與FPGA 組合起來并利用異構(gòu)多核平臺實現(xiàn)加速。但是,由于各平臺體系結(jié)構(gòu)存在差異性,導致上述優(yōu)化算法并不適用于FT 系列的高性能DSP。
本文面向FT-M7002 高性能處理器,基于該平臺特性對Sobel 邊緣檢測算法進行優(yōu)化。具體地,分析Sobel 算法特性,判斷其是否可以充分利用FT 平臺架構(gòu)進行優(yōu)化,針對算法中密集型數(shù)據(jù)訪存運算,使用向量化、循環(huán)展開等優(yōu)化手段實現(xiàn)數(shù)據(jù)級并行性,以提高向量寄存器、向量運算部件等硬件的資源利用率。在此基礎(chǔ)上,針對DMA 產(chǎn)生的數(shù)據(jù)傳輸開銷,采用雙緩沖區(qū)結(jié)構(gòu)使得數(shù)據(jù)傳輸與數(shù)據(jù)計算實現(xiàn)并行,并設(shè)計對比實驗來測試優(yōu)化算法的正確性及檢測性能。
圖像邊緣即圖像中灰度值變化劇烈的位置,梯度算子就是利用圖像邊緣灰度的突變來檢測邊緣[13]。Sobel 算子包含2 個3×3 的矩陣,分別對水平和垂直方向上的像素進行滑動檢測。假設(shè)一副圖像中的某個3×3 區(qū)域如圖1 所示,則Sobel 算子水平和垂直梯度模板分別如圖2(a)、圖2(b)所示。
圖1 3×3 區(qū)域示意圖Fig.1 3×3 area schematic diagram
圖2 Sobel 算子的水平和垂直梯度模板Fig.2 Horizontal and vertical gradient templates of Sobel operator
2 個二維梯度模板可以拆分為2 個一維卷積核,分別如下:
以X方向卷積模板為例,其中,[-1 0 1]卷積計算模板是為了計算X方向的差分,也就是得到可能的邊緣點,而則用來平滑差分處理之后的像素,Y方向的橫向和縱向卷積模板與X相同。根據(jù)上述2 個梯度模板,分別將其與圖像像素做卷積計算,公式如下:
由式(1)、式(2)可以得到該點橫向和縱向的亮度差分近似值,從而檢測出橫向和縱向的邊緣。梯度向量的幅值和方向分別如下:
根據(jù)式(3)可以得到該像素梯度的近似值,最后選取合適的閾值,將計算得到的梯度近似值與閾值進行比較[14],若梯度近似值大于閾值,則該點為圖像的邊緣點;否則,該點不是圖像的邊緣點[15-17]。由于Sobel算子對像素的位置影響做了加權(quán),可以降低邊緣模糊程度,因此其檢測效果優(yōu)于傳統(tǒng)的Prewitt算子、Roberts算子。
FT-M7002 高性能DSP 芯片使用三級存儲結(jié)構(gòu),單個計算核擁有32 KB 的一級數(shù)據(jù)緩存以及512 KB的向量存儲空間(AM),所有計算核共享2 MB 的全局共享Cache,核外擁有32 GB 的大容量DDR 存儲空間[18-21]。FT-MT2 內(nèi)核基于超長指令字(VLIW)結(jié)構(gòu),包含一個五流出標量處理單元(SPU)以及六流出向量處理單元(VPU),2 個處理單元以緊耦合方式工作[22]。SPU 用于支持標量定點和浮點運算,主要負責數(shù)據(jù)的串行處理工作。VPU 內(nèi)有16 個同構(gòu)運算簇(VPE),負責對運算量大的密集型數(shù)據(jù)進行并行計算。直接存儲訪問(DMA)部件為內(nèi)核提供了高速數(shù)據(jù)傳輸通路,通過配置傳輸參數(shù)啟動對特定存儲資源的訪問,DMA 部件能夠?qū)崿F(xiàn)標量存儲空間、向量存儲空間與核外DDR 空間之間的數(shù)據(jù)交互。FT-MT2 內(nèi)核結(jié)構(gòu)如圖3 所示。
圖3 FT-MT2 內(nèi)核結(jié)構(gòu)Fig.3 FT-MT2 kernel structure
VPE 內(nèi)部集成的4 個運算部件可以支持標量定點和浮點運算,即該向量運算單元最多可以同時對16 路32 位數(shù)據(jù)進行向量運算并且支持混洗/歸約操作。FT-M7002 特殊的體系結(jié)構(gòu)為大寬度的向量運算提供了高效的數(shù)據(jù)存儲及傳輸支持,能夠在圖像處理這種密集重復型計算中發(fā)揮優(yōu)勢。
OpenCV 中通過獲取Sobel邊緣檢測所需的卷積核進行梯度計算。Sobel 的實現(xiàn)是通過分離行卷積和列卷積來進行梯度計算,分別從X方向和Y方向?qū)D片進行卷積操作,每個卷積方向又再次劃分了橫向卷積與縱向卷積,具體實現(xiàn)流程如圖4 所示。在進行X方向卷積計算時,先將圖像像素點與橫向一維卷積模板相乘,然后再將計算之后的卷積結(jié)果與縱向一維卷積模板相乘,Y方向與之相同。使用分離的行、列卷積,能夠在很大程度上減少計算量,同時又促進了對內(nèi)存的連續(xù)訪問。但是,當處理較大的圖片時,內(nèi)存訪問量仍然是影響該算法性能的主要因素。
圖4 Sobel 算法實現(xiàn)流程Fig.4 Sobel algorithm implementation procedure
Sobel 邊緣檢測的主要計算過程是X方向卷積與Y方向卷積,本文先對其核心計算進行熱點分析,發(fā)現(xiàn)該部分約占整體運行時間的1/2。因此,本文主要針對該核心計算部分使用SIMD 使其并行計算,充分利用FT 內(nèi)核中的向量寄存器資源,減少卷積計算部分數(shù)據(jù)運算的訪存次數(shù),此外,利用DMA 傳輸機制設(shè)置雙緩沖結(jié)構(gòu)使數(shù)據(jù)運算與傳輸并行,最大程度地提高算法并行性,并通過FT 內(nèi)部指令封裝數(shù)據(jù)類型轉(zhuǎn)換接口,從而擴展平臺的兼容性。
2.2.1 向量并行優(yōu)化
根據(jù)Sobel 核心計算部分的特性可知,計算過程存在數(shù)據(jù)連續(xù)訪問、迭代次數(shù)多、計算量大等特點,而FT 處理器的內(nèi)核向量計算特性可以很好地支持其使用SIMD 并行化。
核心計算位于循環(huán)體內(nèi),因此,首先針對循環(huán)體進行循環(huán)展開,選擇適當?shù)恼归_因子以保證代碼體積不會過大,同時提高軟件流水并行性,再利用FT內(nèi)嵌的向量指令對計算過程進行向量化改寫。首先,使用數(shù)據(jù)傳輸指令M7002_datatrans_cv 將內(nèi)存中的圖片數(shù)據(jù)傳輸?shù)较蛄康刂房臻g,通過vec_svbcast將這些數(shù)據(jù)從標量空間廣播到向量空間;然后,利用vec_ld 指令從向量空間連續(xù)取出16 個數(shù)據(jù),使用vec_add、vec_muli 每次可以完成16 個輸入數(shù)據(jù)的乘加操作,計算完成后將結(jié)果保存到向量空間;最后,將結(jié)果傳輸回向量地址空間。以3×3 核的行卷積為例,具體核心計算部分代碼如下:
2.2.2 DMA 傳輸優(yōu)化
在Sobel 進行卷積的實際操作中,輸入圖片對應的矩陣規(guī)模一般大于向量存儲空間,因此,輸入數(shù)據(jù)需暫時置于核外DDR 中,通過DMA 將DDR 內(nèi)的數(shù)據(jù)傳輸?shù)紸M 中。
作為數(shù)據(jù)傳輸?shù)摹爸修D(zhuǎn)站”,DMA 的傳輸時間會影響整個算法的效率。為了提高傳輸速度,本文針對Sobel行卷積操作中的數(shù)據(jù)連續(xù)訪存過程,采用雙緩沖區(qū)傳輸結(jié)構(gòu),如圖5 所示,將AM 空間分成AM0 和AM1 兩部分?;诖四J剑瑪?shù)據(jù)從核外DDR 中傳入AM0 空間,在判斷為有效數(shù)據(jù)之后開始計算,同時,DMA 將下一塊數(shù)據(jù)傳給AM1。當AM1中的數(shù)據(jù)開始計算時,AM0輸出上一次的計算結(jié)果并啟動新數(shù)據(jù)傳輸,即在DMA進行傳輸循環(huán)檢測前將數(shù)據(jù)的運算與傳輸并行化,減少一部分運算時間,從而達到性能優(yōu)化的目的。
圖5 雙緩沖機制示意圖Fig.5 Schematic diagram of double buffer mechanism
與行卷積數(shù)據(jù)傳輸過程不同的是,列卷積存在不連續(xù)的數(shù)據(jù)訪問,無法通過向量指令進行連續(xù)存取。本文通過設(shè)置DMA 的目的索引值作為矩陣每行首元素的地址差,將行卷積矩陣中的每一行按列存儲在矩陣中,最終實現(xiàn)矩陣轉(zhuǎn)置。
2.2.3 數(shù)據(jù)類型轉(zhuǎn)換
在圖像處理庫中,默認圖片矩陣類型為8u(unsigned char),但是FT 向量處理器沒有直接處理8u 類型的指令,針對該問題,本文利用VPE 內(nèi)部混洗/規(guī)約等部件實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換并封裝成接口,從而實現(xiàn)unsigned char 和unsigned int 之間的相互轉(zhuǎn)換,擴充FT 平臺所支持數(shù)據(jù)的類型。
FT-M7002 向量寄存器可一次加載512 位數(shù)據(jù)到向量寄存器中。由于每個VPU 包含16 個VPE,因此每個VPE 中存放4 個unsigned char 類型數(shù)據(jù),要轉(zhuǎn)換成unsigned int 類型,即將每個VPE 中的4 個數(shù)據(jù)分別放入4 個VPE 中。如圖6 所示,將每個原始VPE中的數(shù)據(jù)與0XFF 按位相與,即可得到新的VPE 中的數(shù)據(jù)存放,連續(xù)操作3 次就可實現(xiàn)數(shù)據(jù)轉(zhuǎn)換。
圖6 char to int 類型轉(zhuǎn)換(VPE0 實現(xiàn))Fig.6 char to int type conversion(implementation of VPE0)
圖6 只展示了VPE0 的實現(xiàn),可以對VPU 中的VPE0~VPE15 分別做上述操作。值得注意的是,上述操作得到的數(shù)據(jù)并不是按序存放的,因此,需要對這些數(shù)據(jù)進行一次混洗(shuffle)操作,從而得到正確的數(shù)據(jù)排列方式。混洗單元通過合理配置混洗模式,可以實現(xiàn)VPE 中輸入數(shù)據(jù)的按序存放。
本文以3×3、5×5、7×7 卷積核為例,分析不同尺寸輸入圖片對算法加速比的影響,同時將本文優(yōu)化算法與TMS320C6678 中的Sobel 算法進行性能對比,以分析2 類處理器的單核計算能力。
在飛騰平臺的FT-M7002 開發(fā)板上實現(xiàn)Sobel 算法優(yōu)化,調(diào)用定時器的計時函數(shù)來測試優(yōu)化后程序段的執(zhí)行時間,將FT-M7002 與TI 平臺的高性能數(shù)字信號處理器TMS320C6678 進行對比分析。實驗參數(shù)設(shè)置如表1 所示。
表1 實驗平臺參數(shù)設(shè)置Table 1 Experimental platform parameters setting
Sobel 邊緣檢測算法能在FT 平臺上正確運行是算法優(yōu)化的基礎(chǔ)。為了驗證優(yōu)化算法的正確性,將不同尺寸大小的圖片輸入優(yōu)化算法并運行于FT 平臺,將其結(jié)果矩陣與OpenCV 圖像庫中Sobel 算法的結(jié)果矩陣進行對比,將2 個結(jié)果圖片矩陣按像素點相減取絕對值,小于浮點數(shù)后6 位則認為結(jié)果正確。經(jīng)驗證,本文優(yōu)化算法均能得到正確的處理結(jié)果。
以Sobel 卷積核3×3、5×5、7×7 為例,分別以不同數(shù)據(jù)類型及尺寸的輸入圖片運行Sobel 串行算法和優(yōu)化算法,在FT-M7002 處理器上的運行結(jié)果(時鐘周期)如表2、表3 所示。從中可以看出,對于不同數(shù)據(jù)類型的輸入矩陣,本文優(yōu)化算法可取得1.66~3.14 倍的加速效果。加速效果整體趨勢如圖7、圖8 所示,其中,橫坐標表示輸入矩陣規(guī)模,縱坐標表示本文優(yōu)化算法相較串行算法所取得的加速比。
表2 8u 類型優(yōu)化前后的性能比較Table 2 Performance comparison before and after 8u type optimization
圖8 32f 類型Sobel 優(yōu)化算法相較串行算法的加速比Fig.8 The speedup ratio of 32f type Sobel optimization algorithm compared with serial algorithm
3.3.1 unsigned char 類型測試結(jié)果與分析
表2 所示為8u 類型不同矩陣規(guī)模分別在卷積核為3×3、5×5、7×7 上運行時的時鐘周期以及加速比,圖7 為其對應的加速效果柱狀圖??梢钥闯觯w加速比為1.75 左右,從趨勢上來看,在同一輸入矩陣規(guī)模下,隨著卷積核的增大,計算量也在增大,加速比也增大;在卷積核一定的情況下,加速比隨著矩陣規(guī)模的增大而緩慢增大,最后趨于平穩(wěn),這是因為數(shù)據(jù)存放在DDR 中,隨著矩陣規(guī)模的增大,雖然使用了DMA 雙緩沖結(jié)構(gòu),但是傳輸仍然耗時從而使得加速效果不明顯,另外還需要進行數(shù)據(jù)類型轉(zhuǎn)換,輸入矩陣規(guī)模越大,類型轉(zhuǎn)換也就越耗時。
3.3.2 float 類型測試結(jié)果與分析
表3 所示為float類型不同矩陣規(guī)模分別在卷積核為3×3、5×5、7×7 上運行時的時鐘周期以及加速比,圖8為其對應的加速效果柱狀圖。對比表2、表3可以看出,float類型的整體加速效果明顯優(yōu)于unsigned char類型,主要是因為FT 向量處理器可以直接處理float 類型的數(shù)據(jù),不需要進行數(shù)據(jù)類型轉(zhuǎn)換。對于不同的卷積核,核越大,加速效果越明顯,這是因為隨著核的不斷增大,循環(huán)內(nèi)每次計算的數(shù)據(jù)規(guī)模也就越大,因此,優(yōu)化算法能更好地提升循環(huán)內(nèi)數(shù)據(jù)的并行性。
3.3.3 平臺對比分析
本次實驗的對比測試所用圖片為unsigned char 類型的三通道圖片。在TMS320C6678中運行Sobel算法,在FT-M7002 中運行本文優(yōu)化算法,分別使用TI 與FT平臺的計時函數(shù)記錄運行時間,F(xiàn)T 時鐘周期換算為TI時鐘周期時需要乘16。測試結(jié)果如表4 所示,整體加速效果如圖9 所示。從中可以看出,對于不同大小的圖片矩陣,F(xiàn)T-M7002 向量處理器比TI6678 多核處理器快了1.87~2.08 倍。因此,對于單核密集型運算,F(xiàn)T-M7002 平臺相較TI6678 平臺有一定的計算優(yōu)勢。
表4 FT 與TI 平臺的比較Table 4 Comparison between FT and TI platforms
圖9 FT-M7002 平臺較TI6678 平臺的加速比Fig.9 The speedup ratio of FT-M7002 platform compared with TI6678 platform
本文分析FT-M7002 硬件平臺架構(gòu)和Sobel邊緣檢測算法,基于FT內(nèi)核結(jié)構(gòu)特點對Sobel算法進行優(yōu)化。為了充分發(fā)揮FT-M7002 平臺的高性能計算特性,使用FT 內(nèi)嵌指令對算法進行向量并行優(yōu)化,利用循環(huán)展開的優(yōu)化手段充分發(fā)掘數(shù)據(jù)級并行性。設(shè)計DMA 雙緩沖區(qū)傳輸結(jié)構(gòu)同步數(shù)據(jù)的傳輸與運算,對列卷積進行矩陣轉(zhuǎn)置以解決其不能連續(xù)訪存的不足。針對FT 平臺向量部件不支持unsigned char類型訪存操作的問題,設(shè)計相應的數(shù)據(jù)轉(zhuǎn)換接口。對多種輸入圖片矩陣規(guī)模和卷積核大小進行對比測試,結(jié)果表明,在保證正確性的基礎(chǔ)上,該優(yōu)化算法相較串行算法獲得了1.66~3.14倍的加速比,相較TMS320C6678處理器也取得了1.87~2.08 倍的加速效果,充分驗證了本文所使用優(yōu)化方法的有效性以及FT-M7002 平臺的高性能計算優(yōu)勢。但是,本文目前僅針對單核進行了優(yōu)化研究,下一步將探索多核優(yōu)化問題,并在FT-M7002 平臺上實現(xiàn)OpenCV圖像算法庫的整體優(yōu)化。