999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向YHFT-M7002平臺圖像中值濾波算法的優化實現

2023-10-09 01:46:50王夢園柴曉楠商建東
計算機應用與軟件 2023年9期
關鍵詞:指令優化

王夢園 柴曉楠 陳 云 商建東

(鄭州大學電子與信息工程學院 河南 鄭州 450000)

(河南省超級計算中心 河南 鄭州 450000)

0 引 言

隨著大規模集成電路和信息技術的發展,圖形圖像處理技術應運而生并得到了廣泛的應用,OpenCV(Open Source Computer Vision Library)就是隨之產生的圖形圖像處理庫之一。由于OpenCV中包含很多有關圖像處理方面的通用算法且為不同的平臺提供了豐富的底層支持,已經成為計算機視覺領域最強大的開源工具之一。其中的中值濾波(Median Filter)作為一種通用的非線性信號處理算法,能夠在保護圖像邊緣的基礎上抑制消除一些孤立的噪聲點,并且在濾除疊加白噪聲等方面的運算速度較快性能極好,在圖像去噪領域應用非常廣泛。

在圖形圖像處理領域,如何盡量提升處理的實時性一直是一個重要的問題,由于DSP的高性能、低功耗等特點可以滿足圖像處理實時性以及密集型計算的需求,目前的應用愈加廣泛。雖然國產DSP研究起步較晚但近年來隨著國產化需求愈發強烈,國產的高性能處理器發展也邁入了新的階段,其中比較有代表性的是國防科技大學研制的高性能處理器FT-M7002,其內核針對運算密集型算法進行了高度優化[1-2],在信號處理等需要進行大量數據運算的場合下能很好地發揮優勢。

目前國內外針對在硬件平臺上的中值濾波優化研究較少,大部分研究成果集中在對中值濾波自身算法的優化層面[3-17]。例如文獻[6]提出了一種快速中值濾波算法,對傳統算法重復的數據訪存重新進行了設計,但沒有結合硬件進行進一步優化。文獻[8]提出了一種改進的中值濾波器針對降噪和改進細節進行了改進,提升了算法復雜度,但沒有改進算法的計算量。

本文面向FT-M7002平臺,在完成OpenCV2.4.9移植的基礎上,提出針對該平臺特性的中值濾波算法向量化優化實現。首先分析FT-M7002體系結構特點與中值濾波算法實現方式,并通過對opencv中中值濾波程序進行熱點測試來分析程序的性能瓶頸并進行針對性優化。主要實現步驟有:(1) 將需要處理的數據排布成適合向量化操作的順序;(2) 針對算法中密集型數據訪存,使用手工向量化、循環展開等優化手段以充分利用數據級與指令級并行性;(3) 針對DMA傳輸產生的數據傳輸開銷,采用乒乓緩存是數據傳輸與數據計算同時進行;(4) 針對實時性與高效性設計對比實驗,對改進之后的算法性能進行詳細的測試。

1 YHFT-M7002體系結構

1.1 FT-M7002總體結構

YHFT-Matrix是國內自主研發的面向圖像處理、無線通信和視頻的高性能DSP。其總體結構如圖1所示,板卡包含2個FT-MT2 DSP核、1個RISC CPU核、2個IO節點、全局Cache、核間同步、1個MCU及PCIE、SRIO、GMAC等IO設備。內核和核外設備連接為環形[2]。

圖1 FT-M7002總體結構

1.2 FT-MT2內核結構

FT-MT2內核為VLIW(超長指令字)結構,包括一個五流出標量處理單元和一個六流出向量處理單元。標量處理單元SPU包括指令流控部件、SPE、SM。SPE主要用來接收標量運算類的指令,將指令譯碼后在對應的功能單元執行操作。SM主要實現標量數據的訪存。向量處理單元VPU由16個同構的VPE以及混洗/歸約部件組成,負責對數據密集以及運算量大的任務進行并行處理。VPE支持歸約操作以及混洗操作。圖2為向量存儲體結構,由16個Bank組成,統一編址交叉存放可以進行數據共享,且與向量處理單元的VPE0-VPE15對應,可以為VPE提供帶寬為512位的向量數據讀寫訪問[18-19]。

圖2 向量存儲體結構

