《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于異構平臺的自適應圖像去馬賽克的OpenCL加速
基于異構平臺的自適應圖像去馬賽克的OpenCL加速
2016年電子技術應用第4期
田旭文,朱茂華
超威半導體產(chǎn)品(中國)有限公司,北京100190
摘要: 基于異構計算概念,,使用GPU和OpenCL加速了一個高復雜度的自適應圖像去馬賽克算法,,并在AMD Bald Eagle和FirePro W8100 組成的異構計算平臺上完成了功能和性能測試。實驗結果表明,該異構平臺能取得良好的圖像重建效果,W8100處理圖像的速率超過了100 f/s,每幀圖像有1 920×1 080個像素,,證明異構計算平臺及OpenCL可滿足醫(yī)療、網(wǎng)絡監(jiān)控等應用領域對高幀率,、高清圖像影像的需求,。
中圖分類號: TP37
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.04.031
中文引用格式: 田旭文,朱茂華. 基于異構平臺的自適應圖像去馬賽克的OpenCL加速[J].電子技術應用,,2016,,42(4):111-115.
英文引用格式: Tian Xuwen,,Zhu Maohua. An OpenCL implementation of an image de-mosaicking algorithm on a hybrid platform of heterogeneous system architecture[J].Application of Electronic Technique,2016,,42(4):111-115.
An OpenCL implementation of an image de-mosaicking algorithm on a hybrid platform of heterogeneous system architecture
Tian Xuwen,,Zhu Maohua
AMD Products(China) CO.,Ltd.,,Beijing 100190,,China
Abstract: This paper describes a GPU-accelerated implementation of adaptive image de-mosaicking (a common digital image processing application) to demonstrate massive computation power of the many-core architecture. Acceleration strategies are briefly described to properly map the real-world applications to the GPU for high performance computing. Experimental results show that the developed OpenCL implementation can leverage the AMD FirePro W8100, which achieves a high throughput rate up to 100 frames/s, each having 1920-by-1080 pixels with RGB values. This research work integrates this GPU processor and the AMD Bald Eagle(an embedded APU processor) to form a heterogeneous computing platform, and uses this acceleration example as a case study to demonstrate that heterogeneous system architecture is well-suited for high-throughput, high-definition applications in many fields, such as security and medical imaging.
Key words : heterogeneous system architecture;heterogeneous computing,;OpenCL,;AMD;adaptive de-mosaicking

0 引言

    隨著高清影像與手持數(shù)碼產(chǎn)品的普及,,數(shù)字影像技術受到了產(chǎn)業(yè)界的重視,,因數(shù)字影像攜帶大容量信息且引起豐富的創(chuàng)造潛能。高清,、高幀率影像不僅能展現(xiàn)更高的畫面質量,,還能提升畫面的連續(xù)性,,在網(wǎng)絡監(jiān)控,、醫(yī)療等領域有廣闊的前景。通常,,數(shù)字影像采集設備用成像芯片將光學圖像轉換為電荷,,成像芯片決定影像質量,占相機成本的10%~25%,??紤]到成本、體積及硬件工藝,,多數(shù)影像采集設備使用覆蓋有一層色彩濾鏡陣列的單個成像芯片,。每個感光單元只能取樣一種色彩,其余兩種顏色值需用相鄰單元的取樣值進行插值計算得到,。這種色彩插值就是去馬賽克,,是數(shù)字影像采集流水線的一個關鍵環(huán)節(jié),在高幀率,、高清圖像處理應用中有重要價值,。

    本設計基于異構計算實現(xiàn)了一個自適應去馬賽克算法的OpenCL代碼,并在AMD Bald Eagle和AMD FirePro W8100(或ES8950 MXM)GPU組成的異構計算平臺上進行了測試,。據(jù)了解,,目前還沒有異構平臺的去馬賽克并行代碼。深度優(yōu)化的代碼充分發(fā)揮了異構平臺的架構優(yōu)勢以及FirePro W8100的浮點運算能力和高GFLOPS/J特點,。整個系統(tǒng)具有低的計算耗時,,處理圖像的速率超過了100 f/s,,每幀的像素數(shù)量是1 920×1 080。實驗數(shù)據(jù)證明該方案能滿足醫(yī)療,、安監(jiān)等領域對高幀率和高清數(shù)字影像的需求,。

1 圖像插值算法和異構計算

