劉小豫 聶維 趙娟 吳份俠
【摘? 要】圖像處理技術(shù)是當(dāng)前計(jì)算機(jī)必不可少的用途之一。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,圖像處理的并行算法也在不斷的更新。論文主要是基于CUDA框架視角,詳細(xì)地闡述了CUDA架構(gòu)的發(fā)展脈絡(luò),對(duì)CUDA圖像處理的并行算法進(jìn)行了系統(tǒng)的分析,同時(shí)對(duì)CUDA的架構(gòu)框架環(huán)境也有一定的研究,從而打破傳統(tǒng)的圖像處理壁壘,對(duì)新時(shí)期圖像處理方式進(jìn)行進(jìn)一步的探究。
【Abstract】Image processing technology is one of the essential uses of computer nowadays. With the continuous development of computer technology, the parallel algorithm of image processing is also constantly updated. Based on the perspective of CUDA framework, this paper elaborates the development of CUDA architecture, systematically analyzes the parallel algorithm of CUDA image processing, and also studies the CUDA architecture framework environment to a certain extent, so as to break the traditional image processing barriers and further explore the image processing mode in the new era.
【關(guān)鍵詞】CUDA;圖像處理;并行算法分析
【Keywords】CUDA; image processing; parallel algorithm analysis
【中圖分類號(hào)】TP391.4? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻(xiàn)標(biāo)志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文章編號(hào)】1673-1069(2020)09-0184-02
1 CUDA的發(fā)展脈絡(luò)
CUDA是GPU的衍生產(chǎn)物,隨著信息技術(shù)的不斷發(fā)展,顯卡也在高速發(fā)展,CPU的出現(xiàn)為圖片的顯示和處理作出了巨大貢獻(xiàn)。在此背景之下,NVIDIA公司推出了CUDA技術(shù),不僅能夠充分發(fā)揮出CPU圖像處理的功能,同時(shí)對(duì)于顯卡的發(fā)展也起到了不可忽視的推動(dòng)作用。就目前的CUDA發(fā)展技術(shù)而言,能夠保證使用的平臺(tái)包括GT200、G80、G92、G94、G96、GF100等。也就是說,截至目前,只有NVIDIA公司所研制的顯卡才能夠使用CUDA技術(shù)作為圖像處理的新技術(shù)。除此之外,C語言是CUDA編程的核心語言編譯器,在發(fā)展CUDA的同時(shí),該公司同樣也研發(fā)出了Geforce 8 CUDA的架構(gòu)類型。這種類型的架構(gòu)主要是為了絕大多數(shù)較為復(fù)雜的計(jì)算機(jī)問題。因此,技術(shù)人員為了能夠建立新的、高效的計(jì)算機(jī)解決方案,同時(shí)還能夠充分滿足計(jì)算機(jī)中對(duì)于密集數(shù)據(jù)的解決方案,在C語言的基礎(chǔ)上增加高性能的計(jì)算機(jī)指令。
當(dāng)前的CUDA系統(tǒng)架構(gòu)內(nèi)容主要包括開發(fā)庫、運(yùn)行期環(huán)境和驅(qū)動(dòng)。首先就開發(fā)庫而言。開發(fā)庫是在CUDA技術(shù)的基礎(chǔ)上建立的。在兩個(gè)標(biāo)準(zhǔn)數(shù)學(xué)的運(yùn)算基礎(chǔ)上,能夠解決大部分大規(guī)模并行問題,同時(shí)還能夠?yàn)镃UDA的運(yùn)行提供更為方便和快捷的幫助,滿足自身對(duì)計(jì)算機(jī)應(yīng)用的需要。其次是運(yùn)行期環(huán)境。運(yùn)行期環(huán)境根據(jù)其在CUDA的程序代碼開發(fā)中的運(yùn)行位置不同分為宿主代碼和設(shè)備代碼兩種。其中,宿主代碼主要是指能夠在CPU上運(yùn)行的代碼,而設(shè)備代碼則是在GPU上運(yùn)行的代碼。兩種代碼的編程形成,不僅為計(jì)算機(jī)的不同運(yùn)行方式提供了一定的便利,同時(shí)也為技術(shù)人員在設(shè)置代碼方面提供了較多的選擇。
1.1 CUDA 編程開發(fā)
CUDA編程相較于原有的GPU編程而言,在架構(gòu)上都具有一定的優(yōu)化和改進(jìn)。主要體現(xiàn)在兩方面:一是對(duì)于處理架構(gòu)方面,由原來的多種方式改為統(tǒng)一的方式,使得過去分布在定點(diǎn)著色器中的計(jì)算機(jī)資源和片元著色器中的計(jì)算機(jī)資源都能夠得到并加以利用。二是在將片內(nèi)共享存儲(chǔ)器引入計(jì)算機(jī)設(shè)備中,使計(jì)算機(jī)設(shè)備能夠支持隨機(jī)寫入和線程之間的通信。對(duì)于CUDA構(gòu)架的兩項(xiàng)改進(jìn)使得該系統(tǒng)能夠更適應(yīng)于GPU的通用計(jì)算。而對(duì)于技術(shù)人員而言,CUDA主要是由C語言來進(jìn)行開發(fā),而不需要借助圖形來學(xué)習(xí)API,這一特性的開展使得開發(fā)人員可以直接從CPU過渡至GPU編程。綜上所述,我們可以發(fā)現(xiàn)相較于原有的GPU編程語言,CUDA不僅在編程內(nèi)容和形式上更為簡(jiǎn)單,同時(shí)還能夠充分利用GPU的編程特性來完成線程間的通信,對(duì)圖形并行算法方面也有一定的推動(dòng)作用。這也是CUDA變成一經(jīng)推出就廣受好評(píng)的主要原因之一。
1.2 CUDA編程模型
CUDA的編程模型主要是將CPU作為主機(jī),GPU作為協(xié)助處理器和設(shè)備之一。這里需要注意的是,CUDA編程模型中,是可以一個(gè)主機(jī)和若干個(gè)設(shè)備共存的。相較于傳統(tǒng)的GPU編程模型而言,CUDA編程具有更為廣泛的應(yīng)用領(lǐng)域和應(yīng)用優(yōu)勢(shì)。一方面,CPU作為邏輯性較強(qiáng)的設(shè)備之一,具有較強(qiáng)的事務(wù)處理能力和并行計(jì)算能力,而GPU則是主要負(fù)責(zé)高度線程化的并行計(jì)算任務(wù)。技術(shù)人員在編程過程中,只需要將程序中的并行部分找出來并確定后,就可以將并行部分的內(nèi)容交由GPU處理。另一方面,CUDA在GPU上運(yùn)行的內(nèi)核函數(shù)是該程序中一個(gè)可以被并行執(zhí)行的步驟。也就是說,這個(gè)內(nèi)核函數(shù)是整個(gè)CUDA程序中的組成部分。在CUDA架構(gòu)中,一個(gè)完整的CUDA程序是由一系列的內(nèi)核函數(shù)和主機(jī)的串行處理部分共同組成的。這些組成形式具有一定的順序性,同時(shí)也具有一定的一致性。
2 CUDA框架視角下的圖像處理并行算法
在CUDA框架視角下,圖像處理并行算法是基于計(jì)算機(jī)圖像處理方式的更新和優(yōu)化之后的。在CUDA框架視角下的圖像處理并行算法中存在圖像插值。圖像插值的作用主要是用來計(jì)算在已有的圖像像素基礎(chǔ)上,圖像在被經(jīng)過放大后所缺少的像素值。這部分像素值被稱為圖像插值。除此之外,還有最近鄰插值和雙線性插值。這三條插值是目前在CUDA框架中最常用到的插值。其中雙線性插值又可以稱為雙線性內(nèi)插,主要是應(yīng)用于數(shù)學(xué)函數(shù)公式中的兩個(gè)變量,即插值函數(shù)的線性插值拓展,通俗來說,雙線性內(nèi)插值的核心思想是在函數(shù)的兩個(gè)方向分別進(jìn)行一次線性插值,從而求得該插值函數(shù)的兩個(gè)變量。
2.1 雙線性算法設(shè)計(jì)思路
在上文中我們提到了雙線性插值的概念和應(yīng)用方式。此段主要是探討雙線性算法的設(shè)計(jì)思路。雙線性插值的設(shè)計(jì)思路主要從三個(gè)方面來展開:
一是在并行算法中能夠?qū)崿F(xiàn)對(duì)圖像處理的一些基本功能。其中主要包括對(duì)圖像的打開、顯示和保存等。這些基本功能看似簡(jiǎn)單,是日常計(jì)算機(jī)操作中最為直接的圖像處理方式,但對(duì)于雙線性插值而言,在打開圖片的同時(shí),還包括將圖片內(nèi)容讀入內(nèi)存的步驟,除此之外,對(duì)于該圖像文件除文件頭以外的部分存儲(chǔ)在計(jì)算機(jī)中。最后根據(jù)該圖像的調(diào)色板、圖像顏色和種類等參數(shù)內(nèi)容一起保存至數(shù)據(jù)庫中,進(jìn)行存儲(chǔ)。
二是在圖片顯示階段的參數(shù)設(shè)置和存儲(chǔ)步驟完成后,對(duì)于圖片的放大等內(nèi)容需要開發(fā)者利用代碼對(duì)放大以后的圖片進(jìn)行再一次的存儲(chǔ)。這個(gè)步驟就相當(dāng)于將原圖的放大參數(shù)進(jìn)行重新拷貝,并對(duì)圖片的顏色、種類或者光效等參數(shù)進(jìn)行修改。
三是利用雙線性內(nèi)插值的算法,將原圖生成的信息作為基礎(chǔ),通過將圖片進(jìn)行放大、縮小等操作得到新的像素信息,使得圖片的像素信息更具有雙新線內(nèi)插值的算法設(shè)計(jì)思路,并逐一對(duì)該雙行線的算法進(jìn)行分析和研究。
2.2 雙線性插值算法實(shí)現(xiàn)
想要充分實(shí)現(xiàn)圖像的雙線性內(nèi)插值的算法,主要通過C++語言和CUDA雙線性插值兩種方式。通過分析或者結(jié)合這兩種雙線性內(nèi)插值的算法的方式,來提取兩種算法之間的不同特點(diǎn),同時(shí)也能夠使兩種算法更能夠適用于CUDA框架編程。雖然就目前的圖像處理方式而言,C++語言編程也能夠處理圖像,完成對(duì)圖像的編輯和參數(shù)的存儲(chǔ),但相比較而言,CUDA編程比C++語言更加高效和方便。就本文內(nèi)容而言,主要是對(duì)CUDA框架中的雙線性內(nèi)插值算法進(jìn)行研究。因此,在基于CUDA框架對(duì)圖像進(jìn)行處理時(shí),首先要對(duì)紋理寄存器進(jìn)行預(yù)留,紋理寄存器是基于CUDA框架中,對(duì)圖像處理所需要的主要工作區(qū)之一。紋理寄存器主要是一種只讀的存儲(chǔ)器,是由GPU紋理渲染的圖形專用單元發(fā)展而來。在計(jì)算機(jī)硬件中,紋理存儲(chǔ)器的數(shù)據(jù)是位于顯存中的,在讀取該文件時(shí),可以通過紋理緩存的加速器來進(jìn)行讀取,不僅能夠充分提高數(shù)據(jù)的讀取速度,同時(shí)還能夠保證數(shù)據(jù)的安全性。除此之外,目前來說,紋理存儲(chǔ)器中所綁定的數(shù)據(jù)量是比較大的,同時(shí)也支持一維、二維甚至是三維紋理。隨機(jī)訪問數(shù)據(jù)時(shí),紋理存儲(chǔ)器也能夠起到一定的加速效果。
3 結(jié)論
綜上所述,本文在基于CUDA框架上,詳細(xì)闡述了圖像處理的需求特點(diǎn)和當(dāng)前計(jì)算機(jī)對(duì)圖像處理的需求。其中主要包括圖像的插值需求和雙線性插值的算法分析。通過對(duì)CUDA框架的圖像處理并行算法分析,為未來CUDA架構(gòu)的高性能計(jì)算方法奠定了良好的基礎(chǔ)。
【參考文獻(xiàn)】
【1】岳俊,鄒進(jìn)貴,何豫航.基于CPU與GPU/CUDA的數(shù)字圖像處理程序的性能比較[J].地理空間信息,2012,10(04):45-47+180.
【2】劉鑫,姜超,馮存永.CUDA和OpenCV圖像并行處理方法研究[J].測(cè)繪科學(xué),2012,37(04):123-125.
【3】許雪貴,張清.基于CUDA的高效并行遙感影像處理[J].地理空間信息,2011,9(06):47-54+4.