2 中值濾波算法原理及實現方法分析

2.1 中值濾波算法原理

中值濾波的計算方式類似于卷積計算,中值濾波原理:對一維數字序列Xk,定義濾波窗口的長度為L,L=2N+1,N為正整數。為了保證使輸出信號長度不變,在濾波前需要對濾波數據進行邊界填充,在輸入信號邊界分別填充N個信號,具體的填充方式視情況而定[20],然后在信號序列XK-N,XK-N+1,…,XK,…,XK+N中滑動窗口,之后對窗口中的這些值進行排序操作之后,位于K處的序列樣本值即為中值濾波的輸出,用公式表示為:

YK=med{XK-N,XK-N+1,…,XK-1,XK+1,…XK+N}

(1)

式中:{XK,YK|1≤K≤L};med(·)表示取XK序列的中值。

對于對二維圖像信號Xij,其中值濾波算法流程和一維序列類似,二維中值濾波輸出值為:

Yij=medXij=med{Xi+r,j+s:r,s∈A}

(2)

式中:A為截取圖像數據的二維窗口。圖3為濾波窗口為正方形大小為3×3時的中值濾波過程以及結果。

(a) 濾波過程 (b) 濾波結果

2.2 中值濾波具體實現方法分析

Opencv的中值濾波算法實現為了達到不同濾波核大小的情況下最好的性能,根據濾波核的大小選用了不同的實現方法,當中值濾波采用的濾波核大小比較小(Ksize≤5)時,由于每次迭代需要比較計算的數據量比較小,所以可以直接采用傳統的直接排序方法計算中值,以3×3的濾波核為例進行說明,其基本思路是先對數據進行排序(算法中的行向有序),然后再在三組有序的數據中找到數據合并后的中位數,首先需要取出有序序列中最小值中的最大值、最大值中的最小值、中間列向的中值,三個數進行比較之后的中值就是輸出結果。

圖4為濾波核大小為3×3時快速算法流程,其中p0-p8為3×3濾波核的9個數據,數字代表比較操作的執行順序,3×3的數據中經過比較操作之后p4位置的數據就是輸出值。

圖4 濾波核為3×3時快速濾波算法流程

ksize>5時,opencv使用的算法是利用直方圖的快速算法,在中值濾波的窗口n×m移動一列時,其實質是減去了左邊一列m個像素值并增加了最右邊的一列m個像素值,其中間的mn-2n個像素值保持不動,如圖5所示,所以只需要考慮變化的兩列像素值對窗口中值的影響(將mn個像素的灰度直方圖存儲在窗口中,并在窗口移動時對其進行更新)這樣可以避免對大量沒有變動的像素值進行比較,從而解決傳統濾波算法重復計算的問題。

(a) 濾波核向右滑動時 變化的像素 (b) 濾波核向下滑動時 變化的像素

3 面向FT-M7002平臺的中值濾波算法優化實現

在對FT-M7002的體系結構以及向量部件特點等進行分析之后,針對中值濾波算法設計FT平臺上的一般實現方法,并對此算法的數據密集運算部分進行了數據級和指令級層面的優化,進一步提升了此算法的性能。

3.1 向量化優化

SIMD(Single Instruction Multiple Data)單指令多數據運算可以幫助CPU實現數據并行,提高運算效率。FT-M7002板卡中的AM向量模塊由16個向量存儲體組成,每個存儲體都包含16個VPE,并且VPE對應的VLIW執行包中的向量指令可以同時調用16個VPE中的數據進行操作。所以在讀取完圖片數據之后,可以利用DMA傳輸模塊將數據傳輸到AM空間,使得一次操作運算可以對16個VPE中的數據同時進行,可以達到提升運行效率的效果[2]。

3.1.1總體實現流程

以圖6為例說明基于向量處理器的中值濾波的實現方法.設濾波核大小為3×3,首先使用DMA將已經轉化成的矩陣數據從DDR中傳輸到AM空間;向量寄存器從AM空間中加載矩陣中第一行和第二行的數據調用已經寫好的向量接口進行比較,將結果存放在對應的位置;繼續加載相應的數據進行上述操作,直至完成所有的比較操作之后,將結果傳輸回標量空間。標量算法的核心在于核內9個像素值的比較排序,一共需要19次比較排序,若在FT平臺使用向量寄存器完成比較操作則可以同時進行16次對像素的比較,理論上可以產生16倍左右的加速效果。