1.1 圖像去馬賽克算法

    圖像去馬賽克算法是數(shù)碼影像產(chǎn)品里的一項關鍵技術,其性能優(yōu)劣直接影響著圖像質量,,性能不好的算法會使重建圖像有彩色馬賽克或拉鏈失真等畸變,。按是否利用空間相關性,文獻[1]將現(xiàn)有的算法分為兩類——非自適應插值法(如最近鄰域復制,、雙線性插值和三次樣條插值)和利用相關性的插值法,。前一類算法易于實現(xiàn),可以在圖像的平滑區(qū)域得到滿意的插值效果,,但在目標邊緣等高頻區(qū)域易引起插值畸變,。后一類方法利用相關性實現(xiàn)插值,相關性包括每個色彩通道內像素間的空間相關性和多通道間的色彩值相關性,。第二類算法能得到高質量的重建圖像,,但是計算復雜度高。沒有專用加速計算芯片的支持,,數(shù)字影像采集設備很難實時運行后一類算法,。本文采用的Adaptive Homogeneity-Directed De-Mosaicking(AHDDM)屬于利用相關性的插值算法[2]。該算法適于處理以Bayer色彩濾波陣列模式采集到的圖像,,圖1是該算法的主要計算步驟流程,。雖然這些步驟需要大量的浮點運算和復雜的數(shù)值計算,但是適于用并行計算代碼實現(xiàn)加速,。

jsj2-t1.gif

1.2 異構計算

    傳統(tǒng)的圖像處理平臺用CPU,,系統(tǒng)運算能力的提升受限于因提高CPU工作頻率引起的功耗的顯著增加。雖然CPU的同構并行和分布系統(tǒng)能提升運算能力,,但其提升幅度不能隨著處理器數(shù)量線性增長,。在這些系統(tǒng)上,即便得到成熟的開發(fā)經(jīng)驗,、編程語言,、算法和調試工具等手段的協(xié)助,開發(fā)圖像處理軟件也是一項困難的工作,。異構計算技術產(chǎn)生于80年代中期,,主要指使用不同類型指令集、體系架構的計算單元組成混合系統(tǒng)的一種計算方式,。常見的計算單元包括兼容X86指令集的多核CPU,、GPU、FPGA,、DSP,、音頻/視頻處理等專用集成電路(ASIC)[3-4],。由于異構計算能經(jīng)濟、有效地配置計算資源,,提升資源利用率和可擴展性,,該技術已成為并行/分布計算領域中的一個研究熱點。異構平臺通常由多核CPU和GPU組成,。

1.3 AMD GPU

    在2012年以前,,AMD 的GPU架構采用VLIW4作為計算單元的指令格式,這使GPU適用于圖像渲染和3D圖形運算,。通常,,通用計算的數(shù)據(jù)有復雜的結構,這些數(shù)據(jù)結構很難被歸并到有限的類型之中,,因此舊架構的GPU芯片難以高效地完成通用并行計算或合理地配置資源,。從2012年開始,AMD 發(fā)布的GPU芯片采用了新架構GCN[5],,如圖2所示,。GCN架構不僅支持渲染和3D圖形計算,還支持通用計算和OpenCL 1.2標準,。

jsj2-t2.gif

    GCN架構的核心特點表現(xiàn)在兩個方面,。首先,該架構用了新的CU結構和指令集,。每個CU有4個獨立的SIMD向量處理器和向量寄存器,,還有一個標量處理器和8 KB寄存器,,用于減少向量計算的冗余計算,。除了私有資源,4個SIMD共享前端,、分支單元和數(shù)據(jù)緩存,。這些設計使得一個CU能支持多達2 560 個線程。其次,,GCN架構還將改變擴展到整個系統(tǒng),,如GCN架構采用分級緩存。由一個向量數(shù)據(jù)讀取指令引發(fā)的64個存儲訪問會被合并成一個訪問,。合并機制將讀取同一個cache line里的數(shù)據(jù)合并為一次訪問,,這能顯著地降低片外存儲器的讀取次數(shù)。數(shù)據(jù)存儲采用了不同于讀取的合并方式,。在合并存儲器讀取請求之后,,數(shù)據(jù)將被送至一級數(shù)據(jù)緩存,即分級緩存的第一級,。如果CU需要的數(shù)據(jù)不在一級緩存,,那么CU將通過開關矩陣訪問二級緩存,。二級緩存有多個bank,采用交織尋址方式,,各bank通過一個64位雙通道存儲控制器連接到片外存儲器,。GCN分級存儲是一個合并讀寫的緩存系統(tǒng),支持虛擬內存和原子操作,,進而支持GPU和CPU間的數(shù)據(jù)零拷貝,。

