肖詩(shī)洋,王鐳,杜瑩,肖漢
(1.東南大學(xué) 土木工程學(xué)院,江蘇 南京 211189;2.鄭州師范學(xué)院 信息科學(xué)與技術(shù)學(xué)院,河南 鄭州 450044;3.鄭州師范學(xué)院 地理與旅游學(xué)院,河南 鄭州 450044)
外界環(huán)境、傳感器件的質(zhì)量等各種因素會(huì)對(duì)圖像在采集、傳輸和存儲(chǔ)的過(guò)程中產(chǎn)生干擾.引入的噪聲致使圖像質(zhì)量下降,會(huì)嚴(yán)重影響圖像后續(xù)處理的效果.因此,為抑制圖像的噪聲,在圖像預(yù)處理中需要對(duì)圖像去噪.噪聲消除是蜂窩移動(dòng)通信、圖像處理、雷達(dá)、聲納及其他應(yīng)用中需要解決的主要問(wèn)題之一[1].
目前圖像去噪方法有很多種,圖像的噪聲可根據(jù)噪聲類型選用空間域方法或變換域方法進(jìn)行去噪,如中值濾波器、形態(tài)濾波器、高斯濾波器等.基于排序統(tǒng)計(jì)理論的中值濾波器是一種非線性數(shù)字濾波器,常用于消除圖像中的脈沖噪聲或椒鹽噪聲.語(yǔ)音、圖像和數(shù)字信號(hào)處理中的平滑操作可用中值濾波實(shí)現(xiàn).非線性中值濾波器既可以有效地消除脈沖干擾和隨機(jī)噪聲,又可實(shí)現(xiàn)對(duì)圖像的邊緣信息的充分保留.在大數(shù)據(jù)技術(shù)的推動(dòng)下,數(shù)字圖像分辨率快速提高,對(duì)圖像處理算法的實(shí)時(shí)性和處理效率都提出了較高的要求.因此,探索高效快速的圖像處理方法和理論,是提高應(yīng)用系統(tǒng)能力的重要需求,也是對(duì)圖像處理技術(shù)發(fā)展提出的科學(xué)難題之一[2].
利用現(xiàn)場(chǎng)可編程門陣列(field programmable gate array,FPGA)或數(shù)字信號(hào)處理器(digital signal processor,DSP)實(shí)現(xiàn)實(shí)時(shí)圖像中值濾波處理,要求增添額外的硬件,系統(tǒng)的復(fù)雜度和費(fèi)用會(huì)增加.隨著將多核CPU處理單元引入到并行系統(tǒng),需要對(duì)多核CPU中的每個(gè)CPU內(nèi)核進(jìn)行編程.該方法操作繁瑣,編程量大.近年來(lái),在科學(xué)計(jì)算和工程計(jì)算領(lǐng)域中的加速已廣泛運(yùn)用圖形處理器(graphics processing unit, GPU),較于CPU,GPU提供了更強(qiáng)勁的計(jì)算能力和更大的數(shù)據(jù)讀寫(xiě)帶寬.統(tǒng)一計(jì)算設(shè)備架構(gòu)(compute unified device architecture,CUDA)使研究人員可以對(duì)GPU進(jìn)行更高效的編程,GPU的軟件生態(tài)環(huán)境得到了質(zhì)的提升.但CUDA系統(tǒng)只適用于NVIDIA系列的GPU.面向異構(gòu)系統(tǒng)結(jié)構(gòu)的開(kāi)放、免費(fèi)的并行編程標(biāo)準(zhǔn)開(kāi)放式計(jì)算語(yǔ)言(open computing language,OpenCL)則可適用于任意一種并行處理器.OpenCL支持CPU、GPU、FPGA等并行處理器,擁有獨(dú)特的任務(wù)并行執(zhí)行模型,特別有利于支持異構(gòu)計(jì)算[3].
圖像中值濾波算法是一種計(jì)算密集型算法,算法的中值濾波處理對(duì)算法的性能造成很大的影響.隨著圖像像素?cái)?shù)據(jù)量的增大,算法的計(jì)算量迅速增長(zhǎng),進(jìn)而大幅增加了算法處理時(shí)間,算法性能成為亟待解決的問(wèn)題.而異構(gòu)計(jì)算成為改善算法性能的一種很好的解決方案.本研究將采用OpenCL編程模型,圍繞單GPU對(duì)中值濾波算法的并行化、算法的深度優(yōu)化和多種并行計(jì)算方案的比對(duì)研究等問(wèn)題展開(kāi).
1) 提出了一種基于OpenCL的圖像中值濾波并行算法.該算法既具有29.74倍加速比的高速去噪功能,又能夠很好地在不同GPU平臺(tái)中實(shí)現(xiàn)可移植性.
2) 采用了多元化的性能對(duì)比標(biāo)準(zhǔn).本文在多種并行計(jì)算平臺(tái)上實(shí)現(xiàn)了對(duì)圖像中值濾波的處理,測(cè)試了3種并行方式對(duì)算法性能的影響.將基于OpenCL的中值濾波(OpenCL-based median filtering, OCL_MF)并行算法、基于OpenMP的中值濾波(OpenMP-based median filtering, OMP_MF)并行算法、基于CUDA的中值濾波(CUDA-based median filtering, CUDA_MF)并行算法以及相關(guān)文獻(xiàn)的算法進(jìn)行性能比較,從橫縱2個(gè)方向的性能比較看出,OCL_MF并行算法均取得了較好的性能提升.
經(jīng)過(guò)多年的不懈努力,圖像中值濾波算法在算法優(yōu)化上取得了不少的成果.Zhao等[4]通過(guò)改進(jìn)的加權(quán)中值濾波器,在GPU上實(shí)現(xiàn)了快速的紋理過(guò)濾.PANG等[5]提出了一種自適應(yīng)中值濾波器去除圖像中的隨機(jī)值脈沖噪聲,易于并行處理的實(shí)現(xiàn).Liu等[6]通過(guò)并行隨機(jī)電路的硬件實(shí)現(xiàn)了大量隨機(jī)數(shù)排列,提高了中值濾波處理效率.Cadenas等[7]研究了一種快速尋找中位數(shù)的方法,用于中值濾波算法,提高了降噪效率.Oded[8]設(shè)計(jì)了基于GPU直方圖運(yùn)算的中值濾波軟件并行可擴(kuò)展算法,提高速度60倍.李余錢等[9]通過(guò)基于FPGA的中值濾波算法確定自適應(yīng)閾值來(lái)實(shí)現(xiàn)Sobel邊緣檢測(cè)的方法,提高了系統(tǒng)的實(shí)時(shí)性.Sachin等[10]提出了一種基于single rogram multiple data (SPMD)的分時(shí)處理的中值濾波算法,相比基于remote method invocation (RMI)方式的分布系統(tǒng)性能更佳.劉佳等[11]提出了一種多處理器NoC結(jié)構(gòu)的中值濾波算法,處理速度提高了3.6倍.陳思潤(rùn)等[12]使用ARM硬件架構(gòu)的Cortex-A處理器,運(yùn)用SIMD數(shù)據(jù)級(jí)并行計(jì)算技術(shù)NEON實(shí)現(xiàn)了中值濾波并行算法,速度提高了17倍.Zhao等[13]提出了一種基于GPU的實(shí)時(shí)加權(quán)中值濾波器,提高了算法的執(zhí)行效率.Mao等[14]設(shè)計(jì)了基于GPU的加權(quán)中值濾波算法,應(yīng)用于油氣勘探數(shù)據(jù)處理平臺(tái),獲得了4倍加速比.廖文獻(xiàn)等[15]在Cortex嵌入式多處理器系統(tǒng)上進(jìn)行了圖像中值濾波算法的并行化,速度提高了近4倍.Mursaev等[16]設(shè)計(jì)了一種基于FPGA的二維中值濾波器,提高了處理速度.張怡卓等[17]設(shè)計(jì)了基于FPGA硬件的并行中值濾波算法,獲得了3.68倍加速比.Vivek等[18]提出了基于具有深度流水線的FPGA的中值濾波算法,提高了去噪速度.
總之,上述研究工作在中值濾波算法方面取得了很多進(jìn)展.有些通過(guò)改進(jìn)中值濾波算法來(lái)提高去噪速度,有些提出了基于FPGA、ARM和GPU等計(jì)算平臺(tái)的并行算法,應(yīng)用于實(shí)際系統(tǒng)中提高處理速度,有些是在特定硬件平臺(tái)上加速中值濾波算法的處理效率.然而,各種加速算法的性能提高效果不理想,特別是這些加速算法都不具有平臺(tái)獨(dú)立性特點(diǎn),只能在特定的硬件平臺(tái)或應(yīng)用中實(shí)現(xiàn)性能提升.本文擬分析圖像去噪中經(jīng)典的中值濾波算法,利用熱點(diǎn)分析法將耗時(shí)最長(zhǎng)的功能模塊從中值濾波算法中找出.從而使用OpenCL對(duì)這些功能模塊進(jìn)行GPU并行化.借助GPU在大規(guī)模并行運(yùn)算上的優(yōu)勢(shì),實(shí)現(xiàn)對(duì)中值濾波算法的CPU+GPU協(xié)同計(jì)算,有效縮短算法執(zhí)行時(shí)間和實(shí)現(xiàn)算法在不同GPU計(jì)算平臺(tái)上的性能移植.
中值濾波器作為一種非線性濾波器,是一種基于排序統(tǒng)計(jì)理論的有效抑制噪聲的非線性信號(hào)處理技術(shù)[19].1970年Tukey提出了中值濾波器并在一維信號(hào)處理技術(shù)中應(yīng)用,后又被二維圖像信號(hào)處理技術(shù)采用.在一定條件下,它可較好地克服平均值濾波、最小均方濾波等線性濾波器所產(chǎn)生的圖像細(xì)節(jié)模糊問(wèn)題,對(duì)降低脈沖干擾及圖像掃描噪聲非常有效[20].
中值濾波算法是指用像素點(diǎn)鄰域內(nèi)的所有像素點(diǎn)的灰度值的中位數(shù)代替像素點(diǎn)的灰度值,為了保證取中位數(shù)的便利性,鄰域內(nèi)的像素點(diǎn)的數(shù)目必須是正奇數(shù),可用式(1)來(lái)表示.
(1)
圖1 3×3濾波窗口Fig.1 3×3 filtering window
中值濾波的具體實(shí)現(xiàn)步驟如下:
1)在圖像中遍歷所有像素點(diǎn),并以每個(gè)像素點(diǎn)為中心形成一系列中值濾波窗口;
2)將濾波窗口內(nèi)的各個(gè)像素的灰度值讀取出來(lái);
3)把這些灰度值進(jìn)行大小排序;
4)將這些灰度值的中位數(shù)賦給對(duì)應(yīng)濾波窗口中心位置的像素,作為最終的輸出結(jié)果.
對(duì)于像幅大小為height×width的圖像進(jìn)行的中值濾波算法主要包括以下模塊:1) 擴(kuò)充圖像功能.拓展過(guò)程要求在左右方向進(jìn)行原圖像拓展和上下方向拓展原圖像.該過(guò)程的時(shí)間復(fù)雜度為O(height×width+height×MODELDIM/2+width×MODELDIM/2.2)圖像中值濾波功能.需要將圖像中所有像素點(diǎn)的鄰域進(jìn)行中值濾波處理,需要執(zhí)行height×width次,其時(shí)間復(fù)雜度為O(height×width).同時(shí)提取濾波窗口覆蓋下圖像子塊中像素點(diǎn)的灰度值,其時(shí)間復(fù)雜度為O(MODELDIM2/4).在圖像子塊中的灰度值進(jìn)行排序,時(shí)間復(fù)雜度為O(MODELDIM4).由此可得,圖像中值濾波算法的時(shí)間復(fù)雜度為O(height×width×MODELDIM4),模塊2)是該算法的核心環(huán)節(jié).
為實(shí)現(xiàn)圖像中值濾波算法的并行化,首先針對(duì)基于CPU的中值濾波(CPU-based median filtering, CPU_MF)算法進(jìn)行熱點(diǎn)分析,定位算法的耗時(shí)步驟.CPU_MF算法在進(jìn)行熱點(diǎn)分析時(shí),是在像幅大小為5 471×5 682的圖像上進(jìn)行測(cè)試,采用bmp圖像格式.將clock()函數(shù)插入到CPU_MF算法各主要步驟之間進(jìn)行時(shí)間測(cè)試,獲得各主要步驟運(yùn)算前后的時(shí)間點(diǎn)值,通過(guò)計(jì)算得到CPU_MF算法主要步驟的時(shí)間統(tǒng)計(jì)和整個(gè)算法的運(yùn)行時(shí)間.
從表1中可以看出,圖像中值濾波算法耗時(shí)主要集中在第2步.該步驟運(yùn)行時(shí)間占串行算法總執(zhí)行時(shí)間的百分比為90.47%,其他函數(shù)處理時(shí)間只占據(jù)了不到1 s的時(shí)間,說(shuō)明圖像中值濾波步驟是串行算法的性能瓶頸所在.如果采取一定并行措施大幅降低中值濾波模塊的處理時(shí)間,算法就可以獲得良好的加速效果.
表1 圖像中值濾波算法各步驟運(yùn)行時(shí)間及占比
算法自身存在的任務(wù)依賴性影響著算法的可并行性.關(guān)聯(lián)性越低的任務(wù),其并行效果越好,反之則效果越差.中值濾波計(jì)算過(guò)程需要改進(jìn),以適合GPU的并行計(jì)算架構(gòu)的特點(diǎn),并能夠充分利用GPU的各種具有各自優(yōu)勢(shì)的存儲(chǔ)器.本文在圖像邊界處理時(shí),將待處理的原圖像矩陣行和列各補(bǔ)MODELDIM/2行和MODELDIM/2列.擴(kuò)展處理圖像后,所有待處理像素矩陣均處于擴(kuò)展圖像像素矩陣的內(nèi)部.此時(shí)對(duì)于每個(gè)像素點(diǎn)的處理均可采用一致的算法實(shí)現(xiàn),避免了分支處理,實(shí)現(xiàn)過(guò)程的高度統(tǒng)一得以保證,算法的并行潛力進(jìn)一步提高.因此,可以分析得出圖像中值濾波功能具有三級(jí)并行性:
1)像素級(jí)并行:椒鹽噪聲是以黑白點(diǎn)的形式疊加在圖像上,去噪則要對(duì)圖像中每個(gè)像素點(diǎn)的灰度值進(jìn)行變換處理,這種任務(wù)具有相互獨(dú)立適于并行的特點(diǎn).
2)圖像區(qū)域中值排序級(jí)并行:像素點(diǎn)鄰域中圖像數(shù)據(jù)排序和計(jì)算中值任務(wù)相互獨(dú)立,適于并行執(zhí)行.
3)窗口級(jí)并行:對(duì)每個(gè)濾波窗口覆蓋下的圖像域處理任務(wù)相互獨(dú)立,適于并行處理.
中值濾波算法的并行性如圖2所示.圖2a中綠色區(qū)域?yàn)樵紙D像待處理區(qū)域,局部處理時(shí)鄰域大小為3×3,白色區(qū)域?yàn)閿U(kuò)充圖像區(qū)域.像素點(diǎn)用方塊代表.在中值圖像濾波處理中,若對(duì)像素點(diǎn)A進(jìn)行處理,即將子圖像塊1中的數(shù)據(jù)提取出來(lái),進(jìn)行數(shù)據(jù)排序和A像素點(diǎn)的灰度值處理等操作.然后依次對(duì)像素點(diǎn)B、C…X、Y進(jìn)行處理.由于一系列子圖像區(qū)域之間沒(méi)有相互依賴性,所以,中值圖像濾波算法適于并行化處理.
a.擴(kuò)充圖像;b.像素點(diǎn)鄰域
由此可見(jiàn),圖像中值濾波算法的計(jì)算量非常大并且又具備很強(qiáng)的并行性.因此,算法適合利用GPU計(jì)算平臺(tái)進(jìn)行大規(guī)模并行計(jì)算.針對(duì)以上分析,本文設(shè)計(jì)實(shí)現(xiàn)了圖像中值濾波算法在OpenCL計(jì)算平臺(tái)上的naive版本.采用OpenCL的多工作項(xiàng)對(duì)圖像中值濾波功能部分進(jìn)行并行計(jì)算,一個(gè)工作項(xiàng)負(fù)責(zé)計(jì)算一個(gè)像素點(diǎn)鄰域的中值,如果系統(tǒng)啟動(dòng)w個(gè)工作項(xiàng),則算法的計(jì)算時(shí)間復(fù)雜度降為O((height×width×MODELDIM4)/w).
3.1.1 GPU核函數(shù)的設(shè)計(jì)與實(shí)現(xiàn)
設(shè)計(jì)內(nèi)核的索引空間,將工作組和工作項(xiàng)的大小確定下來(lái),即設(shè)定處理單元和計(jì)算單元的大小進(jìn)行并行計(jì)算.主要實(shí)現(xiàn)提取像素點(diǎn)鄰域灰度值,濾波窗口內(nèi)像素值的冒泡排序和計(jì)算鄰域中位數(shù)并更新至像素點(diǎn).詳細(xì)設(shè)計(jì)如下:
2) 在采用OpenCL并行設(shè)計(jì)時(shí),采用2層并行模式.將整幅圖像在邏輯上劃分成個(gè)子圖像塊,網(wǎng)格中的一個(gè)工作組對(duì)應(yīng)處理圖像中的某個(gè)子圖像塊,即為粗粒度并行.NDRange索引空間中的工作項(xiàng)依據(jù)索引地址和濾波窗口大小,提取位于全局存儲(chǔ)器中相應(yīng)像素點(diǎn)鄰域的灰度值.鄰域像素值用冒泡法進(jìn)行排序,計(jì)算得到鄰域像素點(diǎn)的中位數(shù),并將相應(yīng)更新的灰度值數(shù)據(jù)寫(xiě)入主存空間的像素點(diǎn),即為細(xì)粒度并行.圖像中值濾波并行設(shè)計(jì)如圖3所示.
圖3 計(jì)算空間并行化劃分Fig.3 Parallel partition of computational space
3) 粗粒度的工作組并行和細(xì)粒度的工作項(xiàng)并行組成了OCL_MF并行算法計(jì)算架構(gòu).粗粒度并行存在于同一N-NDRange索引空間內(nèi)眾多工作組之間,工作組之間無(wú)需進(jìn)行數(shù)據(jù)交換和通信.這樣,系統(tǒng)獲得了可擴(kuò)展性:由于在任意一個(gè)計(jì)算單元上都可以執(zhí)行工作組子任務(wù),所以,在核心數(shù)量不同的GPU上都能正常運(yùn)行OCL_MF并行系統(tǒng).細(xì)粒度并行存在于同一工作組內(nèi)的工作項(xiàng)之間,同一工作組內(nèi)的工作項(xiàng)之間可以進(jìn)行數(shù)據(jù)交換和通信.因此,工作組中的不同工作項(xiàng)可通過(guò)(work_group_barrier)進(jìn)行同步處理.
在OpenCL的執(zhí)行模型中,需要滿足以下3個(gè)方面的限制:1)一個(gè)計(jì)算單元能夠支持并行運(yùn)行工作項(xiàng)總量的限制;2)一個(gè)計(jì)算單元能夠支持并行運(yùn)行工作組總量的限制;3)一個(gè)工作組能夠支持并行運(yùn)行工作項(xiàng)總量的限制.一個(gè)計(jì)算單元所能并行運(yùn)行的工作項(xiàng)總數(shù)是確定的,為了獲得OCL_MF算法的最大并行計(jì)算效率,工作組中所包含的工作項(xiàng)數(shù)目的設(shè)計(jì)至關(guān)重要.在對(duì)OCL_MF并行算法進(jìn)行GPU實(shí)現(xiàn)的過(guò)程中,采用計(jì)算能力為5.0的GPU.其每個(gè)計(jì)算單元最多可以激活的工作項(xiàng)數(shù)目為2 048.在warp中1次可調(diào)度32個(gè)工作項(xiàng),因此,為了提高并行效率,1個(gè)工作組容納工作項(xiàng)數(shù)應(yīng)是32的倍數(shù).同時(shí)鑒于工作組中寄存器等資源的限制,設(shè)計(jì)工作組的大小為16×16=256.256小于工作組中對(duì)最大工作項(xiàng)數(shù)1 024的限制.每個(gè)計(jì)算單元將執(zhí)行2 048/256=8個(gè)工作組,小于在計(jì)算單元上至多激活工作組數(shù)32的限制.因此,GPU中的所有工作項(xiàng)和工作組都同時(shí)處于并行計(jì)算狀態(tài).
公民性缺失抑或制度供給不足?—對(duì)我國(guó)社區(qū)參與困境的微觀解讀……………………………徐 林 徐 暢(32)
3.1.2 工作項(xiàng)坐標(biāo)的索引機(jī)制
圖像中值濾波器是用待處理像素相鄰范圍內(nèi)的幾個(gè)像素的中位數(shù)來(lái)代替該點(diǎn)的像素值.對(duì)一個(gè)子圖像塊數(shù)據(jù)進(jìn)行中值濾波處理時(shí),對(duì)圖像塊中每個(gè)像素?cái)?shù)據(jù)的處理是無(wú)任何數(shù)據(jù)相關(guān)的.因此,可以將對(duì)每個(gè)像素?cái)?shù)據(jù)的處理映射到工作組的相應(yīng)工作項(xiàng)中.每個(gè)工作組中的工作項(xiàng)均可獲得二維ID索引位置,將相應(yīng)像素點(diǎn)的鄰域數(shù)據(jù)調(diào)度到處理單元中處理.像素點(diǎn)和工作項(xiàng)之間的位置映射關(guān)系,如下所示:
workItemx=get_local_id(0)+get_group_id(0)*get_local_size(0),
(2)
workItemx=get_local_id(1)+get_group_id(1)*get_local_size(1),
(3)
其中,get_local_id(0)和get_local_local_id(1)分別為工作項(xiàng)在工作組中在x和y方向上的索引號(hào).get_group_id(0)和get_group_id(1)分別為工作組在索引空間中在x和y方向上的索引號(hào).get_local_size(0)和get_local_size(1)分別為工作組在x和y方向上的維度.
3.2.1 設(shè)備與主機(jī)間的通信優(yōu)化
減少在設(shè)備和主機(jī)之間的數(shù)據(jù)傳輸是OCL_MF并行濾波算法的設(shè)計(jì)關(guān)鍵.由于設(shè)備與主機(jī)間的數(shù)據(jù)傳輸帶寬遠(yuǎn)低于設(shè)備之間的數(shù)據(jù)傳輸帶寬,若設(shè)備和主機(jī)之間數(shù)據(jù)傳過(guò)于頻繁,系統(tǒng)將陷入傳輸瓶頸而不能充分發(fā)揮GPU的并行計(jì)算能力,計(jì)算效率降低.為了降低傳輸數(shù)據(jù)頻度,OCL_MF把中值濾波功能中的全部計(jì)算任務(wù)全部映射到GPU中.一方面減少了中間數(shù)據(jù)在設(shè)備和主機(jī)之間的傳入傳出操作,另一方面一次性在設(shè)備和主機(jī)之間進(jìn)行圖像數(shù)據(jù)傳輸.這種設(shè)計(jì)大大縮減了傳輸次數(shù),GPU的計(jì)算能力得到充分利用,計(jì)算密集度提高.
3.2.2 工作組資源配置優(yōu)化
在OpenCL框架中,系統(tǒng)定期在不同warp間進(jìn)行切換以進(jìn)行工作項(xiàng)調(diào)度,以滿足對(duì)計(jì)算單元中計(jì)算資源的充分利用.同一指令是在同一warp中的32個(gè)工作項(xiàng)間一同執(zhí)行,因此,每個(gè)工作組中工作項(xiàng)數(shù)量應(yīng)是32的整數(shù)倍,每個(gè)維度上的大小將根據(jù)任務(wù)量的情況確定.表2顯示了像幅大小為3 241×3 753時(shí),系統(tǒng)中設(shè)置不同數(shù)量工作項(xiàng)時(shí)的運(yùn)行時(shí)間.由表2可見(jiàn),采用16×16的工作組維度時(shí),系統(tǒng)性能最佳.
表2 工作組維度對(duì)運(yùn)算速度的影響
1)硬件平臺(tái).選取2個(gè)不同計(jì)算平臺(tái)的目的是驗(yàn)證性能可移植性.CPU系統(tǒng)均為具有六核心的Intel Core i7 8700,主頻為3.2 GHz,系統(tǒng)存儲(chǔ)器為16.0 GB.2種GPU計(jì)算平臺(tái)的性能參數(shù)如表3所示.
表3 GPU計(jì)算平臺(tái)性能參數(shù)
開(kāi)展多組數(shù)據(jù)的對(duì)比實(shí)驗(yàn),需要對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)處理,通過(guò)剪裁取得了圖像大小分別為640×480、561×762、1 354×1 785、2 265×2 746、3 241×3 753、5 471×5 682、7 215×7 634和8 146×8 357共8組實(shí)驗(yàn)數(shù)據(jù).
圖4a是原始圖像,圖4b-e分別為用CPU_MF、OMP_MF、CUDA_MF和OCL_MF系統(tǒng)進(jìn)行處理后的圖像.
a.原始噪聲圖像;b.CPU_MF效果圖;c.OMP_MF效果圖;d.CUDA_MF效果圖;e.OCL_MF效果圖
為檢驗(yàn)圖像中值濾波算法的性能本文共設(shè)計(jì)4組實(shí)驗(yàn):第1組運(yùn)行CPU_MF串行中值濾波算法,第2組運(yùn)行OMP_MF并行中值濾波算法,第3組運(yùn)行CUDA_MF的并行中值濾波算法,第4組運(yùn)行OCL_MF并行中值濾波算法.針對(duì)測(cè)試圖像,4組中值濾波系統(tǒng)被多次運(yùn)行,計(jì)算出各組中值濾波算法的平均耗時(shí),數(shù)值結(jié)果保留小數(shù)點(diǎn)后2位,串/并行中值濾波算法執(zhí)行時(shí)間對(duì)比如表4所示.
表4 不同計(jì)算平臺(tái)下圖像中值濾波算法執(zhí)行時(shí)間
定義加速比
(4)
其中,s為加速比,Ts是CPU_MF串行算法執(zhí)行耗時(shí),Tp是并行算法執(zhí)行耗時(shí).
定義相對(duì)加速比1 OMP_MF算法運(yùn)算耗時(shí)與基于NVIDIA GPU的OCL_MF算法運(yùn)算耗時(shí)的比值.
定義相對(duì)加速比2 CUDA_MF算法運(yùn)算耗時(shí)與基于NVIDIA GPU的OCL_MF算法運(yùn)算耗時(shí)的比值.
為了客觀評(píng)估系統(tǒng)的性能,采用了加速比以反映并行算法相比CPU串行算法整體速度改善情況.為了測(cè)評(píng)不同并行算法的性能,采用了相對(duì)加速比1以反映基于NVIDIA GPU的OCL_MF算法相比OMP_MF算法的性能改善情況,相對(duì)加速比2以反映基于NVIDIA GPU的OCL_MF算法相比CUDA_MF算法的性能改善情況.具體如表5所示.
表5 不同計(jì)算平臺(tái)下圖像中值濾波并行算法性能對(duì)比
縮短圖像處理時(shí)間是中值濾波并行處理的目的,以求得更高圖像降噪速度.但是,若以損失圖像質(zhì)量為代價(jià),并行化處理就沒(méi)有了意義.下面進(jìn)行圖像中值濾波效果分析.
4.3.1 宏觀層面結(jié)果一致性
如圖4可見(jiàn),原始圖像是一組被椒鹽噪聲污染的圖像,圖像中均疊加有許多黑白噪聲點(diǎn).原始圖像經(jīng)過(guò)串行/并行圖像中值濾波處理后,去掉了大部分的黑白噪聲點(diǎn),各幅圖像均變得更加平滑,對(duì)于去除脈沖型加性噪聲效果很好.同時(shí),圖像中值濾波算法采用CPU串行實(shí)現(xiàn),OpenMP多線程并行實(shí)現(xiàn),CUDA架構(gòu)下GPU實(shí)現(xiàn)和OpenCL異構(gòu)平臺(tái)實(shí)現(xiàn),四者的濾波變換效果一樣.
4.3.2 微觀層面結(jié)果一致性
采用圖像灰度值直方圖來(lái)表示經(jīng)過(guò)串行系統(tǒng)和并行系統(tǒng)處理后的圖像數(shù)據(jù),如圖5所示.對(duì)比分析可見(jiàn),從微觀層面上看,中值圖像濾波經(jīng)過(guò)串行和并行處理后的圖像直方圖均一樣.
a.串行處理結(jié)果;b.OpenMP處理結(jié)果;c.CUDA處理結(jié)果;d.OpenCL處理結(jié)果
因此,從宏觀和微觀2個(gè)層面來(lái)看,中值圖像濾波串行算法和并行算法雖然在設(shè)計(jì)方法和執(zhí)行時(shí)間上不同,然而在圖像處理的結(jié)果仍保持一致,算法的正確性和可行性得到驗(yàn)證.
4.4.1 不同計(jì)算平臺(tái)上中值濾波算法運(yùn)算時(shí)間分析
通過(guò)對(duì)圖6的分析可見(jiàn),當(dāng)計(jì)算規(guī)模較小時(shí),中值濾波算法采用GPU并行計(jì)算加速效果較為明顯,獲得了29.74倍的最大加速比.如像幅大小為561×762時(shí),CPU_MF算法計(jì)算時(shí)間為149.00 ms,OMP_MF算法計(jì)算時(shí)間為86.61 ms,CUDA_MF并行算法計(jì)算時(shí)間為5.21 ms,OCL_MF并行算法計(jì)算時(shí)間為5.01 ms,傳統(tǒng)串行方式和多核并行方式的耗時(shí)遠(yuǎn)高于OpenCL并行加速計(jì)算耗時(shí).當(dāng)像幅較大時(shí),CPU_MF算法計(jì)算時(shí)間呈現(xiàn)近乎直線的上升趨勢(shì),耗時(shí)急劇增加.OMP_MF算法的計(jì)算時(shí)間表現(xiàn)出緩慢上升,而GPU并行算法的計(jì)算時(shí)間則表現(xiàn)出更為平緩的上升.同時(shí),像幅大小超過(guò)5471×5682時(shí),GPU并行算法耗時(shí)出現(xiàn)了較快的增長(zhǎng)趨勢(shì).
圖6 中值濾波算法運(yùn)算時(shí)間對(duì)比Fig.6 Comparison of operation time of median filtering algorithm
GPU設(shè)備和CPU主機(jī)相互協(xié)作完成算法的處理過(guò)程,期間大量的數(shù)據(jù)需要交換.這種數(shù)據(jù)交換均由PCI-E總線負(fù)責(zé)完成.但是GPU內(nèi)部帶寬要遠(yuǎn)高于PCI-E總線帶寬.因此,當(dāng)通過(guò)PCI-E總線進(jìn)行大量的圖像數(shù)據(jù)交換時(shí),受限其速度,算法執(zhí)行時(shí)間變長(zhǎng),GPU加速的效果出現(xiàn)了減緩的趨勢(shì).
下面將文獻(xiàn)[17]與OCL_MF并行算法的加速效果進(jìn)行比對(duì).由于多數(shù)文獻(xiàn)是利用中值濾波算法進(jìn)行各種應(yīng)用研究,很少專門針對(duì)中值濾波算法進(jìn)行加速效果的研究.因此,無(wú)法直接進(jìn)行加速效果的對(duì)比.根據(jù)文獻(xiàn)[17]中提供的測(cè)試數(shù)據(jù),當(dāng)圖像大小為640×480時(shí),文獻(xiàn)[17]中基于FPGA加速的中值濾波并行算法的運(yùn)算時(shí)間為6.144 ms,獲得了3.68倍性能提高.而由表4和表5的測(cè)試結(jié)果可知,本文基于OpenCL加速的中值濾波并行算法的運(yùn)算時(shí)間為3.77 ms,獲得了5.04倍加速比.因此,本文并行算法的運(yùn)算時(shí)間比文獻(xiàn)[17]中的算法短,并取得了更好的加速性能.
4.4.2 并行計(jì)算平臺(tái)上中值濾波算法加速比分析
從圖7可以看出,當(dāng)圖像像幅大小在3 241×3 753以內(nèi)時(shí),OpenMP并行方式的加速比曲線斜率變化不大,而GPU并行方式的加速比曲線斜率也較小;當(dāng)像幅大小從3 241×3 753擴(kuò)展到5 471×5 682時(shí),OpenMP加速方式的曲線斜率仍沒(méi)有明顯變化,而GPU加速方式的曲線則出現(xiàn)一個(gè)較陡峭的下降;當(dāng)像幅大小超過(guò)5 471×5 682時(shí),OpenMP加速方式的曲線斜率依然是平穩(wěn)的上升態(tài)勢(shì),而GPU加速方式的曲線則呈現(xiàn)了緩慢下降的趨勢(shì).因此,從圖7中可見(jiàn),隨著像幅規(guī)模的增加,在像幅大小的各個(gè)區(qū)間內(nèi)GPU曲線斜率的變化都較OpenMP方式曲線斜率有明顯變化.
圖7 中值濾波并行算法加速比趨勢(shì)Fig.7 Speedup trend diagram of median filtering parallel algorithm
曲線斜率的大小,在一定程度上反映出數(shù)據(jù)規(guī)模與運(yùn)算時(shí)間的關(guān)系,即數(shù)據(jù)規(guī)模相同時(shí),曲線斜率越大,說(shuō)明該計(jì)算方式的耗時(shí)變化越劇烈.當(dāng)曲線負(fù)斜率較大時(shí),數(shù)據(jù)規(guī)模稍微增加,就導(dǎo)致運(yùn)算時(shí)間的急劇增加.這時(shí)數(shù)據(jù)規(guī)模與時(shí)間消耗的性價(jià)比較低,形成計(jì)算效率的低峰期,并且擴(kuò)展性也較差.
據(jù)上可知,基于GPU的中值濾波算法的擴(kuò)展性不如OMP_MF并行算法,GPU加速方式表現(xiàn)的更容易形成計(jì)算瓶頸.然而,GPU擁有的更加豐富的并行計(jì)算資源帶來(lái)了巨大的加速優(yōu)勢(shì).在圖像規(guī)模增大時(shí),仍然具有遠(yuǎn)高于OpenMP多核并行計(jì)算產(chǎn)生的加速效果.所以,GPU的中值濾波算法的性能更有優(yōu)勢(shì).
由圖7可見(jiàn),OCL_MF并行算法的運(yùn)算速度遠(yuǎn)高于OMP_MF并行算法,且隨著圖像規(guī)模的不斷增大,速度差距有縮小的趨勢(shì).這是由于CPU核心數(shù)較少所致,當(dāng)CPU處于滿載情況下,性能提升空間有限.同時(shí)線程創(chuàng)建和調(diào)度也存在時(shí)間開(kāi)銷.而在一定的計(jì)算量范圍內(nèi),OpenCL中每個(gè)工作項(xiàng)有大致相同的計(jì)算時(shí)間,運(yùn)算時(shí)間的增加僅由于更多的工作項(xiàng)和工作組與硬件之間交互造成的必要時(shí)間消耗.
圖8中相對(duì)加速比2表明,像幅較小時(shí),OCL_MF并行算法與CUDA_MF并行算法性能接近.隨著圖像規(guī)模的增大,OCL_MF并行算法性能相比CUDA_MF并行算法稍快,最高獲得了1.15倍性能提升.因此,當(dāng)像幅較大時(shí),OpenCL并行算法有更大性能優(yōu)勢(shì).相對(duì)加速比1顯示出OCL_MF并行算法與OMP_MF并行算法性能相比有較大提高,最高獲得了17.29倍性能提升.同時(shí),隨著像幅的增大,兩類并行算法的性能差距有逐漸縮小的趨勢(shì).當(dāng)像幅較小時(shí),OpenCL并行算法有更大性能優(yōu)勢(shì).
圖8 相對(duì)加速比趨勢(shì)Fig.8 Relative acceleration ratio trend graph
4.4.3 基于OpenCL的中值濾波并行算法可移植性分析
Radeon RX 470采用的AMD 2012年提出的GCN架構(gòu),GTX 1070為NVIDIA 2016年提出的Pascal架構(gòu).GTX 1070的基礎(chǔ)頻率是Radeon RX 470的1.63倍,而且前者使用的存儲(chǔ)器帶寬也比后者更寬,寄存器數(shù)量也更多.因此,本文采用的AMD GPU卡性能不如NVIDIA GPU卡,并行算法的性能受到了一定的影響,如圖7所示.然而,OpenCL加速的圖像中值濾波并行算法在2種GPU平臺(tái)上均獲得了近30倍加速效果.因此,并行算法在異質(zhì)GPU計(jì)算平臺(tái)上獲得了較好的性能可移植性,符合軟硬件實(shí)際情況.
利用數(shù)字圖像數(shù)據(jù)呈規(guī)則格網(wǎng)分布和易于并行處理的特點(diǎn),針對(duì)圖像中值濾波處理算法核心部分進(jìn)行了并行方案的設(shè)計(jì)與實(shí)現(xiàn).算法索引空間的維度能夠自適應(yīng)于圖像的規(guī)模,對(duì)工作組的資源配置和不同設(shè)備間的數(shù)據(jù)傳輸進(jìn)行了優(yōu)化.通過(guò)為并行計(jì)算任務(wù)合理地分配計(jì)算單元和處理單元,充分挖掘了GPU的并行計(jì)算能力,圖像處理的效率得以提高.實(shí)驗(yàn)結(jié)果顯示,在NVIDIA GTX 1070平臺(tái)上實(shí)現(xiàn)的OCL_MF并行算法與CPU_MF串行算法,OMP_MF和CUDA_MF兩種并行算法性能相比,加速比分別獲得了29.74倍、17.29倍和1.15倍,算法性能得到極大提升.同時(shí),該OpenCL加速的并行算法在AMD Radeon RX 470和NVIDIA GTX 1070平臺(tái)上均獲得了相近的加速比,實(shí)現(xiàn)了在異質(zhì)GPU計(jì)算平臺(tái)間的性能移植.本文提出的基于OpenCL的圖像中值濾波并行處理方法能夠有效縮短系統(tǒng)運(yùn)算時(shí)間,實(shí)時(shí)地完成較大像幅的圖像中值濾波處理,對(duì)其他圖像處理應(yīng)用也具有一定的借鑒意義.
本文研究還有進(jìn)一步優(yōu)化的空間,有待做更加深入的探索:擬在GPU集群上將MPI和OpenCL技術(shù)相結(jié)合,更大圖像塊之間的并行由MPI完成,圖像塊內(nèi)的并行由每個(gè)節(jié)點(diǎn)上的GPU完成.通過(guò)GPU集群將使系統(tǒng)的處理速度更快,以爭(zhēng)取在更加短的時(shí)間內(nèi)完成對(duì)更大尺寸圖像的處理工作.