圖6 FT平臺上中值濾波算法示意圖

3.1.2數據搬移

由于FT-M7002在使用向量指令進行數據的向量操作的時候,需要從AM空間進行數據的訪存,但是AM的存儲空間比較小,數據量比較大時AM空間不能完全存放,所以為了提升性能并且滿足向量操作的需要,在中值濾波的計算過程之前利用DMA將存儲在DDR的數據搬移到AM地址中進行計算,向量計算完成之后再使用DMA將數據重新傳送回標量空間的地址中進行后續操作。

直接存儲器訪問(Direct Memory Access,DMA)是一種在系統內部轉移數據的獨特外設,可以獨立于CPU進行數據的傳輸交換[21]。在實際應用過程中由于核內存儲器的空間大小的限制,需要將數據存儲在DDR中,再使用DMA根據訪問地址向AM或者SM空間發起讀寫操作,每次啟動DMA可完成一個二維數據塊的傳輸。通過使用DMA傳輸可以將輸入圖片矩陣連續地存放在AM存儲空間中,從而可以直接利用7002向量指令存取數據,保證了數據的局部性,減少不必要的訪存操作。

3.1.3FT-M7002向量指令集改寫

中值濾波算法向量化優化的重點在于標量比較指令的向量化改寫,以float類型為例,因為FT-M7002的vec_lt(小于)、vec_fcmpg(大于)比較指令返回的值是int型的0或1,不能直接得到比較后對應的數據,所以還需要利用類型轉換指令vec_fxts和乘法指令vec_muli進行組合來取到比較大小之后的數值,以小于指令為例,要取a、b中較小的值首先需要使用vec_lt指令分別比較(ab)、(ba),兩個返回的結果值利用vec_fxts進行轉換之后分別與a、b相乘,再使用vec_eq判斷兩個值是否相等,返回的值與b相乘之后把得到的三個值進行加法操作,就可以得到較小的值。大于指令也是類似的原理,為減少代碼的冗余將上述指令集合封裝成兩個比較大小的通用函數接口,進行向量化改寫時可以直接調用這兩個向量接口來完成比較指令的替換。部分代碼示例如下:

vector float(vec_minf)(vector float a,vector float b)

{

vector signed int t=vec_lt(a,b);

vectoe float t1=vec_fxts(t);

vecroe float r2=vec_muli(t1,a);

vector signed int t3=vec_lt(b,a);

vectoe float t4=vec_fxts(t3);

vector float t5=vec_muli(t4,b);

vector signed int t6=vec_eq(b,a);

vector float t7=vec_fxts(t6);

vector float t8=vec_muli(t7,b);

vector float dst=vec_add(t2,t5);

dst=vec_add(t8,dst);

return dst;

}

3.2 DMA傳輸優化

由于處理器的時鐘頻率和計算性能增長速度遠遠大于主存DRAM訪問的增長速度,即便是cache和數據預取可以減少訪存時間但解決不了根本問題,并且FT-M7002的特殊結構導致在進行向量運算時需要利用DMA將數據搬移到AM空間中,導致數據傳輸需要的時間占比過多影響程序的性能。對于這些問題可以利用雙Buffer機制來解決[22]。也就是在DMA開始傳輸循環檢測之前將其和計算程序運行并行起來,同時進行數據傳輸和運算,相當于隱藏一部分運算時間,從而達到性能優化的目的。

圖7為雙Buffer機制的示意圖,首先數據的初始化配置按順序依次向Buffer0、Buffer1傳輸數據。進入循環后首先檢測Buffer0的數據輸入是否完成,若已經完成傳輸則對其進行向量計算操作,同時DMA開始向Buffer1中傳輸數據,若Buffer1中的數據傳輸完成且向DDR寫回后,就開始新的計算同時對Buffer0中的數據進行更新。雙Buffer循環次數根據運算的數據量而定,循環結束后需要對循環中最后一次傳入Buffer0和Buffer1中的數據進行計算然后再將數據傳出到DDR中完成全部計算。

圖7 雙Buffer機制示意圖