1.4 OpenCL

    通常,硬件廠商僅提供支持自身芯片的編程模型和工具,,所以難用一種風格的編程語言實現(xiàn)異構編程,。此外,將不同設備作為統(tǒng)一的計算單元來處理是非常困難的,。為解決該問題,,OpenCL通過一套機制實現(xiàn)獨立于硬件的軟件開發(fā)環(huán)境,還能支持多級別的并行計算和不同設備的并行特性,,將高級語言的代碼有效地映射到由CPU,、GPU和其他芯片組成的系統(tǒng)上[6]。OpenCL定義了運行時系統(tǒng)管理資源,,將不同類型的硬件結合在同種執(zhí)行環(huán)境中,,用來支持動態(tài)平衡計算、功耗及其他資源[7],。圖3示意了平臺模型和執(zhí)行模型間的關系,。

jsj2-t3.gif

2 OpenCL代碼設計及優(yōu)化

    本文用OpenCL 1.2標準設計GPU代碼,實現(xiàn)一個高復雜度的自適應去馬賽克算法,。因為該算法對每個像素進行多次插值,、濾波和非線性映射等操作,所以這個算法需要大量的浮點運算以及數(shù)值計算,,屬于數(shù)據(jù)密集型應用,,適合于GPU實現(xiàn)。為高速實現(xiàn)該算法,,OpenCL代碼必須充分利用GPU的計算資源,,如高速浮點運算能力。目標異構平臺以CPU為核心,,包含一個或多個OpenCL設備,,這要求不同架構的微處理器同時運行不同性質和內容的計算任務,因此代碼應同時進行數(shù)據(jù)傳輸和計算,,以利于整個系統(tǒng)高速地處理數(shù)據(jù)幀序列,。

    OpenCL代碼的主要技術特點如下所述。在代碼加速方面,優(yōu)化了中值濾波和線性濾波的計算流程,,優(yōu)化了片外存儲數(shù)據(jù)的訪問,。設備代碼還采用OpenCL內建函數(shù),加速了立方根等數(shù)值計算函數(shù),,這顯著地降低了處理器時間,。軟件優(yōu)化了數(shù)據(jù)的存儲布局,降低了讀寫數(shù)據(jù)次數(shù),。部分優(yōu)化方法的說明可參考文獻[7-8],。在異構加速方面,軟件創(chuàng)建了兩個命令隊列,,分別控制OpenCL設備完成圖像處理和主機與設備間的數(shù)據(jù)傳輸,。相比于單命令隊列控制OpenCL設備的計算和通信,新做法隱藏了數(shù)據(jù)傳輸,,進一步提高了每幀數(shù)據(jù)的處理速度,。軟件采用了兩個事件對象同步兩個命令隊列。這種方式通過交替地創(chuàng)建和釋放事件對象,,有效地避免了不同隊列里的命令在任一個時刻處理同一幀數(shù)據(jù),,保證了數(shù)據(jù)一致性。下面分別介紹這些代碼部分的設計,。

2.1 軟件流程設計和描述

    按照OpenCL 1.2標準,,采用主機和OpenCL設備協(xié)作實現(xiàn)AHDDM算法。主機代碼按照一個指定順序啟動設備執(zhí)行設備代碼,,完成平臺和設備信息的獲取,、設備選擇、各種對象創(chuàng)建,、主機和設備間通信,、設備代碼的輸入?yún)?shù)配置和資源釋放。設備完成圖像處理計算,,對輸入數(shù)據(jù)進行插值和濾波,,得到重建結果,。在圖像處理中,,水平/豎直方向插值、homogeneity計算,、中值濾波和色彩空間轉換需要大量運算,。下面概略地介紹這些算法步驟。

2.1.1 插值

    對于一幅輸入圖像,,AHDDM算法用一個像素的周邊像素值分布估計出該點缺失的信息,,對水平插值和豎直插值結果進行了選擇性組合。水平插值過程是:(1)求像素RGB值的和,存于矩陣X中,;(2)在處理G通道時,,對應于G Mask的像素取矩陣X的值,對應于R/B Mask的像素取矩陣X水平方向的鄰近4個值的加權平均,;(3)在處理R和B通道時,,輸出像素取以其為中心的3×3窗口內所有R/B Mask像素的平均值。豎直插值過程是:除G通道R/B Mask下的像素取矩陣X豎直方向的最近4個值的計算結果以外,,其余與水平插值相同,。

