楊肇桐
摘要: 低空航拍可以獲得大比例尺、高精度的影像,具有響應(yīng)時(shí)間短、靈活等優(yōu)點(diǎn),常用于災(zāi)害應(yīng)急制圖中。同時(shí),救災(zāi)的緊迫性要求遙感影像能夠被快速處理。在快速處理領(lǐng)域,一般采用分布式集群計(jì)算機(jī)和多核CPU來(lái)獲得大數(shù)據(jù)量和復(fù)雜計(jì)算的加速效果,但其局限性比較大,大集群占用太大物理空間,多核CPU性能難以達(dá)到要求,而可編程圖形處理器(GPU)同時(shí)解決了分布式集群和多核CPU的局限性。特別是近年來(lái),可編程圖形處理器的并行處理在其他領(lǐng)域得到了很好的應(yīng)用和發(fā)展。因此,研究其在遙感圖像快速處理領(lǐng)域中的應(yīng)用具有重要的現(xiàn)實(shí)意義。
關(guān)鍵詞: GPU;快速處理;錯(cuò)峰調(diào)度;快速傅里葉變換
【中圖分類號(hào)】P37【文獻(xiàn)標(biāo)識(shí)碼】B【文章編號(hào)】1674-3733(2020)15-0226-02
分析GPU的并行可編程性和CUDA編程模型特征,通過(guò)對(duì)遙感影像錯(cuò)峰調(diào)度、快速傅里葉變換和高斯差分算法的CUDA編程設(shè)計(jì),在GPU上實(shí)現(xiàn)這3種算法的快速并行處理,并與CPU結(jié)果對(duì)比,證明GPU能夠在數(shù)據(jù)精度和CPU保持一致的基礎(chǔ)上大幅縮短遙感影像處理時(shí)間,加速比可以達(dá)到一個(gè)數(shù)量級(jí)。
1影像處理算法分析CUDA設(shè)計(jì)
1.1錯(cuò)峰調(diào)度算法分析優(yōu)化。在改正航攝過(guò)程中,由于航攝軸傾斜、中心投影、大氣折光、地球曲率等因素影響會(huì)產(chǎn)生影像幾何變形問(wèn)題。錯(cuò)峰調(diào)度算法模型在進(jìn)行共線方程計(jì)算像點(diǎn)坐標(biāo)、灰度插值這兩個(gè)有大量迭代和計(jì)算的作業(yè)中,可通過(guò)選擇適合的作業(yè)啟動(dòng)時(shí)間,實(shí)現(xiàn)不同作業(yè)高低峰負(fù)載的交叉重疊,以充分利用計(jì)算資源。
如圖1所示,在共線方程和灰度插值迭代過(guò)程中,每一步參與計(jì)算的頂點(diǎn)的數(shù)目是動(dòng)態(tài)變化的,因此計(jì)算負(fù)載會(huì)出現(xiàn)三類變化。(1)漸降類,迭代初始階段,所有頂點(diǎn)均參與計(jì)算,但在后續(xù)迭代計(jì)算過(guò)程中,參與計(jì)算的頂點(diǎn)數(shù)目呈逐漸下降趨勢(shì);(2)循環(huán)類,圖中頂點(diǎn)被分組,組內(nèi)頂點(diǎn)在一個(gè)迭代步內(nèi)處理,組間頂點(diǎn)在不同步內(nèi)處理,故計(jì)算負(fù)載循環(huán)變化;(3)拋物線類,頂點(diǎn)參與計(jì)算的時(shí)間點(diǎn)與圖的遍歷過(guò)程緊密相關(guān),計(jì)算負(fù)載呈現(xiàn)單調(diào)漸變特性。三種圖算法類的差異化的頂點(diǎn)收斂速度為
這三種變化會(huì)導(dǎo)致GPU計(jì)算負(fù)載低的時(shí)候,很多線程處于空轉(zhuǎn)狀態(tài)。可通過(guò)CUDA編程模型對(duì)共線方程和灰度插值作業(yè)的準(zhǔn)確分類和調(diào)度啟動(dòng)時(shí)間的準(zhǔn)確計(jì)算,實(shí)現(xiàn)在基于GPU的影像幾何糾正過(guò)程中對(duì)于大量遙感影像數(shù)據(jù)的快速處理。
1.2快速傅里葉變換算法分析。快速傅里葉變換(fast Fourier transform,F(xiàn)FT)的基本思想是利用DFT旋轉(zhuǎn)因子的周期性和對(duì)稱性,使長(zhǎng)序列的DFT分解為更小長(zhǎng)度的DFT,然后利用這些小的DFT計(jì)算來(lái)代替大的DFT計(jì)算,從而達(dá)到提高效率的目的。FFT算法在CPU端主要的費(fèi)時(shí)操作是因?yàn)橄穹?、循環(huán)次數(shù)多、計(jì)算較為復(fù)雜。設(shè)x(n)為長(zhǎng)度為N的有限長(zhǎng)序列,則其離散傅里葉正變換(DFT)為;
式中,稱為旋轉(zhuǎn)因子或蝶形因子。通過(guò)兩次調(diào)用一維快速傅里葉變換即可實(shí)現(xiàn)二維快速傅里葉變換。二維快速傅里葉變換的輸入相當(dāng)于一個(gè)M行N列的復(fù)數(shù)矩陣,對(duì)其每行進(jìn)行一維快速傅里葉變換,再對(duì)其每列進(jìn)行一維快速傅里葉變換,這樣就達(dá)到了變換的目的。根據(jù)以上算法分析,每一個(gè)像素都要依次進(jìn)行行列各一次DFT變換。此算法具有相對(duì)的數(shù)據(jù)獨(dú)立性,可以利用GPU并行處理技術(shù),適合CUDA編程模型。本試驗(yàn)編程調(diào)用了CUFFT函數(shù)庫(kù)。CUDA提供了封裝好的CUFFT庫(kù),它提供了與CPU上的FFTW庫(kù)相似的接口,能夠讓使用者輕易地挖掘GPU的強(qiáng)大浮點(diǎn)處理能力,不用自己去實(shí)現(xiàn)專門的FFT內(nèi)核函數(shù)。使用者通過(guò)調(diào)用CUFFT庫(kù)的API函數(shù),即可完成FFT變換。
1.3高斯差分算法分析設(shè)計(jì)。高斯差分是SIFT匹配算法的關(guān)鍵步驟,它包括影像空間域卷積和生成DOG影像。影像空間域卷積算法簡(jiǎn)單,即用一個(gè)窗口模板移動(dòng)來(lái)平滑整幅影像;再把不同卷積模板卷積的影像對(duì)應(yīng)位置相減即得到高斯差分圖像。高斯差分算法在CPU端所需時(shí)間主要還是消耗在大量的循環(huán)和復(fù)雜的計(jì)算中。本次試驗(yàn)算法決定使用5幅卷積圖像生成1組4層高斯差分影像。為了簡(jiǎn)便算法,設(shè)計(jì)把二維卷積變換為先行卷積再列卷積,再利用卷積圖像相減得到差分圖像。根據(jù)以上算法分析,每一個(gè)像素點(diǎn)都要先行卷積再列卷積,再對(duì)應(yīng)位置相減。此過(guò)程具有天然的數(shù)據(jù)獨(dú)立性,非常適合GPU并行CUDA編程模型。根據(jù)高斯差分算法分析和CUDA編程模型,整個(gè)算法的實(shí)現(xiàn)流程如下:(1)CPU讀入影像,生成卷積模板;(2)CPU把影像和模板數(shù)據(jù)開(kāi)辟,并拷貝顯存空間,影像放入全局存儲(chǔ)器,采用合并訪存的方式訪問(wèn),因?yàn)槟0寰哂兄貜?fù)使用性和不改變性,所以放入共享存儲(chǔ)器來(lái)提高訪問(wèn)速度,另外還需在全局存儲(chǔ)器中開(kāi)辟5幅中間影像空間和5幅高斯差分結(jié)果空間;(3)在GPU端,為了確保列變換之前行變換已完成,采用CUDA中的流控制來(lái)依次啟動(dòng)行列兩個(gè)卷積Kernel函數(shù),利用CUDA編程模型的多線程并行處理技術(shù)來(lái)拆分多次循環(huán),卷積在各線程內(nèi)部進(jìn)行,每個(gè)線程負(fù)責(zé)一個(gè)像素點(diǎn)的相減;(4)在CPU端把4幅高斯差分影像拷貝到內(nèi)存,釋放各種GPU存儲(chǔ)器資源,并將差分影像寫入硬盤。
2CUDA試驗(yàn)及精度時(shí)間分析
2.1試驗(yàn)環(huán)境。為了更有效地說(shuō)明圖形處理器在遙感影像快速處理領(lǐng)域的作用,所有編程試驗(yàn)均在統(tǒng)一的電腦配置環(huán)境下進(jìn)行,除了添加一個(gè)GPU Quadro4000顯卡外,其余配置都和經(jīng)典編程環(huán)境一致。算法實(shí)現(xiàn)的主要硬件平臺(tái):青島海洋科學(xué)與技術(shù)-高性能計(jì)算中心提供GPU服務(wù)器(GPU計(jì)算節(jié)點(diǎn)8臺(tái),每節(jié)點(diǎn)配置:2顆Intel Xeon E5-2680v4十四核處理器,主頻2.4GHz,256GB DDR4內(nèi)存,4個(gè)Nvidia Kepler K40M GPU加速卡)。算法依賴的主要軟件平臺(tái):Windows 10、Visual Studio 2019、 NVIDIA GPU Computing Toolkit(CUDA 10)、FFTW和CUFFT函數(shù)庫(kù)。為了更好地體現(xiàn)圖形處理器的性能,不僅要對(duì)多幅不同像幅的原始遙感影像進(jìn)行處理,還要分析算法在CPU和GPU上運(yùn)算數(shù)據(jù)精度和時(shí)間的差異。
2.2CPU與GPU數(shù)據(jù)精度分析。由于CPU和GPU由不同的處理單元組成,對(duì)單浮點(diǎn)和雙浮點(diǎn)類型的支持可能不同,因此有可能會(huì)造成除法保留的小數(shù)位不同,最終造成影像灰度級(jí)別的差異。同時(shí),由于算法必須為適合CUDA統(tǒng)一編程模型而作適當(dāng)?shù)男薷?,同樣可能存在差異,因此必須?duì)比它們的數(shù)據(jù)精度。在此,僅以單波段正射糾正為例,將基于CPU和GPU獲得的影像進(jìn)行數(shù)據(jù)精度分析,統(tǒng)計(jì)兩者的差異。
2.3CPU與GPU時(shí)間分析。為了更加充分地說(shuō)明GPU加速遙感影像處理的能力,采用像幅大小分別為1024像素×1024像素、2048像素×2048像素、4096像素×4096像素的遙感影像進(jìn)行時(shí)間統(tǒng)計(jì)對(duì)比分析。正射糾正的最高加速比為1947/377=5.16;FFT的最高加速比為2453/233=10.53;高斯差分的最高加速比為3057/330=9.26。GPU處理遙感影像的加速比隨著像幅的增大而增加,這說(shuō)明在不超過(guò)GPU存儲(chǔ)單元容量的條件下,遙感影像數(shù)據(jù)量越大越能體現(xiàn)GPU的加速效果,也能得到更大的加速比。僅從表1處理時(shí)間上分析,利用GPU并行處理技術(shù)可以在4096像素×4096像素像幅的情況下獲得比CPU串行高達(dá)一個(gè)量級(jí)的加速比,向影像快速處理邁進(jìn)了重要一步。
總之,GPU能夠在影像正射糾正、快速傅里葉變換和高斯差分方面得到明顯的加速,并能夠在數(shù)據(jù)精度上與CPU保持一致的情況下,大幅提高遙感影像的處理速度。遙感影像處理是針對(duì)像素的操作,數(shù)據(jù)處理具有以下特點(diǎn):數(shù)據(jù)量大、計(jì)算復(fù)雜、處理方法固定、處理方法具有內(nèi)在的并行特性等。遙感影像處理的這些特點(diǎn)決定了它適合于GPU的并行處理架構(gòu)和CUDA編程模型。認(rèn)為利用GPU技術(shù)能夠?qū)崿F(xiàn)遙感圖像快速處理領(lǐng)域的巨大飛躍。
參考文獻(xiàn)
[1]張艷萍.遙感圖像并行處理算法的研究與應(yīng)用.2018.
[2]劉宏宇.關(guān)于基于可編程GPU的遙感影像快速處理研究.2019.