使用雙Buffer優化時,具體AM空間的劃分如圖8所示,將AM空間劃分成Buffer0和Buffer1兩個部分,分別屬于AM中地址0X3XXXX60000的兩側,兩部分都包括輸入數據空間和保留空間。

圖8 AM數據布局

3.3 其他優化

為進一步提升優化效果,在進行以上優化方法的基礎上嘗試進行了核心代碼段部分最內層循環的展開優化,通過增加每次迭代計算的元素的數量來減少循環的迭代的次數以提供更多的軟件流水并行,減小循環開銷的影響。但循環展開會大大增加生成的目標代碼的體積,因此在使用循環展開時要同時考慮選擇多大的展開度以及這個展開度對空間開銷比例的影響,在盡量不會使目標代碼空間消耗激增的前提下獲得最高的時間收益。

實際進行循環展開優化時,通過多次實驗確定最優的循環展開因子為2,實驗結果均為在循環展開因子為2時的測試結果,充分挖掘了程序的指令級并行性以獲得最好的加速效果。

4 實驗與結果分析

4.1 實驗環境

在FT-M7002上對不同情況下中值濾波算法的性能進行測試,由于在FT平臺上不同的數據類型對應使用的向量指令不同,所以實驗結果對使用較多的三種數據類型(unsigned char、unsigned int、float)進行分開測試,并與未進行優化之前的Opencv濾波算法運行周期進行對比。

實驗平臺中,FT-M7002的主頻為1 GHz(雙精度峰值性96GFLOPS),單核L1D大小為32 KB,AM向量空間大小為512 KB。

4.2 算法正確性及性能測試

4.2.1unsignedchar類型測試結果

unsigned char是圖像處理庫應用較多的數據類型,但由于FT平臺的向量寄存器較長還沒有直接針對此類型的向量化指令,針對這個問題借助平臺的混洗以及邏輯操作等指令提出一種通用的unsigned char和unsigned int進行數據類型轉換的接口,通過調用接口將數據類型轉換成為unsigned int類型進行操作,計算完成之后的結果再使用接口轉換回unsigned char類型。

表1為濾波核為3×3時,unsigned char類型在不同的圖片像素大小時的加速效果,可以看出在結果正確的前提下經過優化后的程序加速效果平均在13倍左右,加速比隨著圖片數據量的增大呈線性增長的趨勢。原因在于隨著數據量的增大其核心計算部分的耗時在程序整體運行時間占比增大,并且DMA傳輸耗時占比變小,所以加速效果呈現線性增大的趨勢。

表1 unsigned char類型濾波核3×3時測試結果

表2整理了濾波核大小為5×5時程序的加速比。實驗結果顯示,經過優化后的程序加速效果為7倍左右,其加速效果不如3×3的主要原因在于當濾波核大小為5時,其一次內層循環計算量是濾波核為3時的6倍多,需要用到大量的向量寄存器,產生了較多的時間折損導致加速比較低。在不同數據量大小的情況下數據量較大時的數據級和指令級的并行更多,加速效果也比數據量較小時更好。

表2 unsigned char類型濾波核5×5時測試結果

4.2.2unsignedshort類型測試結果

當輸入圖片的數據類型為unsigned short時,由于向量部件計算16位數據時需要將兩個16位數據組合放在一個寄存器中進行計算,就導致讀取數據不支持產生奇數位偏移。為解決這個問題提出一種通用的unsigned short與unsigned int數據類型互相轉換的接口,實際計算時可以調用接口把數據轉換成unsigned int類型進行計算,但是使用接口轉換數據就不可避免地會產生額外的數據傳輸成本。如表3所示,濾波核3×3時unsigned short類型加速效果為12倍左右,并且隨著數據量的增大呈增加趨勢。

表3 unsigned short類型濾波核3×3時測試結果

表4為濾波核大小為5×5數據類型為unsigned short類型時的測試結果,可以看出優化后的算法加速比大概為5倍左右,原因是數據類型轉換耗費時間較多,并且濾波核增加計算量呈指數型增長,所以濾波核為5時的加速比較低。

表4 unsigned short類型濾波核5×5時測試結果

4.2.3float類型測試結果

