陳 云,王夢園,柴曉楠,商建東
(1.鄭州大學(xué)信息工程學(xué)院,河南 鄭州 450001;2.河南省超級計算中心(鄭州大學(xué)),河南 鄭州 450052)
DSP(Digital Signal Processor)起源于20世紀(jì)70年代,針對數(shù)字信號處理中存在的大量累加累乘運(yùn)算設(shè)置乘加器MAC(Multiplication Adder Cycle)部件,結(jié)構(gòu)比較簡單。隨著社會的不斷進(jìn)步,DSP的應(yīng)用領(lǐng)域也變得更加廣泛,為滿足大型稠密線性方程組求解、雷達(dá)信號處理、高清視頻和數(shù)字圖像處理等計算密集型應(yīng)用的高性能計算需求,數(shù)字信號處理器的體系結(jié)構(gòu)出現(xiàn)顯著變化,出現(xiàn)了高性能數(shù)字信號處理器。目前應(yīng)用較多的高性能DSP體系結(jié)構(gòu)主要有片上多核以及核內(nèi)集成支持了單指令多數(shù)據(jù)SIMD(Single Instruction Multiple Data)、超長指令字VLIW(Very Long Instruction Word)技術(shù)的部件, 比如TI的TMS320C6678處理器,片上集成8個DSP核心,單核浮點運(yùn)算能力可達(dá)20 GFlop/s[1,2]。近幾年我國高性能數(shù)字信號處理器的研究也取得了一定的成就,國防科技大學(xué)自主研發(fā)的飛騰FT(FeiTeng)系列多核處理器[3]、向量處理器相繼出現(xiàn)。但是,硬件的快速發(fā)展也會帶來一些問題,如缺乏配套的軟件應(yīng)用,只有適配相應(yīng)的軟件應(yīng)用才能充分發(fā)揮高性能DSP的特殊硬件架構(gòu)優(yōu)勢,實現(xiàn)國產(chǎn)數(shù)字信號處理器在圖像處理、雷達(dá)信號處理等領(lǐng)域的實時性與高效性。因此,基于快速發(fā)展的我國高性能數(shù)字信號處理器,開發(fā)相應(yīng)的高性能軟件應(yīng)用是我們需要考慮并解決的問題。
在圖像處理領(lǐng)域,一般待處理圖像中往往會存在一定程度的噪聲干擾,惡化了圖像的質(zhì)量。高斯平滑濾波作為圖像預(yù)處理的重要組成部分具有優(yōu)良的噪聲平滑性能和邊緣保留能力[4,5],是保證后續(xù)特征提取與識別正確進(jìn)行的基礎(chǔ)?,F(xiàn)有的高斯濾波算法實現(xiàn)并不能充分利用FT平臺的計算性能,會影響到使用該算法的多種大型圖像處理應(yīng)用,因此面向FT系列處理器實現(xiàn)高效的高斯濾波算法具有重要的意義。
目前有很多學(xué)者針對硬件特性對高斯濾波算法進(jìn)行相應(yīng)的優(yōu)化,并取得了一定成果。文獻(xiàn)[6]針對TMS320C6x系列處理器提出了一種單次遍歷實現(xiàn)2次卷積的高斯平滑濾波DSP優(yōu)化方法;文獻(xiàn)[7]針對TMS320C6416處理器的內(nèi)部資源,提出了基于該處理器的空間低通濾波程序的設(shè)計方案;文獻(xiàn)[8]基于CPU的SSE指令集,完成了高斯濾波器的SIMD優(yōu)化遞歸IIR(Infinite Impulse Response)實現(xiàn),并在OpenMP(Open Multi- Processing)的幫助下實現(xiàn)了單指令多數(shù)據(jù)擴(kuò)展流SSE(Streaming SIMD Extensions)版本的并行化;文獻(xiàn)[9]總結(jié)了高斯濾波算法原理和CUDA(Compute Unified Device Architecture)并行計算體系,提出了適合于CUDA的并行高斯濾波算法。但是,由于不同處理器體系結(jié)構(gòu)的差異性,上述并行優(yōu)化算法并不適用于FT系列高性能數(shù)字信號處理平臺。
本文面向國防科技大學(xué)自主研發(fā)的FT-M7002高性能處理器的特殊硬件架構(gòu),設(shè)計高斯濾波并行算法。主要內(nèi)容包含以下幾個方面:(1)分析高斯濾波算法計算特點與FT-M7002體系結(jié)構(gòu);(2)分析高斯濾波算法加速瓶頸,設(shè)計相應(yīng)的優(yōu)化方案;(3)通過手工向量化、控制流消除和循環(huán)展開等優(yōu)化手段充分利用數(shù)據(jù)級與指令級并行性;(4)針對FT-MT2內(nèi)核中的DMA(Direct Memory Access)硬件和向量存儲器結(jié)構(gòu)特點,進(jìn)行了“乒-乓”緩存、DMA數(shù)組轉(zhuǎn)置等優(yōu)化。
高斯濾波廣泛應(yīng)用于減弱圖像中的高斯噪聲,其計算過程就是對一幅圖像進(jìn)行加權(quán)平均的過程,每一個結(jié)果像素點的值都由相應(yīng)輸入圖像像素值與濾波核矩陣進(jìn)行相乘并累加后得到。令I(lǐng)是大小為m*n的輸入圖像矩陣,G(u,v)為高斯函數(shù),O為輸出結(jié)果矩陣,則濾波過程定義如式(1)所示:
(1)
針對本文高斯濾波,G(u,v)定義如式(2)所示:
(2)
其中,u0和v0是均值,代表中心點坐標(biāo),一般取值為0;δ2是方差,代表高斯曲線的寬度[10,11]。
濾波就是對輸入圖像進(jìn)行模糊的過程,可以理解成每一個像素點的值都用其周邊像素點的值的加權(quán)平均值代替。中間像素點的值用周圍像素點的值的平均值代替,中間像素點的值取周圍像素點的值的均值代替,會使中間像素點失去細(xì)節(jié),圖像上就會產(chǎn)生模糊效果。但是,在計算過程中存在周圍像素權(quán)重分配的問題,如果使用簡單的平均顯然是不合理的,因為圖像都是連續(xù)的,越靠近中間點的像素與中間點的相關(guān)性越強(qiáng)。因此,加權(quán)平均的計算方式更合理,距離中心點越近的像素點權(quán)重越大,距離中心點越遠(yuǎn)的像素點權(quán)重越小。由于高斯分布在形狀上是一種鐘形曲線,因此高斯分布是一種可取的權(quán)重分配模式。
在目前常用的圖像處理庫中,高斯濾波一般有2種實現(xiàn)方式,一種是借助快速傅里葉變換FFT(Fast Fourier Transform)實現(xiàn),一種是使用離散化高斯窗口在原圖像上進(jìn)行滑動卷積?;诳焖俑道锶~變換的高斯濾波實現(xiàn)如圖1所示,分別將輸入圖像矩陣和濾波核矩陣進(jìn)行二維FFT計算,根據(jù)時域計算與頻域計算的對應(yīng)關(guān)系,可將時域中的卷積計算轉(zhuǎn)換成頻域中的復(fù)乘運(yùn)算,最后通過二維逆傅里葉變換得到最終的結(jié)果矩陣。該方法的優(yōu)點是計算量與卷積核的大小無關(guān),因此針對卷積核尺寸較大的卷積網(wǎng)絡(luò),F(xiàn)FT方法相比直接卷積方法在降低計算量方面具有明顯的優(yōu)勢,其不足之處就是要付出增加存儲開銷的代價[11]。但是,一般濾波采用的卷積核尺寸都比較小,因此可以選擇使用離散化高斯窗口在原圖像上進(jìn)行滑動卷積的方式實現(xiàn)高斯濾波。
Figure 1 Gaussian filtering implementation based on Fourier transform圖1 基于傅里葉變換的高斯濾波實現(xiàn)
通過離散化高斯窗口在原圖像上進(jìn)行滑動卷積時,先通過二維高斯函數(shù)生成二維高斯核,移動高斯核,將該高斯核與輸入圖像的相應(yīng)位置像素點相乘累加得到相應(yīng)位置的濾波結(jié)果。圖2給出了使用3*3高斯核進(jìn)行滑動卷積的示意圖,在計算像素點I(1,1)濾波結(jié)果時,用高斯濾波核G覆蓋以像素點I(1,1)為中心點的3*3圖像區(qū)域,高斯核G與圖像區(qū)域內(nèi)相對應(yīng)的像素點數(shù)據(jù)相乘并累加,便可得到I(1,1)像素點的高斯濾波處理結(jié)果O(1,1)。計算I(1,2)像素點時,將高斯核G向右移一個像素的位置并重復(fù)上面的計算過程。
Figure 2 Schematic diagram of 3*3 Gaussian kernel sliding convolution圖2 3*3高斯核滑動卷積示意圖
根據(jù)高斯函數(shù)的性質(zhì),二維高斯函數(shù)可以寫成2個一維高斯函數(shù)相乘的形式,因此可以采用可分離濾波器來實現(xiàn)高斯濾波的加速計算。所謂的可分離濾波器,就是把多維卷積轉(zhuǎn)換成多個一維卷積,二維的高斯濾波就是指先對行做一維卷積,再對列做一維卷積。
定義一維高斯函數(shù)為G(u),則:
(3)
根據(jù)式(2)中二維高斯函數(shù)的定義,可得:
(4)
根據(jù)式(4),對式(1)中的卷積計算進(jìn)行改寫:
(5)
式(5)說明了高斯濾波的可分離特性,輸入圖像矩陣與二維高斯濾波核卷積等價于先對輸入矩陣在水平方向與一維行高斯核進(jìn)行卷積,再將卷積結(jié)果在垂直方向與一維列高斯核進(jìn)行卷積。相對于二維滑動卷積該實現(xiàn)方法可以明顯降低算法復(fù)雜度,在數(shù)據(jù)訪問中,分離濾波可以更好地實現(xiàn)數(shù)據(jù)的連續(xù)訪存,提高數(shù)據(jù)局部性。因此,本文將基于FT系列處理器在分離濾波的基礎(chǔ)上實現(xiàn)高斯濾波的并行計算。
FT-M7002是國防科技大學(xué)自主研發(fā)的一款40 nm工藝的高性能DSP處理器芯片,該芯片包含1個RISC CPU核和2個FT-MT2 DSP核。單個計算核擁有32 KB的一級數(shù)據(jù)緩存和512 KB的陣列存儲器AM(Array Memory)空間,核外擁有32 GB的大容量DDR存儲空間[12,13],在圖像處理等需要進(jìn)行大量數(shù)據(jù)運(yùn)算的場合下能很好地發(fā)揮其優(yōu)勢,或嵌入到其他系統(tǒng)中作為信號協(xié)處理模塊。本文主要針對單個DSP核進(jìn)行算法實現(xiàn),因此主要關(guān)注單個核內(nèi)結(jié)構(gòu)。
FT-MT2內(nèi)核基于VLIW結(jié)構(gòu),具體結(jié)構(gòu)如圖3所示,SPU(Scalar Processing Unit)表示標(biāo)量處理部件,VPU(Vector Processing Unit)表示向量處理部件,SVR(Scalar Vector Register)表示標(biāo)向量共享寄存器,SPE(Scalar Processing Element)表示標(biāo)量處理單元,SM(Scalar Memory)表示標(biāo)量存儲器。在該內(nèi)核結(jié)構(gòu)中,SPU和VPU為相互獨(dú)立又相互關(guān)聯(lián)的處理部件,SPU負(fù)責(zé)控制和邏輯計算,VPU主要面向密集型計算,SPU和VPU可以通過SVR進(jìn)行數(shù)據(jù)交互,并且通過廣播操作支持標(biāo)量寄存器到向量寄存器的廣播操作。
向量處理部件(VPU)由16個同構(gòu)向量處理單元VPE(Vector Processing Element)和混洗/歸約部件構(gòu)成[14],VPE內(nèi)部集成4個運(yùn)算部件用于支持標(biāo)量定點和浮點運(yùn)算。AM作為向量數(shù)據(jù)存儲器,為VPU提供向量數(shù)據(jù),同時AM可通過DMA與核外存儲空間進(jìn)行數(shù)據(jù)交互。也就是說該VPU可以同時對16路32位數(shù)據(jù)進(jìn)行向量運(yùn)算,并且支持混洗/規(guī)約操作,針對數(shù)據(jù)密集型運(yùn)算能大量減少數(shù)據(jù)訪存次數(shù),提高運(yùn)算效率。
Figure 3 FT-MT2 core structure圖3 FT-MT2內(nèi)核結(jié)構(gòu)
在分析了FT-M7002體系結(jié)構(gòu)之后,本文結(jié)合該向量處理器內(nèi)核特點與高斯濾波算法性能瓶頸,針對高斯濾波中密集數(shù)據(jù)訪問設(shè)計了優(yōu)化實現(xiàn),能夠明顯減少訪存次數(shù),最后為進(jìn)一步提升算法性能設(shè)計了相應(yīng)的數(shù)據(jù)傳輸優(yōu)化。
與二維高斯核滑動卷積計算高斯濾波相比,分離濾波器能夠減少計算量,提高訪存的局部性,但是當(dāng)輸入圖像較大時,內(nèi)存訪問量依然很大,影響算法性能。因此,本文結(jié)合FT-M7002體系結(jié)構(gòu)特點,設(shè)計一種基于分離濾波器的高斯濾波優(yōu)化實現(xiàn)過程,通過充分利用FT-MT2內(nèi)核中的VPU減少內(nèi)存訪問次數(shù),在保證正確性的基礎(chǔ)上提高高斯濾波算法性能。
高斯濾波算法主要由生成高斯卷積核、邊界填充、行濾波、列濾波4部分構(gòu)成,其中行濾波和列濾波部分存在大量密集數(shù)據(jù)訪問,因此本文主要針對這2部分進(jìn)行優(yōu)化實現(xiàn)。本文對于列濾波的訪存不連續(xù)進(jìn)行相應(yīng)的DMA數(shù)據(jù)轉(zhuǎn)置優(yōu)化,此外針對算法中DMA傳輸耗時進(jìn)行了相應(yīng)的優(yōu)化設(shè)計。
根據(jù)圖3中FT-M7002內(nèi)核結(jié)構(gòu)可知,VPE從AM中讀取數(shù)據(jù)進(jìn)行運(yùn)算,比如vec_ld向量指令,從AM中連續(xù)加載16個32位數(shù)據(jù)放在VPE0~VPE15中,而SM主要為標(biāo)量操作提供數(shù)據(jù)支持。在高斯濾波中,一般來說高斯核矩陣的規(guī)模都比較小,而且根據(jù)算法的需要,高斯核數(shù)據(jù)需要標(biāo)量讀取,因此將高斯核數(shù)據(jù)置于SM中,輸入矩陣置于AM或DDR中。針對行列濾波部分,圖4給出了3*3高斯核與輸入圖像矩陣進(jìn)行濾波操作示意圖,其中,I表示輸入圖像矩陣,cn表示輸入圖像通道數(shù),G表示高斯濾波核矩陣。通過FT-M7002向量指令分別從AM按行加載16個輸入矩陣數(shù)據(jù),從SM中廣播對應(yīng)高斯核數(shù)據(jù)到VPE中進(jìn)行向量乘加運(yùn)算,可以看到該方法可以明顯減少訪存次數(shù),且充分復(fù)用已取數(shù)據(jù)。
Figure 4 Schematic diagram of 3*3 Gaussian kernel line filtering optimization圖4 3*3高斯核行濾波優(yōu)化實現(xiàn)示意圖
基于可分離濾波器的高斯濾波主要由生成高斯卷積核、邊界填充、行濾波和列濾波4部分構(gòu)成,經(jīng)過分析高斯濾波算法主要循環(huán)層都在行列濾波部分,因此本文主要對行列濾波部分進(jìn)行并行性優(yōu)化。結(jié)合FT-M7002體系結(jié)構(gòu)特點,為充分利用核內(nèi)VPU,減少訪存操作,本文采用FT-M7002向量指令集完成行濾波操作,可以有效地并行開發(fā)程序,提高數(shù)據(jù)集并行性。下面給出了行列濾波中核心段優(yōu)化代碼,相對于串行程序,該優(yōu)化代碼一次循環(huán)可以處理16個數(shù)據(jù),明顯減少內(nèi)層循環(huán)次數(shù)。其中,cn代表輸入圖像通道數(shù),當(dāng)輸入圖像尺寸不是16的倍數(shù)時需要增加尾循環(huán)。當(dāng)濾波核較小時可將其全部廣播到VPE中完成與輸入矩陣的乘加操作,當(dāng)濾波核較大時,需要增加一層循環(huán)來控制廣播到VPE中的卷積核,會增加整個算法的時間,由于高斯濾波常用3*3,5*5高斯核,因此將不同尺寸高斯核分開可提升較小高斯核計算性能。
before
fori=0:1:row
forj=0:1:col*cn
S0=0;
g=j;
fork=0:1:ksize
S0 +=G[k]*I[i][g];
g+=cn;
endfor
O[i][j]=S0;
endfor
endfor
input:輸入矩陣I。
output:結(jié)果矩陣O。
after
ifksizeis 3 or 5 or 7, for exampleksizeis 3
vectorG(1)=vec_svbcast(G(1)); /*Broadcast Gaussian core to VPE*/
vectorG(2)=vec_svbcast(G(2)); /*Broadcast Gaussian core to VPE*/
vectorG(3)=vec_svbcast(G(3)); /*Broadcast Gaussian core to VPE*/
fori=0:1:row
M7002_vector int *I_cn= (M7002_vector int *)0x040000000; /*Define pointer to AM*/
M7002_vector int *O_cn= (M7002_vector int *)0x040040000;
M7002_datatrans_cv(I,I_cn,(col+ksize) * 4); /*DMA transfer input matrixIto AM*/
forj1=0:16:col*cn-16 //parallel for data
vectorI1=vec_ld(j1,I_cn);
vectorI2=vec_ld(j1+cn,I_cn);
vectorI3=vec_ld(j1+2cn,I_cn);
vectorO1=vec_mul(vectorG(1),vectorI1);
vectorO2=vec_mul(vectorG(2),vectorI2);
vectorO3=vec_mul(vectorG(3),vectorI3);
vectorO=vec_add(vectorO1,vec_add(vectorO2,vectorO3));
vec_st(vectorO,j1,O_cn);
endfor
M7002_datatrans_cv(O_cn,O,j1);
forj2=j1:1:col*cn/*ifcol%16 !=0*/
O(i,j2)=G(1)*I(i,j2)+G(2)*I(i,j2+cn)*G(3)*I(i,j2+2cn);
endfor
endfor
AM為VPU提供向量數(shù)據(jù)訪問時,可同時支持2個向量數(shù)據(jù)的load/store操作以及標(biāo)量單元和DMA的向量數(shù)據(jù)訪問,且VPE有4條可并行執(zhí)行的流水線。為充分利用FT-M7002的以上優(yōu)勢,本文采用循環(huán)展開發(fā)掘高斯濾波向量算法的指令級并行性。若對上述行濾波部分進(jìn)行2次循環(huán)展開,則1次循環(huán)可以處理64個數(shù)據(jù),對于輸入尺寸較小的圖像無法達(dá)到預(yù)期優(yōu)化效果。因此,本文進(jìn)行1次循環(huán)展開,1次循環(huán)處理32個數(shù)據(jù),并對剩余數(shù)據(jù)設(shè)置尾循環(huán)處理,充分發(fā)揮高斯濾波算法的指令級并行性。
由于AM存儲空間有限,當(dāng)輸入矩陣較大時AM一次不能加載整個卷積矩陣,此時輸入數(shù)據(jù)需要存放在核外共享空間DDR中并通過DMA傳輸?shù)紸M,DMA傳輸?shù)臅r間會影響整個算法的性能,且列濾波過程中存在數(shù)據(jù)的不連續(xù)訪問,導(dǎo)致無法進(jìn)行向量讀寫。為了使DMA傳輸與FT-MT2內(nèi)核計算并行,從而隱藏DMA傳輸時間;為了使列濾波計算部分能夠連續(xù)讀取,從而使該部分能夠向量化實現(xiàn),本節(jié)主要實現(xiàn)了DMA傳輸優(yōu)化。
(1)為提高行濾波計算的速度,用“乒-乓”的方式進(jìn)行DMA數(shù)據(jù)傳輸,可將FT-MT2內(nèi)核計算與DMA數(shù)據(jù)傳輸并行實現(xiàn)。此時將AM空間按地址劃分為相等的2部分,分別為Buffer0和Buffer1,先將數(shù)據(jù)從DDR中通過DMA傳輸?shù)紹uffer0,由于Buffer0中需要保留一部分空間來存放計算結(jié)果,因此傳輸?shù)臄?shù)據(jù)大小應(yīng)該為Buffer0空間的一半。然后從Buffer0開始計算,Buffer0計算的同時,Buffer1進(jìn)行數(shù)據(jù)傳輸,當(dāng)Buffer1開始計算時,Buffer0輸出上一次的計算結(jié)果并啟動新數(shù)據(jù)傳輸,采用“乒-乓”的數(shù)據(jù)傳輸方式可以將計算時間和傳輸時間重疊起來,提高算法的執(zhí)行效率。
(2)該算法實現(xiàn)中列濾波過程存在不連續(xù)訪存,無法通過向量指令進(jìn)行連續(xù)存取,因此需要對行濾波結(jié)果進(jìn)行轉(zhuǎn)置變換,以實現(xiàn)列濾波的連續(xù)讀取。FT-M7002中的DMA傳輸模塊可以由設(shè)計人員自行配置傳輸方式,比如可以根據(jù)設(shè)置的幀索引值對相鄰2個幀的首數(shù)據(jù)單元進(jìn)行地址跳變的讀或?qū)?,因此可以通過適當(dāng)配置DMA的索引值,實現(xiàn)矩陣的轉(zhuǎn)置。如使用DMA將DDR中的行濾波結(jié)果矩陣O1中的第1行按列存儲在AM的O2中,DMA配置中目的幀索引值配置為O2每行首元素的地址差,則DMA會將O1[0][1]根據(jù)索引值間隔搬移到O2[1][0]中,O1[0][2]搬移到O2[2][0]中,依此將矩陣O1中第1行轉(zhuǎn)置到矩陣O2中第1列,然后完成剩余行的轉(zhuǎn)置。
本節(jié)介紹在FT-M7002平臺上高斯濾波算法優(yōu)化實現(xiàn)相對于高斯濾波串行算法的性能提升,以3*3和5*5的高斯核為例,分析不同尺寸輸入圖像對算法加速比的影響,同時與TMS320C6678中高斯濾波算法性能進(jìn)行對比,分析2類處理器的單核計算能力。
在飛騰平臺的FT-M7002處理器上實現(xiàn)高斯濾波算法優(yōu)化,調(diào)用定時器的計時函數(shù)記錄該算法執(zhí)行時間,使用TI平臺的高性能數(shù)字信號處理器TMS320C6678進(jìn)行對比分析,具體實驗環(huán)境如表1所示。
Table 1 Experimental platform parameters表1 實驗平臺參數(shù)
面向飛騰平臺的高斯濾波優(yōu)化算法能夠在具體應(yīng)用中使用的基礎(chǔ)是濾波結(jié)果的正確性,同時在保證正確性的基礎(chǔ)上提高算法執(zhí)行效率是本文優(yōu)化的目的。因此,本次實驗的內(nèi)容主要有2部分,分別是正確性驗證和性能提升驗證。
正確性驗證:在FT平臺上編寫程序,調(diào)用前面實現(xiàn)的高斯濾波優(yōu)化算法,使用FT-M7002編譯器編譯程序為可執(zhí)行文件,加載可執(zhí)行文件到FT-M7002處理器中運(yùn)行并保存運(yùn)行結(jié)果,與Intel開發(fā)的OpenCV圖像庫中高斯濾波結(jié)果進(jìn)行對比。
性能提升驗證:性能提升驗證包含2部分,分別是在FT-M7002中相對于串行高斯濾波算法的加速比,以及相對于TI平臺的計算性能。
(1)正確性分析。
以3*3和5*5的高斯核為例,在FT平臺上運(yùn)行高斯濾波優(yōu)化算法并打印結(jié)果矩陣,與Intel開發(fā)的OpenCV圖像庫中高斯濾波結(jié)果進(jìn)行對比。將2個結(jié)果相減取絕對值,以萬分之一為標(biāo)準(zhǔn),精確度小于萬分之一的認(rèn)為結(jié)果正確。結(jié)果如表2所示,對于不同尺寸的輸入圖像,本文算法均能取得正確的處理結(jié)果。
Table 2 Results of correctness analysis表2 結(jié)果正確性分析
(2)加速比分析。
選取高斯濾波常用3*3和5*5高斯核,分別運(yùn)行高斯濾波串行算法與高斯濾波優(yōu)化算法并記錄運(yùn)行時間。在FT-M7002處理器上的測試結(jié)果如圖5所示,橫坐標(biāo)表示濾波矩陣規(guī)模,縱坐標(biāo)表示本文算法相對于串行高斯濾波算法的加速比??梢钥闯鰧τ诓煌笮〉妮斎雸D像,優(yōu)化后高斯濾波算法能取得1.3~1.41倍的加速比,由于DMA傳輸耗時以及算法中生成高斯濾波核、邊界填充等模塊耗時的影響,該算法性能提升沒有達(dá)到理論值。
Figure 5 Speedup of optimized Gaussian filtering algorithm圖5 優(yōu)化后高斯濾波算法加速比
從趨勢上來看,在濾波核規(guī)模一定的情況下,算法加速比隨著濾波矩陣規(guī)模的增加先增加,后趨于穩(wěn)定。主要原因在于,本文算法將讀入數(shù)據(jù)都放在DDR存儲空間中,由于數(shù)據(jù)傳輸耗時導(dǎo)致加速效果達(dá)不到理論值,但是隨著輸入數(shù)據(jù)的增大,DMA傳輸耗時所占比重變小,加速效果也有所提升。對于不同高斯核,可以看出,高斯核規(guī)模越大加速效果越明顯,主要原因是,高斯核越大,每次循環(huán)中計算的數(shù)據(jù)越多,因此優(yōu)化后的算法能更好地提升循環(huán)內(nèi)數(shù)據(jù)的并行性。
在TMS320C6678中運(yùn)行高斯濾波算法并在FT-M7002中運(yùn)行本文優(yōu)化算法,分別使用TI與FT平臺的計時函數(shù)記錄運(yùn)行時間。在FT-M7002中運(yùn)行本文優(yōu)化算法時需要先開啟Cache選項,測試結(jié)果如圖6所示,結(jié)果表明,對于不同尺寸濾波圖像,F(xiàn)T-M7002向量處理器相對于TI多核處理器取得了1.15~1.71倍的加速比??梢钥闯鲈跒V波核規(guī)模一定的情況下,相對于TI平臺,F(xiàn)T平臺處理不同尺寸圖像的性能加速基本相同,但是在圖像尺寸一定的情況下,5*5高斯核的FT平臺相對于TI平臺的性能加速明顯高于3*3高斯核的。
相對于TI處理器,F(xiàn)T處理器有更長的向量寄存器,因此單核運(yùn)算中,針對計算密集型程序FT平臺相對于TI平臺有一定的計算優(yōu)勢。
Figure 6 Speedup comparison of optimized Gaussian filtering algorithm with Gaussian filtering algorithm on TI6678圖6 優(yōu)化后高斯濾波算法相對于TI6678中高斯濾波算法加速比
針對國產(chǎn)高性能DSP的快速發(fā)展過程中缺乏相應(yīng)軟件應(yīng)用的問題,本文在深入理解高斯濾波算法的基礎(chǔ)上,對高斯濾波算法進(jìn)行了針對FT-M7002 DSP的體系結(jié)構(gòu)特點的優(yōu)化實現(xiàn)。為了充分利用該平臺的核內(nèi)資源,本文使用編譯器內(nèi)嵌指令進(jìn)行手工向量化改寫,并使用控制流消除、循環(huán)展開等方法挖掘指令級并行性。同時,通過使用“乒-乓”緩存的方式實現(xiàn)了DMA數(shù)據(jù)傳輸與向量計算的并行。為了避免計算階段出現(xiàn)向量訪存不連續(xù),在列濾波計算階段對數(shù)組進(jìn)行轉(zhuǎn)置存放。本文在多種濾波核大小及圖像矩陣規(guī)模下進(jìn)行了性能測試,結(jié)果表明:相對于沒有進(jìn)行優(yōu)化的串行實現(xiàn),優(yōu)化后閾值分割算法獲得了1.3~1.41倍的加速比。同時,相較于dsplib庫中高斯濾波算法在TMS320C6678平臺上的運(yùn)行性能,獲得了1.15~1.71倍的加速效果,驗證了本文優(yōu)化實現(xiàn)的有效性以及FT DSP核的計算性能優(yōu)勢。然而,該優(yōu)化實現(xiàn)目前只針對32位輸入數(shù)據(jù)類型,下一步將面向FT DSP核繼續(xù)完善高斯濾波算法,使其支持更多數(shù)據(jù)類型。