高 偉,李維良,林 妍
GAO Wei,LI Weiliang,LIN Yan
中國(guó)地質(zhì)大學(xué)(武漢)信息工程學(xué)院,武漢430074
Department of Information Engineering,China University of Geosciences,Wuhan 430074,China
高光譜遙感影像分類是遙感定量信息提取的關(guān)鍵步驟之一,由于高光譜影像波段數(shù)目多,數(shù)據(jù)量往往較大,導(dǎo)致分類算法內(nèi)存消耗大,計(jì)算時(shí)間較長(zhǎng)。對(duì)此可以從計(jì)算機(jī)實(shí)現(xiàn)角度來(lái)進(jìn)行算法改進(jìn),如進(jìn)行并行化處理,以提高效率,滿足實(shí)際應(yīng)用的需要。
針對(duì)遙感影像分類技術(shù)的并行化研究,國(guó)內(nèi)外已經(jīng)出現(xiàn)一些研究成果。蔣艷凰對(duì)遙感圖像高精度并行監(jiān)督分類技術(shù)進(jìn)行了研究,首先提出幾種學(xué)習(xí)算法用于提高監(jiān)督分類的預(yù)測(cè)精度;然后采用并行處理技術(shù),提高遙感圖像監(jiān)督分類的處理速度[1];楊靖宇等重點(diǎn)研究了基于GPU 的多光譜遙感影像分類的流程,通過(guò)實(shí)驗(yàn)驗(yàn)證了該技術(shù)方法的有效性[2];Antonio Plaza 等利用異構(gòu)網(wǎng)絡(luò)環(huán)境下的工作站實(shí)現(xiàn)了一種綜合影像光譜信息與空間信息的形態(tài)學(xué)分類算法,取得了較為理想的加速效果[3];Dai Lijun 等提出了一種基于最大概率與加權(quán)平均的分類器,并采用計(jì)算機(jī)集群對(duì)影像分類過(guò)程進(jìn)行了并行化研究[4];Ujjwal Maulik 等提出了一種基于點(diǎn)對(duì)稱的遙感影像分類技術(shù),并利用計(jì)算機(jī)集群對(duì)算法進(jìn)行了并行化實(shí)現(xiàn),取得了線性加速比[5]。
現(xiàn)有的研究多數(shù)是基于計(jì)算機(jī)集群、工作站來(lái)開展的,具有成本較高,部署困難等缺陷,不適合桌面遙感軟件的應(yīng)用推廣;少數(shù)基于GPU 方式的研究主要是從流程的角度來(lái)論證該并行架構(gòu)對(duì)提高算法效率的有效性,對(duì)基于GPU 的算法優(yōu)化策略,尤其是存儲(chǔ)器優(yōu)化策略,尚且涉及得不深入或不全面。
本文以高光譜遙感影像分類為例,研究GPU 架構(gòu)下的桌面遙感影像處理系統(tǒng)高性能計(jì)算的設(shè)計(jì)思路、實(shí)現(xiàn)方法與關(guān)鍵技術(shù),其中對(duì)算法存儲(chǔ)優(yōu)化策略進(jìn)行重點(diǎn)研究。在這個(gè)過(guò)程中,詳細(xì)分析了影像數(shù)據(jù)的組織形式及其對(duì)GPU 存儲(chǔ)器訪問(wèn)效率的影響;改進(jìn)通常所使用的2D blocks 映射方式為1D blocks 映射方式以實(shí)現(xiàn)全局顯存的最佳訪問(wèn)形式;利用常量存儲(chǔ)器進(jìn)行標(biāo)準(zhǔn)樣本光譜向量的存儲(chǔ)以減少GPU 對(duì)低速顯存的訪問(wèn)頻率;利用共享存儲(chǔ)器進(jìn)行影像數(shù)據(jù)的存儲(chǔ)以提升GPU 運(yùn)算速度。
經(jīng)過(guò)幾十年的發(fā)展,高光譜遙感影像數(shù)據(jù)的處理與分析取得了長(zhǎng)足的進(jìn)步,形成了一系列面向高光譜影像特點(diǎn)的分類算法。這些算法可以總結(jié)為兩種思路:一種是基于地物物性的分類方法,主要是利用反映地物性質(zhì)的光譜曲線來(lái)識(shí)別;另一種思路是基于圖像數(shù)據(jù)的分類方法,主要是利用數(shù)據(jù)的統(tǒng)計(jì)特征來(lái)建立分類模型。其中,基于物性,即基于地物的光譜反射或發(fā)射曲線的分類識(shí)別方法最具特色,這種方法的主要特點(diǎn)是利用光譜庫(kù)中已知地物的光譜數(shù)據(jù),采用光譜匹配技術(shù)來(lái)識(shí)別圖像中的地物覆蓋類型。光譜匹配技術(shù)是通過(guò)對(duì)兩個(gè)光譜曲線進(jìn)行比較與特定運(yùn)算,來(lái)求解它們之間的相似度或者差異度。光譜匹配過(guò)程可以是全波長(zhǎng)范圍內(nèi)的比較,也可以是基于整波形特征的比較,或是利用感興趣波段的光譜,進(jìn)行部分波長(zhǎng)范圍的光譜組合參量的匹配。比較典型的匹配算法有:二值編碼匹配法、光譜波形匹配法以及光譜角填圖法等[6]。本文以光譜波形匹配法以及光譜角填圖法為例加以介紹。
光譜波形匹配包括兩種匹配方式,一種是將樣本光譜的全部或某一部分進(jìn)行光譜曲線的特征函數(shù)擬合,通過(guò)計(jì)算像光譜與樣本光譜特征函數(shù)之間的擬合度來(lái)計(jì)算像元光譜隸屬于某一樣本的概率。常用的特征函數(shù)有植被倒高斯模型、光譜吸收谷函數(shù)模型等。另一種方式是直接計(jì)算影像中各像元光譜矢量與樣本光譜矢量之間的線性相似度來(lái)確定各像元對(duì)應(yīng)地物所應(yīng)歸屬的類別[7-8]。對(duì)于同一地物類型具有很高的線性相似度,而非同一地物類型則具有較低的線性相似度。Clark 等提出了一種波段擬合算法,對(duì)于n個(gè)波段的像元光譜與樣本光譜來(lái)說(shuō),兩者的光譜擬合程度可以用F表示:
式中,F(xiàn)越大,表示像元光譜與樣本光譜之間的擬合程度越高。本章以此式為代表進(jìn)行采用CUDA 技術(shù)進(jìn)行高光譜影像分類技術(shù)的實(shí)驗(yàn)介紹。
光譜角填圖將像元N個(gè)波段的光譜響應(yīng)作為N維空間矢量,通過(guò)計(jì)算它與標(biāo)準(zhǔn)端元組分光譜矢量之間的廣義夾角來(lái)表征其匹配程度:夾角越小,說(shuō)明越相似,從而確定每個(gè)像元所應(yīng)歸屬的類別。設(shè)兩個(gè)n維空間矢量分別為T與R、為矢量R和矢量T的第i分量,則兩矢量廣義夾角可以通過(guò)公式(2)求解[6]:
式中,值越小,T與R的相似性越大。
對(duì)科萊恩新型催化劑的活性的分析中,測(cè)試了維持64%的轉(zhuǎn)化率所需的入口溫度(T64),且與對(duì)標(biāo)催化劑(見圖3)進(jìn)行比對(duì)。如果所需溫度降低,則表明催化劑活性更高。
CUDA是NVIDIA公司2007年提出的一種通用GPU計(jì)算模型。在CUDA 結(jié)構(gòu)中,CPU 端被稱為主機(jī)端(host),GPU 端被稱為設(shè)備端(device),采用SIMT(single instruction multiple thread)模式執(zhí)行程序。GPU 上并行執(zhí)行的程序稱為內(nèi)核函數(shù)(kernel)[9-10]。kernel 在執(zhí)行時(shí)創(chuàng)建很多線程(thread),若干線程會(huì)被組織成線程塊(block),而若干block 再組成網(wǎng)格(grid)。每個(gè)thread 按照指定block ID 與thread ID 來(lái)唯一確定。
CUDA 的計(jì)算資源主要來(lái)源于GPU 內(nèi)置的高度線程化的多核流處理器(Streaning Multiprocessor,SM)陣列,每個(gè)SM 又包含多個(gè)流處理器(Streaming Processor,SP)。通常,一個(gè)線程塊會(huì)被分配到一個(gè)SM,塊內(nèi)的每個(gè)線程被映射到一個(gè)SP 上。程序通過(guò)大量線程來(lái)獲得并行性,這種并行主要有細(xì)粒度并行與粗粒度并行兩個(gè)級(jí)別:細(xì)粒度級(jí)并行是指block 內(nèi)線程之間的并行,粗粒度級(jí)并行是指block 之間的并行。
圖1 計(jì)算任務(wù)分解過(guò)程
CUDA 的存儲(chǔ)器按線程訪問(wèn)權(quán)限可以劃分為3 個(gè)層次。第1 層為單個(gè)線程的私有存儲(chǔ)器,包括寄存器文件(register files)、局部存儲(chǔ)器(local memory),第2 層為線程塊中所有線程可以共享的存儲(chǔ)器(shared memory),第3 層為網(wǎng)格內(nèi)所有線程可以訪問(wèn)的最外層存儲(chǔ)器,包括全局存儲(chǔ)器(global memory)、常量存儲(chǔ)器(const memory)和紋理存儲(chǔ)器(texture memory)。
基于CUDA 的高光譜遙感影像分類,須首先確定網(wǎng)格中線程塊的數(shù)量以及每個(gè)線程塊中執(zhí)行線程的數(shù)量。
線程塊數(shù)量的確定由待求解問(wèn)題的規(guī)模來(lái)確定。在CUDA中,一個(gè)block必須被分配到一個(gè)SM中,但一個(gè)SM同一時(shí)刻可以有多個(gè)活動(dòng)線程塊(active block)等待執(zhí)行。一般來(lái)說(shuō),為便于理解,常常把影像網(wǎng)格劃分成維度大小為(IMG_WIDTH+X_BLOCK_DIM–1)/X_BLOCK_DIM,(IMG_HEIGHT-Y_BLOCK_DIM–1)/Y_BLOCK_DIM的2D block集合[11-12],其中,IMG_WIDTH、IMG_HEIGHT分別為影像的寬度與高度;X_BLOCK_DIM、Y_BLOCK_DIM分別為每個(gè)block 內(nèi)X方向上的線程數(shù)與Y方向上的線程數(shù)。
在確定了網(wǎng)格中的線程塊數(shù)量之后,每個(gè)block 待處理的子圖像塊就得以確定。此時(shí),需要確定block 中每個(gè)執(zhí)行線程的計(jì)算任務(wù)。在SAM 法高光譜影像分類過(guò)程中,子圖像塊中所有像素都要與各標(biāo)準(zhǔn)樣本進(jìn)行光譜特征值的比較與計(jì)算,尋找SAM 值最小的標(biāo)準(zhǔn)樣本,這是分類過(guò)程中計(jì)算最密集的地方,也是線程計(jì)算任務(wù)劃分的關(guān)鍵。如圖1 所示,讓block 中的各線程T0、T1、T2、…、Tn去對(duì)應(yīng)處理子圖塊內(nèi)像素點(diǎn)p0、p1、p2、…、pn的光譜特征值,將影像像素映射到并行處理線程,線程的計(jì)算任務(wù)得到較好劃分。整個(gè)計(jì)算任務(wù)分解過(guò)程如圖1 所示。
完成計(jì)算任務(wù)分配后,就可以為內(nèi)核函數(shù)提供影像數(shù)據(jù)并啟動(dòng)內(nèi)核函數(shù)?;贑UDA 的高光譜遙感影像分類計(jì)算過(guò)程如圖2 所示,可以總結(jié)為:將影像數(shù)據(jù)從內(nèi)存拷貝到顯存;確定每個(gè)block 的維度與線程數(shù)量,建立block 與影像子圖塊之間的映射關(guān)系,并對(duì)block 中的線程進(jìn)行計(jì)算任務(wù)分配,確定每個(gè)線程將要處理的像素;調(diào)用kernel 函數(shù)在GPU 上進(jìn)行并行分類計(jì)算;kernel函數(shù)運(yùn)行完畢后,將運(yùn)算結(jié)果從顯存拷貝到內(nèi)存。
圖2 基于CUDA 的并行分類流程圖
CUDA 實(shí)質(zhì)上將多個(gè)線程捆綁執(zhí)行,每個(gè)block 被劃分成warp,warp 內(nèi)線程執(zhí)行同一條指令[13],half-warp是存儲(chǔ)操作的基本單位[14]。本文重點(diǎn)從共享存儲(chǔ)器、全局存儲(chǔ)器、常量存儲(chǔ)器三個(gè)方面來(lái)探討高光譜影影像分類過(guò)程中GPU 的存儲(chǔ)優(yōu)化策略,在存儲(chǔ)優(yōu)化過(guò)程中,需重點(diǎn)關(guān)注half-warp 中的線程。
GPU 片內(nèi)沒(méi)有對(duì)顯卡的全局存儲(chǔ)器進(jìn)行緩存,導(dǎo)致全局存儲(chǔ)器的訪問(wèn)具有較大延遲。因此,想要進(jìn)一步提高分類算法的運(yùn)算效率,必須最小化GPU 對(duì)全局存儲(chǔ)器的訪問(wèn)。并行分類算法kernel 函數(shù)中,可以將block所對(duì)應(yīng)的子圖塊定義為共享型。在kernel 函數(shù)執(zhí)行之初,將指定的子圖塊從全局顯存載入到流多處理器的共享型存儲(chǔ)器中,以供后續(xù)分類過(guò)程的處理。由于每一個(gè)block 在圖像內(nèi)獲取的子圖像塊不同,以塊索引號(hào)和線程索引號(hào)為判斷分支,可以將子圖塊載入共享存儲(chǔ)器這個(gè)過(guò)程作為kernel 函數(shù)的一部分在GPU 上并行進(jìn)行。根據(jù)block 的索引號(hào),每個(gè)block 找到與其對(duì)應(yīng)的子圖像塊,再根據(jù)block 中thread 的索引號(hào),每個(gè)thread 將其對(duì)應(yīng)的子圖塊像素從全局存儲(chǔ)器中取出,傳入到共享存儲(chǔ)器中以供后續(xù)計(jì)算,如圖3 所示。
圖3 將子圖塊載入共享存儲(chǔ)器示意圖
共享存儲(chǔ)器被劃分為大小相等,能被同時(shí)訪問(wèn)的存儲(chǔ)器模塊,稱為bank。Bank 的數(shù)據(jù)組織方式是:每個(gè)bank 的寬度為4 Byte,相鄰的4 Byte 數(shù)據(jù)被組織在相鄰的bank 上,每個(gè)bank 在每個(gè)時(shí)鐘周期可以提供4 Byte的帶寬,不同的bank 可以互不干擾地同時(shí)工作。如果half-warp 中的線程請(qǐng)求訪問(wèn)的地址位于同一個(gè)bank中,存儲(chǔ)器模塊在同一時(shí)間無(wú)法響應(yīng)多個(gè)請(qǐng)求,所有這些請(qǐng)求必須串行完成,降低了存儲(chǔ)器訪問(wèn)效率。本文中,每個(gè)half-warp 中的線程對(duì)應(yīng)處理一個(gè)像素的數(shù)據(jù),為了使thread ID 相鄰的線程在同一時(shí)鐘周期內(nèi)訪問(wèn)相鄰的bank,共享存儲(chǔ)器中的子圖塊按照BSQ 方式進(jìn)行存儲(chǔ)。
全局存儲(chǔ)器數(shù)據(jù)存儲(chǔ)與訪問(wèn)優(yōu)化的重點(diǎn)是獲取存儲(chǔ)器合并訪問(wèn)條件,盡管不同計(jì)算能力的CUDA 設(shè)備對(duì)合并訪問(wèn)條件的限制并不相同,其表現(xiàn)為隨著設(shè)備計(jì)算能力的提高,對(duì)合并訪問(wèn)條件的限制相應(yīng)地降低,但是,盡量遵循嚴(yán)格的合并訪問(wèn)條件,預(yù)期可以較大地提升存儲(chǔ)器訪問(wèn)效率。
當(dāng)half-warp 中所有線程在執(zhí)行同一條指令時(shí),訪問(wèn)經(jīng)特定字長(zhǎng)對(duì)齊的存儲(chǔ)段中的連續(xù)單元時(shí),全局存儲(chǔ)器獲得最佳訪問(wèn)形式,這種情況下,硬件把所有訪問(wèn)請(qǐng)求結(jié)合成一個(gè)對(duì)全局存儲(chǔ)器連續(xù)單元的合并訪問(wèn)[13]。一般而言,存儲(chǔ)段需要按照線程訪問(wèn)字長(zhǎng)的half-warp對(duì)齊[14],本文采用float 類型對(duì)影像數(shù)據(jù)在顯存中進(jìn)行存儲(chǔ),因此,存儲(chǔ)段需要按照64 Byte進(jìn)行對(duì)齊。
影像數(shù)據(jù)通常有BSQ、BIL、BIP三種存儲(chǔ)方式。halfwarp中每個(gè)線程對(duì)應(yīng)處理一個(gè)像素,當(dāng)影像數(shù)據(jù)按照BIL與BIP 兩種方式進(jìn)行存儲(chǔ)時(shí),half-warp 中相鄰線程所訪問(wèn)的全局顯存地址不連續(xù),無(wú)法滿足合并訪問(wèn)條件,顯存訪問(wèn)效率會(huì)受到影響,而當(dāng)影像數(shù)據(jù)按照BSQ 方式進(jìn)行存儲(chǔ)時(shí),這種情況會(huì)得到一定程度的緩解,如圖4所示。
采用運(yùn)行API cudaMalloc()函數(shù)分配顯存,能夠保證其首地址按照256 Byte 對(duì)齊[15]。當(dāng)影像各子圖像塊與2D blocks 建立映射后,首block 塊中首行線程滿足合并訪問(wèn)條件,當(dāng)選擇合適的block 塊大?。╤alf-warp 的倍數(shù))時(shí),網(wǎng)格中首行block 塊中的首行線程滿足合并訪問(wèn)條件,然而,網(wǎng)格中其他線程,如圖5 線程塊C 中的線程,可能由于待訪問(wèn)的存儲(chǔ)段沒(méi)有對(duì)齊到指定地址而無(wú)法獲得最佳訪問(wèn)形式。一種優(yōu)化方法是將2D blocks 映射改進(jìn)成1D blocks 映射,blocks 中的線程依照block ID 與thread ID 依次對(duì)應(yīng)處理一個(gè)像素,當(dāng)block 中線程數(shù)量為half-warp 的倍數(shù)時(shí),可以獲得最佳訪問(wèn)形式。
圖4 各數(shù)據(jù)存儲(chǔ)方式對(duì)應(yīng)的顯存訪問(wèn)示意圖
圖5 2D blocks映射所對(duì)應(yīng)的全局顯存訪問(wèn)示意圖
CUDA 提供了常量存儲(chǔ)器,常量存儲(chǔ)器位于全局存儲(chǔ)器中,但采用了緩存提高了訪問(wèn)效率[15]。在影像分類過(guò)程中,各個(gè)標(biāo)準(zhǔn)樣本的光譜特征向量也會(huì)十分頻繁地與影像各個(gè)像素的光譜特征向量進(jìn)行比較與計(jì)算。標(biāo)準(zhǔn)樣本的光譜特征向量數(shù)據(jù)在并行分類開始之前從主機(jī)內(nèi)存拷貝到GPU 全局存儲(chǔ)器,且在整個(gè)分類過(guò)程中維持不變。在GPU 分類運(yùn)算開始之前,將標(biāo)準(zhǔn)樣本的光譜特征向量存放在常量存儲(chǔ)器中,可以在一定程度上減少對(duì)全局存儲(chǔ)器的訪問(wèn)次數(shù)。
根據(jù)以上研究思路,對(duì)基于CUDA 的高光譜影像分類存儲(chǔ)優(yōu)化策略進(jìn)行了實(shí)驗(yàn)。本文所使用的硬件實(shí)驗(yàn)環(huán)境為:NVIDIA GEFORCE GT 425M 顯卡,該顯卡所使用的GPU 內(nèi)置兩個(gè)SM,每個(gè)SM 擁有48 個(gè)SP,共96 個(gè)SP,顯卡的顯存容量為1 GB;軟件實(shí)驗(yàn)環(huán)境為:Windows 7 操作系統(tǒng)及VC++2005 編譯器。
實(shí)驗(yàn)首先對(duì)比利用CPU 與利用GPU 的高光譜影像分類結(jié)果。實(shí)驗(yàn)數(shù)據(jù)采用AVIRIS 高光譜影像,原始影像波段數(shù)量為60,在本次實(shí)驗(yàn)中,為加大相鄰波段之間的差異性,減少相關(guān)性,便于計(jì)算結(jié)果的觀察,采用等間隔取樣的方法選擇其中25 個(gè)波段的數(shù)據(jù)形成新的原始影像作為實(shí)驗(yàn)數(shù)據(jù),影像尺寸為350×350,影像數(shù)據(jù)類型的單精度浮點(diǎn)型,如圖6 所示。
圖6 分類結(jié)果實(shí)驗(yàn)原始影像
高光譜遙感影像分類結(jié)果如圖7 所示,其中圖7(a)為CPU 串行計(jì)算情況之下的光譜角匹配法分類結(jié)果,圖7(b)為基于CUDA 的光譜角匹配法分類結(jié)果,圖7(c)為CPU 串行計(jì)算情況之下的SAM 法分類結(jié)果,圖7(d)為基于CUDA 的SAM 法分類結(jié)果。
接下來(lái),進(jìn)行全局存儲(chǔ)器、共享存儲(chǔ)優(yōu)化、常量存儲(chǔ)的優(yōu)化實(shí)驗(yàn)。實(shí)驗(yàn)所用的高光譜影像與4.1 節(jié)中所使用的數(shù)據(jù)相同。為滿足實(shí)驗(yàn)所用CUDA 設(shè)備共享存儲(chǔ)器容量大小的限制,block 尺寸不宜過(guò)大,在本次實(shí)驗(yàn)中設(shè)置為16×8。實(shí)驗(yàn)分4 組進(jìn)行,第1 組實(shí)驗(yàn)不進(jìn)行存儲(chǔ)優(yōu)化,第2 組為全局存儲(chǔ)器優(yōu)化實(shí)驗(yàn),采用3.2 節(jié)中所示的略仍能在一定程度上減少GPU 對(duì)低速全局存儲(chǔ)器的過(guò)度訪問(wèn),算法計(jì)算效率仍有一定程度的提高。1D blocks 與子圖塊進(jìn)行映射,每個(gè)block 中包含16×8個(gè)線程,第3 組與第4 組分別為共享存儲(chǔ)器優(yōu)化實(shí)驗(yàn)與常量存儲(chǔ)器優(yōu)化實(shí)驗(yàn),均采用2D blocks 與子圖塊進(jìn)行映射。
圖7 分類結(jié)果
表1 全局存儲(chǔ)器、共享存儲(chǔ)器、常量存儲(chǔ)器數(shù)據(jù)存儲(chǔ)與訪問(wèn)優(yōu)化實(shí)驗(yàn)結(jié)果 ms
表2 實(shí)驗(yàn)影像信息
從表1 第2 列與第3 列的對(duì)照實(shí)驗(yàn)結(jié)果可見,由于影像尺寸(350×350)的制約,在進(jìn)行2D blocks 映射時(shí),線程在對(duì)影像第2 列以及以后各列數(shù)據(jù)進(jìn)行訪問(wèn)時(shí),無(wú)法獲得存儲(chǔ)器的最佳訪問(wèn)形式,對(duì)程序運(yùn)行效率造成影響,這種情形在采用1D blocks 映射優(yōu)化后得到一定程度的改善。從表1 第4 列與第2 列的對(duì)照實(shí)驗(yàn)結(jié)果可見,共享存儲(chǔ)器優(yōu)化有效地減少了GPU 對(duì)全局存儲(chǔ)器的訪問(wèn)頻率,較大程度地提升了程序計(jì)算的效率。從表1 第4 列與第5 列以及第5 列與第2 列的對(duì)照實(shí)驗(yàn)結(jié)果可見,在僅使用常量存儲(chǔ)器優(yōu)化策略的情況之下,算法優(yōu)化率不及僅使用共享存儲(chǔ)器優(yōu)化策略的情況,但是,相比不采取任何存儲(chǔ)優(yōu)化措施的情況,常量存儲(chǔ)器優(yōu)化策
接下來(lái),采用多幅不同尺寸與數(shù)據(jù)量的高光譜遙感影像對(duì)比GPU 高性能計(jì)算情況之下與CPU 串行計(jì)算情況下的分類算法用時(shí),以證明GPU 高性能計(jì)算對(duì)高光譜遙感影像分類算法效率提升的有效性。表2 顯示了這些影像的尺寸與數(shù)據(jù)量信息,各影像的波段信息與4.1 節(jié)中所述的相同。鑒于顯存容量的限制,在將影像從內(nèi)存拷貝到顯存的過(guò)程中,采用分塊拷貝的策略,每次拷貝整副影像中適宜尺寸的影像塊進(jìn)行并行處理,這里影像塊大小采用256×256 像素;同樣為滿足實(shí)驗(yàn)所用CUDA 設(shè)備共享存儲(chǔ)器容量大小的限制,block尺寸不宜過(guò)大,這里設(shè)置為16×8。實(shí)驗(yàn)結(jié)果如表3 與表4 所示。
從表3 與表4 所示的CPU 計(jì)算時(shí)間與GPU 運(yùn)行時(shí)間中的有效計(jì)算時(shí)間對(duì)比可見,針對(duì)各種尺寸與數(shù)據(jù)量的遙感影像,無(wú)論是光譜波形匹配分類算法還是SAM分類算法,在CUDA 架構(gòu)下的計(jì)算時(shí)間相對(duì)于CPU 而言都有大幅度的縮減。盡管由于內(nèi)存與顯存之間數(shù)據(jù)傳輸?shù)挠绊懀沟迷贕PU 運(yùn)行總時(shí)間中有效計(jì)算時(shí)間所占的比例降低,在一定程度上影響了CUDA 架構(gòu)下分類算法的運(yùn)算效率,但是,由于GPU 使得有效計(jì)算時(shí)間大幅減少,且內(nèi)存與顯存之間數(shù)據(jù)傳輸時(shí)間并不長(zhǎng),從表3 以及表4 最后一列所示加速比可知,針對(duì)不同尺寸與數(shù)據(jù)量的影像,CUDA 架構(gòu)下的高光譜遙感影像分類算法的運(yùn)行效率都得到了顯著的提升。
表3 光譜波形匹配分類算法效率對(duì)照
表4 SAM 分類算法效率對(duì)照
表5 分類精度對(duì)照
接下來(lái)評(píng)價(jià)高性能計(jì)算的精度。在下面的實(shí)驗(yàn)中,計(jì)算GPU 高性能計(jì)算下與CPU 串行計(jì)算下結(jié)果影像對(duì)應(yīng)位置像素值之間的差異,并將差異率從大到小劃分若干個(gè)區(qū)間,計(jì)算落在各個(gè)區(qū)間的像素?cái)?shù)量及所占的比例。實(shí)驗(yàn)采用4.3 節(jié)中所示的影像作為數(shù)據(jù)源,實(shí)驗(yàn)結(jié)果如表5 所示。
表5 第2 大列顯示了GPU 與CPU 計(jì)算結(jié)果在各差異范圍內(nèi)的像素?cái)?shù)量及所占比例,從中可以看出,無(wú)論SAM 算法還是光譜波形匹配算法,GPU 高性能計(jì)算與CPU 串行計(jì)算的結(jié)果中除極少數(shù)像素的像素值差異在10%之上,超過(guò)99.99%的像素的差異率在10-8之下。基于CUDA 的高光譜影像高性能計(jì)算在大幅度提升計(jì)算效率的同時(shí)維護(hù)了計(jì)算結(jié)果的準(zhǔn)確性。
本文以高光譜遙感影像分類算法為例,介紹利用多核CUDA 技術(shù)實(shí)現(xiàn)該算法并行化的設(shè)計(jì)思路與實(shí)現(xiàn)方法,重點(diǎn)對(duì)包括共享存儲(chǔ)器、常量存儲(chǔ)器、全局存儲(chǔ)器在內(nèi)一系列GPU 存儲(chǔ)優(yōu)化策略進(jìn)行研究。實(shí)驗(yàn)取得良好效果。為探索利用GPU 技術(shù),充分挖掘現(xiàn)有單機(jī)計(jì)算機(jī)系統(tǒng)的計(jì)算資源,提升桌面遙感影像處理系統(tǒng)的運(yùn)行效率,提供了一條具有借鑒意義的途徑。
當(dāng)然,本文在以高光譜影像監(jiān)督分類為例探討利用CUDA 技術(shù)進(jìn)行桌面遙感影像處理系統(tǒng)高性能計(jì)算時(shí),重點(diǎn)從CUDA 設(shè)備各類存儲(chǔ)器的利用研究算法優(yōu)化策略,對(duì)于其他策略如:指令選擇、指令展開、最小化主機(jī)與設(shè)備間數(shù)據(jù)傳輸次數(shù)等則沒(méi)有涉及。為進(jìn)一步提升算法運(yùn)行效率,這些都有待后續(xù)研究與探討。
[1] 蔣艷凰.遙感影像高精度并行監(jiān)督分類技術(shù)研究[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2004.
[2] 楊靖宇,張永生,董廣軍.基于GPU 的遙感影SAM 分類算法并行化研究[J].測(cè)繪科學(xué),2010,35(3):9-11.
[3] Plaza A,Plaza J,Valencia D.AMEEPAR:parallel morphological algorithm for hyperspectral image classification on heterogeneous.networks of workstations[C]//Lecture Notes in Computer Science,2006,3993:24-31.
[4] Dai Lijun,Liu Chuang.Research on remote sensing image of land cover classification based on multiple classifier combination[J].Wuhan University Journal of Nature Science,2011,16(4):363-368.
[5] Maulik U,Sarkar A.Efficient parallel algorithm for pixel classification in remote sensing imagery[J].GeoInformatica,2012,16(2):391-407.
[6] 童慶禧,張兵,鄭蘭芬.高光譜遙感——原理、技術(shù)與應(yīng)用[M].北京:高等教育出版社,2006.
[7] 楊哲海.高光譜影像分類若干關(guān)鍵技術(shù)的研究[D].鄭州:解放軍信息工程大學(xué),2006.
[8] 楊國(guó)鵬.基于核方法的高光譜影像分類與特征提取[D].鄭州:解放軍信息工程大學(xué),2007.
[9] 沈玉琳.通用GPU 計(jì)算技術(shù)在高性能計(jì)算平臺(tái)上的應(yīng)用研究[D].蘭州:蘭州大學(xué),2012.
[10] 趙進(jìn).基于GPU 的遙感圖像并行處理算法及其優(yōu)化技術(shù)研究[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2011.
[11] 肖漢,張祖勛.基于GPGPU 的并行影像匹配算法[J].測(cè)繪學(xué)報(bào),2010,39(1):46-51.
[12] 羅耀華.高性能計(jì)算在高光譜遙感數(shù)據(jù)處理中的應(yīng)用研究[D].成都:成都理工大學(xué),2013.
[13] KIRK D B,W HWU Wen-mei.大規(guī)模并行處理器編程實(shí)戰(zhàn)[M].陳曙暉,熊淑華,譯.北京:清華大學(xué)出版社,2010.
[14] 張舒,褚艷利.高性能運(yùn)算之CUDA[M].北京:中國(guó)水利水電出版社,2009.
[15] NVIDIA.NVIDIA CUDA C programming guide[EB/OL].(2012).http://developer.download.nvidia.com/compute/Dev-Zone/docs/html/C/doc/CUDA_C_Programming_Guide.pdf.