表5統計了濾波核大小為3×3時,32位浮點類型在不同數據量的情況下最高可以達到16.6倍左右的加速效果。由于float類型的中值濾波在進行向量化改寫時可以直接使用對應的向量指令,無須進行類型轉換,節省了較多運行時間,之后又結合了上文多種優化方法進行了優化加速,所以其效果得到了明顯提升。

表5 float類型濾波核3×3時算法測試結果

當濾波核大小為5×5時,由于這種情況下計算量較大,并且32位浮點本身在計算過程中需要將部分數據由整型轉換為浮點,在計算量大的情況下時間折損占比更多,加速比效果不如3×3,表6為不同數據量情況下的測試數據,加速比大概為5倍左右。

表6 float類型濾波核5×5時算法測試結果

5 結 語

本文面向國產FT-M7002平臺提出一種中值濾波的實現方法,并結合平臺的硬件特性使用手工向量化改寫、數據傳輸優化、循環展開等優化方式,充分挖掘算法數據級以及指令級的并行性,實現程序性能提升的目的。本文在多種濾波核大小及不同數據類型輸入圖片的情況下進行性能測試,結果表明:相對于沒有進行優化的串行實現,該優化使程序獲得了5~16不等的加速比,驗證了本文所提出優化的有效性以及FT DSP核的計算性能優勢。下一步將繼續完善其他常用圖像處理算法在FT DSP平臺的優化實現。

猜你喜歡
指令優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
由“形”啟“數”優化運算——以2021年解析幾何高考題為例
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
基于低碳物流的公路運輸優化
現代企業(2015年2期)2015-02-28 18:45:09
主站蜘蛛池模板: 欧美激情综合| 自拍中文字幕| 国产精品专区第1页| 国产精品久久国产精麻豆99网站| 九色综合伊人久久富二代| 青青网在线国产| 美女被操黄色视频网站| 欧美亚洲国产一区| 一区二区影院| 亚洲国产亚综合在线区| 亚洲综合激情另类专区| 少妇精品久久久一区二区三区| 成人无码一区二区三区视频在线观看 | 欧美一级一级做性视频| 国产精品三级av及在线观看| 欧美成a人片在线观看| 日韩国产另类| 成人看片欧美一区二区| 国产精品视频猛进猛出| 91精品aⅴ无码中文字字幕蜜桃| 成人欧美日韩| 91青青视频| 香蕉网久久| 久久国产精品77777| 伊人久久大香线蕉成人综合网| 日韩精品无码免费一区二区三区| 97狠狠操| 亚洲欧美一区二区三区麻豆| 欧美啪啪视频免码| 成人小视频网| 制服丝袜 91视频| 日本国产精品| 有专无码视频| 欧美成人亚洲综合精品欧美激情| 亚洲精品福利视频| 国产精品毛片一区视频播| 久久综合九色综合97婷婷| 国产区人妖精品人妖精品视频| 一级毛片高清| 无码一区中文字幕| 国产喷水视频| 日韩天堂在线观看| 激情爆乳一区二区| 97在线公开视频| av一区二区三区在线观看| 欧美成人国产| 在线无码九区| 四虎影视国产精品| 国产成人无码AV在线播放动漫| 成人免费黄色小视频| 一级毛片免费观看不卡视频| 国产一级毛片网站| 久久精品丝袜| 国产在线观看成人91| 无码网站免费观看| 在线观看热码亚洲av每日更新| 国产视频a| 精品久久久久无码| 成年人视频一区二区| 国产精品白浆在线播放| 免费啪啪网址| 十八禁美女裸体网站| 欧美在线精品一区二区三区| 国产日韩精品一区在线不卡| 欧美日韩北条麻妃一区二区| 国产中文一区二区苍井空| 99视频免费观看| 日韩欧美中文在线| 日韩第九页| 成人a免费α片在线视频网站| 国产一区二区三区精品欧美日韩| 中国丰满人妻无码束缚啪啪| 91久久国产综合精品| 中文字幕亚洲另类天堂| 在线网站18禁| 91精品视频在线播放| 欧美a在线看| 91香蕉视频下载网站| 国产va免费精品观看| 91精品专区国产盗摄| 美女潮喷出白浆在线观看视频| 亚洲娇小与黑人巨大交|