2.1.2 計算Homogeneity矩陣

    該算法將水平插值和豎直插值得到的圖像轉換成LAB格式,并求出這兩張LAB圖像的亮度差和色彩差,。隨后根據(jù)這兩個差值矩陣,,OpenCL設備計算出水平插值和豎直插值的同質矩陣Hx和Hy;接著對這兩個矩陣里的數(shù)據(jù)進行平滑處理,。根據(jù)平滑結果,,OpenCL設備合并水平插值圖像和豎直插值圖像,每個像素的取值判據(jù)是選擇其在Hx/Hy較大的像素值,。

2.1.3 中值濾波

    合并后的插值圖像需要進行中值濾波,,以保證重建質量。在R和B通道,,每個像素取其相鄰的8個像素的中值濾波結果,;在G通道里,每個像素取其上下左右4個相鄰的像素的中值濾波結果,。中值計算需先將輸入的數(shù)據(jù)按照升序或降序排列,,再輸出中間位置上的那個數(shù)值。當輸入奇數(shù)個數(shù)據(jù)時,,計算結果將是排序后的序列中間的數(shù)據(jù),;當輸入偶數(shù)個數(shù)據(jù)時,計算結果將是排序后的序列中間的兩個數(shù)據(jù)的平均值,。自適應算法用兩次中值濾波,,以得到較好的濾波效果。

2.1.4 色彩空間轉換

    RGB和CIELAB是常用的顏色空間,。RGB便于建模物理設備的輸出,,但不適合描述人類視覺感知。CIELAB具有視覺上的均勻性,,接近于人類的視覺感知,,即色彩值的變化和視覺感知到的變化程度是一致的[9]。RGB和CIELAB之間的色彩值轉換需要分兩步進行,,即先規(guī)范化RGB值到0~1之間,,用XYZ顏色空間作中間層;再用一組非線性變換得到CIELAB值[10]

jsj2-gs1-2.gif

    轉換公式顯示CIELAB轉換需要浮點型運算,,雖然可截取浮點計算結果的整數(shù)部分換取計算速度的增加,,但是損失了計算精度。因為RGB轉換CIELAB需要較多的數(shù)值計算,,所以快速轉換是OpenCL代碼設計的一個重點,。本文用一個3×3矩陣和一個1×3向量的浮點乘法實現(xiàn)規(guī)范化計算,用OpenCL 1.2標準的內建立方根等函數(shù)實現(xiàn)非線性數(shù)值計算,,用三元運算符而不是條件指令加快非線性轉換中的流程控制,。

2.2 并行圖像處理和數(shù)據(jù)通信

    本文用單個命令隊列實現(xiàn)單幅圖像的插值處理,用兩個命令隊列處理一個幀序列,,隱藏了數(shù)據(jù)傳輸時間,。代碼采用任務并行的方式,同步地完成圖像處理和數(shù)據(jù)通信,。主機代碼用一個命令隊列里的命令啟動OpenCL設備執(zhí)行設備代碼,,用另一個命令隊列中的命令去控制設備內存和主機內存之間的數(shù)據(jù)通信。系統(tǒng)使用兩個事件對象同步兩個命令隊列的命令,,通過交替地監(jiān)測兩個事件對象建立和釋放的返回值,,安排兩個命令隊列中的命令讀寫不同的存儲位置,免除了兩個隊列里的命令讀寫相同的存儲位置,。

2.3 存儲空間配置

    根據(jù)算法流程,,在開始插值計算前,需鏡像擴展原始圖像的邊緣部分,。其次,,一些計算步驟訪問多個相鄰的像素,這需要條件指令限定并行線程的處理范圍,,否則邊緣像素的重建結果將會有明顯偏差,。軟件采取了圖像補零法,填補寬度是各步驟的最大補零長度,,這利于合并掉一些條件指令,,減少計算時間。如果原始圖像的尺寸是M×N,,鏡像擴展圖像的尺寸是H×W,,則輸入和輸出圖像的尺寸是M×N,中間結果的尺寸均是(H+2×P)×(W+2×P),,其中P是補零寬度,,取2和delta(homogeneity函數(shù)的參數(shù))的最大值。在本文的實驗中,,delta默認取值為3,所以P取delta值。最后,,代碼將擴展圖像的寬度和高度取為16的整數(shù)倍,,以提高數(shù)據(jù)訪問效率。在實驗中,,原始圖像和重建圖像的尺寸是1 920×1 080像素,,中間結果是1 952×1 104像素。

3 實驗及討論

    本文的異構計算平臺的配置如下:硬件平臺由AMD Bald Eagle和AMD FirePro W8100[11](或ES8950 MXM)組成,,軟件開發(fā)環(huán)境是Win7,、AMD Catalyst 13.11以上版本和AMD APP SDK 2.8[12],編程語言及版本號是VC2010和OpenCL 1.2 C,。圖4是原始RGB圖像,、模擬數(shù)據(jù)和插值重建圖像。三幅圖像的尺寸均為1 920×1 080像素,,有3個圖像通道,。按照Bayer模式,對原始圖進行采樣得到模擬圖,,模擬圖偏綠,。對比原始圖像和重建結果,可看出重建結果非常接近于原始圖像,,而且差別很小,。該異構平臺的重建圖像與CPU代碼的計算結果不存在明顯差異,區(qū)域交界處的虛假色塊和拉鏈等失真被抑制和消除,,細節(jié)得到了保留,。

jsj2-t4.gif

    在Intel i7平臺上,該算法的MATLAB代碼的運行時間約為7 s,。圖5是 FirePro W8100的一段工作時序,,顯示了兩個命令隊列的運行情況,其中Queue0 和Queue1分別對應于數(shù)據(jù)處理命令隊列和通信命令隊列,。該圖顯示出交疊的數(shù)據(jù)通信和數(shù)據(jù)處理命令節(jié)省了GPU計算時間,。AMD Bald Eagle APU處理器集成有X86 CPU內核和GPU內核,但其GPU核的計算單元數(shù)量遠小于W8100的計算單元數(shù)量,。因為用一個命令隊列完成數(shù)據(jù)通信和執(zhí)行處理算法,,所以該GPU核大約用67 ms完成單幅圖像的去馬賽克處理,如圖6所示,。表1列出了W8100處理各步驟的耗時,,總和約為6.22 ms,因為設備啟動命令需要時間,,所以每一幅圖像的插值處理大約用8.6 ms,。兩種工作時序的對比顯示出多命令隊列方式能更高效地使用OpenCL設備的計算資源,。

jsj2-t5.gif

jsj2-t6.gif

jsj2-b1.gif

    除了上述的代碼優(yōu)化方法以外,OpenCL代碼仍有進一步提升性能的方式,,如使用三維查找表插值法提高RGB值轉換為CIELAB值的速度,。

4 小結

    按照OpenCL 1.2標準,本文開發(fā)了自適應去馬賽克并行代碼,,在AMD Bald Eagle和AMD FirePro W8100 GPU組成的異構系統(tǒng)上進行了驗證,。AMD FirePro W8100能滿足100 f/s的圖像處理,圖像尺寸達到了1 920×1 080像素,,每個像素有RGB值,。本文的實驗證明異構計算是一種適于高清影像和大尺幅圖像處理的有效方案。

參考文獻

[1] LI X.Image demosaicking:a systematic survey[C].Proc.of SPIE Electronic Imaging Conference,,2008.

[2] HIRAKAWA K.Adaptive homogeneity-directed demosaicing algorithm[J].IEEE Trans.on Image Processing,,2005,14(3):360-369.

[3] HSA Foundation.Heterogeneous system architecture:A technical review presentation[EB/OL].(2012)[2015].Available:http://www.slideshare.net/hsafoundation/hsa10-whitepaper.

[4] AMD Inc.AMD and HSA:A new era of vivid digital experiences website[EB/OL].(2013)[2016].Available:http://www.amd.com/us/products/technologies/hsa/Pages/hsa.aspx#1.

[5] AMD Inc.AMD Graphics Cores Next(GCN) architecture[EB/OL].(2012)[2016].Available:http://www.amd.com/jp/Documents/GCN Architecture whitepaper.pdf.

[6] Khronos OpenCL Working Group.The OpenCL specification 1.2[EB/OL].(2011)[2016].Available:http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf.

[7] MUNSHI A.OpenCL programming guide for optimization techniques[M].Addison-Wesley Professional,,2011.

[8] AMD Inc.ATI streaming SDK OpenCL programming guide 4.2[EB/OL].(2013)[2016].Available:http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OCL_Programming_Guide-2013-06-21.pdf.

[9] BILLMEYER F W,,SALTZMAN J M.Principles of color technology[M].2nd ed.,John Wiley & Sons,,Inc.,,New York,1981.

[10] SCHALLER N C.Color conversion algorithms[EB/OL].(2015)[2016].Available:http://www.cs.rit.edu/~ncs/color/t_convert.html.

[11] AMD Inc.FirePro datasheet[EB/OL].(2015)[2016].Available:http://www.amd.com/Documents/FirePro-W8100-Data-Sheet.pdf.

[12] AMD Inc.AMD accelerated parallel processing software development Kit[EB/OL].(2016)[2016].Available:http://developer.amd.com/sdks/amdappsdk/.

此內容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權禁止轉載,。