?

基于NVIDIA GPU的機載SAR實時成像處理算法CUDA設計與實現

2013-10-03 12:25孟大地胡玉新石濤孫蕊李曉波
雷達學報 2013年4期
關鍵詞:分塊方位數據處理

孟大地 胡玉新 石濤 孫蕊 李曉波

(中國科學院電子學研究所 北京 100190)

(中國科學院空間信息處理與應用系統技術重點實驗室 北京 100190)

1 引言

合成孔徑雷達(Synthetic Aperture Radar,SAR)是一種具有全天時、全天候、獲取微波散射信息豐富等特點的重要的遙感技術手段,在軍事、農業、林業、海洋等領域均具有巨大的應用潛力[1]。但由于高分辨率SAR系統接收的原始數據量大,并且需要經過復雜的2維匹配濾波處理才能獲得SAR圖像,甚至有些應用領域對 SAR圖像獲取具有較高的實時性要求,從而使得高速的成像處理技術成為SAR領域的一項關鍵技術。目前一般利用基于中央處理器(Central Processing Unit,CPU)的個人計算機、工作站以及大型計算服務器進行后期的 SAR成像處理,這時需要投入大量資金購置多臺具有足夠處理能力的計算設備,并利用 OpenMP[2]或 MPI[3]等并行編程技術進行軟件實現。而SAR實時成像處理器一般用FPGA或DSP實現,這時均需要較為復雜的編程手段以及采購昂貴的硬件設備。

由于圖形處理市場的拉動作用,圖形處理器(Graphic Processing Unit,GPU)已經發展成為具有高度并行、多線程、多核心、超大帶寬、具有數百個計算單元的高性能處理平臺。與通用的 CPU相比,由于GPU產品不具有CPU產品中的流程控制、緩存等功能部件而專注于進行數據運算,因此GPU產品更適用于作為以浮點運算為主、適于并行化的計算任務的運行平臺[4]。近年英偉達(NVIDIA)公司GPU產品與英特爾(Intel)公司CPU產品的計算性能對比如圖1所示[4],可見各時期GPU產品的運算速度以及傳輸帶寬遠高于同時代的 CPU產品。NVIDIA于2006年11月推出了一種將GPU用于進行高性能計算的通用并行計算架構(Compute Unified Device Architecture,CUDA)以及相關的并行編程模型和函數庫。該技術的出現大大推動了GPU在高性能計算領域的廣泛應用[4]。借助于CUDA技術,在傳統CPU上運行的需要大量浮點運算的代碼可以方便地移植到 GPU上,而代碼的條件判斷等邏輯控制部分仍然在CPU平臺上運行[4]。

機載 SAR成像處理過程一般由向量相乘、轉置、快速傅里葉變換(FFT)以及插值等運算模塊組成[1],各運算模塊都能以較高的效率進行并行化處理,因此有望利用CUDA技術在GPU上實現成像處理算法,并取得與CPU上的成像處理算法相比較大幅度的速度提升。本文擬利用CUDA技術將傳統的機載SAR成像處理算法部署于NVIDIA的GPU產品上,并用于進行SAR實時成像處理。

當前支持CUDA技術的主流GPU產品的顯存較小,一般不超過6 GB,不足以容納一景SAR數據量,且具有較大顯存的高端產品價格較為昂貴。由于成像處理過程中需要多次進行轉置操作,因此需要在主機內存中開辟足夠空間用于存儲全部處理數據,并在成像處理的各個階段將數據進行分塊,各塊依次傳入 GPU設備顯存,處理完成之后將處理結果傳入主機內存。設備顯存與主機內存通過PCI-e接口進行數據交互,該接口的單向傳輸速度約為 6 GB/s(2代 PCI-e×16,CUDA SDK 提供bandwidthtest軟件測試結果),因此數據在主機內存與GPU顯存之間的多次交互導致GPU的處理性能不能得到充分發揮,處理效率大大降低。

本文利用 CUDA編程接口中的異步執行(asynchronous concurrent execution)[4],流(stream)等技術[4],以及對SAR數據的分塊處理策略,提出了一種運行于NVIDIA GPU產品上的成像處理算法的設計方案。該方案在不降低算法處理精度的基礎上,掩蓋了數據在主機內存與設備顯存之間的交互傳輸,從而能夠充分利用GPU設備的計算資源;當主機上配置多個 GPU設備時,該方案還支持多GPU設備的同時執行,提高了方案的硬件配置靈活性;該方案中的所有大規模計算任務都由 GPU完成,CPU只進行足以忽略不計的簡單計算、參數讀取以及邏輯判斷,因此主機只需配置足夠的內存,而無須配置昂貴的高性能CPU,甚至單核CPU產品也足以勝任,降低了設備預算及設備功耗;該方案突破了GPU顯存容量對SAR成像處理數據大小的限制,只需足夠的主機內存,而不要求單個設備具有大容量顯存,甚至不足1 G的顯存容量也能滿足處理需求,從而提高了實時成像處理算法對大數據量SAR數據的處理能力,拓寬了購置GPU設備時的選擇范圍,大大降低了對 GPU設備內存容量的要求,從而降低了設備購置的資金預算;另外,該方案不但能用于SAR實時成像處理,也能用于事后SAR數據處理,這時甚至可以將該方案部署在筆記本電腦上,大大增加了成像處理設備的便攜性。

將機載ωκ成像處理算法在一部 NVIDIA K20C(計算能力 3.5,2496個 CUDA計算核心(core),功耗225 W,市場價格約為25000元人民幣,用CUDA 5.0編譯)[5]以及一顆INTEL Xeon E5645(Westmere系列,主頻2.4 GHz,6核心,功耗80 W,市場價格約為2900元人民幣,用INTEL編譯器編譯,調用INTEL MKL數學運算庫)[6]上的對比測試表明,該方案可以達到約每秒處理36 M個原始數據采樣點的處理速度。與基于 CPU的處理算法相比,該方案可以達到約15倍的加速比,基本與圖1的性能對比相符。對方位/距離向各為32768的SAR數據,一部K20C處理所需時間約為7 s(不包括原始數據讀取、數據寫入、內存/顯存的分配和釋放),足以保證成像處理的實時率。

本文第2節根據CUDA并行化特點對SAR成像處理算法的結構特征進行分析;第3節簡要介紹了SAR實時成像處理算法實現所需CUDA編程技巧;基于以上兩節的討論,第4節詳細討論了基于CUDA的 SAR實時成像處理算法設計思路以及最終實現方案;第5節利用仿真SAR數據驗證了算法的處理速度,并與基于CPU的處理結果進行對比;第6節對本文內容進行了總結。

2 SAR成像處理算法結構分析

目前一般采用頻域2維匹配濾波的成像處理算法[1]進行SAR成像處理,而不采用運算量多出數百倍甚至千倍的時域后向反投影算法[7],對于實時成像處理算法更是如此。頻域匹配濾波算法主要包括距離多普勒(RD)算法、Chirp Scaling(CS)算法以及ωκ算法。3種算法的詳細介紹及優缺點對比參見文獻[1]。3種算法的處理步驟見圖2所示流程圖[1]。圖2中圓角矩形表示距離向處理,所處理數據按先排距離向存儲;直角矩形表示方位向處理,所處理數據按先排方位向存儲。

由圖2可見,3種頻域機載SAR成像處理算法具有大致相同的算法結構,在研究其在 GPU上的部署時,可以統一進行分析與設計。因此下文內容適用于3種算法中的任何一種。

機載SAR在實際數據獲取過程中,載機受氣流影響會偏離理想水平勻速直線運動狀態,導致原始回波數據與成像處理算法失配,因此在對實際機載SAR 數據進行處理時,還需進行運動補償[8]。本文中采用文獻[9]中介紹的具有更高精度的運動補償算法(考慮了距離空變的距離走動補償),在圖 2中的步驟A距離壓縮之后進行運動補償處理即可。

在圖2中,由于SAR原始數據以及處理中間結果數據在計算機內存中的線性存儲特點,3種算法都需要在處理過程中進行3次轉置操作(改變2維數據的優先存儲方向,以利于處理器對內存中數據的讀取/寫入效率)。SAR原始數據最初是處于先排距離向的存儲狀態。3種算法在不同的數據存儲方式下(先排距離向或先排方位向)對數據執行所需操作(圖2中表示為A,B,C,D 4個運算模塊),最終獲得先排距離向的SAR圖像。

由于上述3種算法在執行過程中都需要進行多次轉置,要將其利用CUDA技術在GPU上部署,首選方案是將所有數據一次性讀入 GPU顯存,并在 GPU上用 kernel(GPU處理任務的調度單元[4])的方式實現算法的所有運算模塊。目前已有基于CUDA技術的SAR成像處理算法均采用了這種方法[10-13],因此可處理一景數據所包含脈沖數受到GPU顯存容量的限制。而當GPU顯存容量(不超過6 GB,未來預計會有更高顯存容量的GPU產品問世,但價格總是與內存容量成正比)不能容納一景SAR數據時,這時只能先將所有數據存入主機內存,在主機端利用CPU完成4次轉置操作。在不同的數據存儲方式下,每個運算模塊由以下方式實現:根據顯存容量對所需處理數據進行分塊(每個分塊的數據連續存儲,并確保GPU顯存能容納每塊數據,分塊處理并不影響算法的處理精度);對于每個數據塊,先將其拷貝至GPU顯存,在GPU中用kernel的方式實現模塊相關處理步驟,再將結果寫入主機內存的原位置;最后從主機內存中將處理結果SAR圖像存盤。

在上述實現方式中,GPU需要等待主機端的轉置操作完成才能執行之后的運算模塊,由此帶來兩點不便:CPU轉置操作與GPU運算不能同時執行,降低了算法的整體處理效率;為了提高轉置效率,需要配置運算速度較快的CPU,增加設備預算及設備功耗。

由此可見,為了充分利用 GPU設備的運算性能,降低對CPU的性能要求,在將數據存儲于主機內存(始終以先排距離向的存儲方式)以及采用分塊處理策略的前提下,需要將轉置操作以及A,B,C,D 4個運算模塊在GPU上執行,而CPU只承擔流程控制、數據讀取/寫入以及少量簡單運算。另外,還需要利用CUDA編程接口中的異步并行技術,使得主機內存與GPU顯存之間的數據交互與kernel并行執行,從而減少甚至消除kernel執行對數據交互的等待時間。

3 相關CUDA編程技巧

CUDA編程技術的基本任務劃分原則是:由主機負責算法的整體架構,而將算法中的大運算量模塊交由 GPU處理。這些大運算量模塊一般由連續執行的若干步驟組成,其中某些步驟可直接調用現有的CUDA函數庫(如FFT可由CUFFT中的庫函數實現),其余無庫函數可供調用的步驟需編寫對應的kernel。

根據上節對 SAR成像處理算法的結構特征分析,對于圖2中A,B,C,D 4個運算模塊,均需要執行CPU→GPU數據復制、數據處理、GPU→CPU數據復制3個步驟;對于模塊B與模塊D,還需要在數據處理之前進行先排距離向到先排方位向的轉置操作,以及在數據處理之后進行先排方位向到先排距離向的轉置操作。兩次轉置操作均由 GPU完成。要利用CUDA技術將這種實現方案在GPU上部署,并充分利用 GPU設備的運算資源以及傳輸帶寬,需要利用CUDA編程技術所提供的各種接口解決以下幾點技術難題。

3.1 內存分段拷貝與轉置處理

根據第2節對SAR成像處理算法的結構分析,需要對主機內存中的 SAR數據分塊,對每塊執行“讀入 GPU顯存→數據處理→寫入主機內存”3步操作。由于數據始終以先排距離向的方式存儲于主機內存,因此在進行距離向操作(圖 2中以圓角表示的模塊,模塊A,C)時,所需處理的數據塊連續存儲于主機內存的一段空間(如圖3(a)所示),這時可直接利用 CUDA 庫函數 cudaMemcpy[4]或cudaMemcpyAsync[4]將其由主機內存復制到 GPU顯存,處理結束后再由該函數將處理結果從 GPU顯存復制到主機內存的原位置。

而在進行方位向操作(圖 2中以直角表示的模塊,模塊 B,D)時,所需處理的一塊數據在主機內存中分散于 Na個連續存儲數據段(如圖 3(b)所示,其中 Nr為距離向采樣點數,Na為脈沖個數),這時就需要調用 CUDA編程接口所提供的支持分段復制的內存復制函數 cudaMemcpy2D[4]或cudaMemcpy2DAsync[4]進行模塊前后的兩次數據塊復制。在將數據由主機內存傳入 GPU顯存后,數據按照先排距離向方式存儲于 GPU顯存上一塊連續的存儲空間,這時還需要將該數據做轉置處理(數據將按先排方位向方式存儲),才能進行后續的數據處理操作。在數據處理完成之后,還需再進行一次轉置處理(數據將按先排距離向存儲),才能再次調用cudaMemcpy2D或cudaMemcpy2DAsync將處理結果寫入主機內存原位置。

CUDA Samples中提供了利用共享內存技術在GPU 上實現轉置操作的示例[14],本文轉置 kernel的設計直接采用了該方法。另外,為了讓轉置執行與內存顯存之間的數據復制實現下節所述的異步并行化,在實現轉置kernel時,借助于cudaMemcpy2D或 cudaMemcpy2DAsync,轉置前后數據均位于GPU顯存上,而未采用內存映射(mapped memory)技術[4]或統一虛擬地址空間(unified virtual address space)技術[4]所實現的從主機內存讀取數據直接進行轉置。

3.2 并行處理相關技術

3.2.1 異步并行技術 在計算能力不低于1.1的部分GPU設備上,CUDA編程架構提供了主機內存與GPU顯存之間數據傳輸與kernel執行的并行機制,稱為異步并行技術。合理地利用該技術,使得數據復制與kernel執行同步進行,可以盡可能地保證GPU設備的運算核心處于忙碌狀態,減少甚至消除第 2節所述kernel對所需數據的等待時間。在計算能力不低于2.0的部分GPU設備上,CUDA編程架構甚至支持“主機內存→GPU顯存數據傳輸、kernel執行、GPU顯存→主機內存數據傳輸”3者的并行機制[4]。

但是,這種并行機制也受到所復制數據與kernel執行所需數據的依賴性的限制,即在 kernel執行所需數據復制到顯存完成之前kernel一直處于等待狀態,在kernel執行完成之前無法將執行結果復制到主機內存,因此該技術不能直接應用于SAR成像處理算法。

3.2.2 流技術 異步并行技術的實施需要借助于流(stream)技術。創建若干個流,將所需處理任務分配到各個流上。在各流的當前任務滿足上節所述的并行執行條件時,由于流的可并行執行特性[4],從而實現了當前各任務的并行執行。圖4示意了這種異步并行方案的實現方式。其中 CPU代表主機內存,GPU代表 GPU顯存,各圓角矩形中的數字代表分塊序號。將圖2中的每個運算模塊部署在GPU上時,可按照如圖4所示策略進行任務調度(對于運算模塊B,D,在數據處理前后還包含兩次轉置操作)。

如圖4所示,創建3個流,先將前3個SAR數據塊分別交由流0,流1,流2處理,每塊數據的處理都包括“CPU→GPU數據傳輸、數據處理、GPU→CPU數據傳輸”3項任務(該示例中假設各處理模塊的執行時間相等)。由于3個流的同類處理任務不能并行執行,因此相鄰流之間有一個任務執行時間的延時,而3個流的不同類處理任務可以并行執行。再繼續將后續待處理數據塊依次發射(issue)在 3個流上,即可保證所有時刻3個流中的處理步驟都處于并行執行狀態。這時除了整個任務的首尾少量時間3個流未完全并行外,處理過程中絕大部分處理時間3個流都處于并行執行狀態,從而保證了GPU運算核心(core)絕大部分時間處于忙碌狀態,有效掩蓋了數據在主機內存與GPU顯存中的傳輸時間。

為了降低3個流首尾未并行任務塊占總任務的比例,需要保證SAR數據的分塊數不能太少,而各分塊尺寸太小時不能充分利用所有 CUDA運算核心。實際中可通過多次試驗選取效率較高的分塊大小和分塊總數組合。

3.2.3 事件同步技術 如前所述,圖4中的數據處理環節由若干個kernel組成,而且kernel執行時間與單向數據傳輸時間一般情況下不完全相同,根據GPU對各流所發射kernel的調度機制,在運行過程中各流的 kernel可能會交替執行[4],從而導致圖 4中的某些數據處理環節(由多個 kernel組成)開始到結束所需時間增加。為了避免此現象,確保每個數據處理環節中的所有kernel集中連續執行,可以利用CUDA中的事件(event)技術[4]。在每個數據處理環節的末尾(GPU→CPU 數據傳輸環節開始前)利用cudaEventRecord函數標記事件同步節點,并在下一個數據處理環節的起始(CPU→GPU數據傳輸環節結束后)時利用 cudaEventSynchronize函數對該事件標記進行同步。根據事件的同步特點,在cudaEventRecord函數調用之前的所有CUDA操作完成之前,cudaEventSynchronize之后的CUDA操作不能進行,從而確保了每個數據處理環節中各kernel的集中連續執行。詳見下述實驗結果。

3.2.4 多GPU并行處理技術 當一臺主機內有多部GPU設備時,利用流技術還可以實現所有設備之間的并行處理。在每個GPU設備上各部署3個流,并將所有SAR數據處理任務依次發射到各個流上,從而在每個 GPU設備內部異步并行的同時,也實現了多GPU設備的并行處理。

對于第i個數據塊,所對應的GPU設備號iGPU以及流號istream的計算方法分別為(三者均以0為起始編號):

其中NGPU為GPU設備個數,%表示求余操作。

3.3 顯存分配策略

由上節可知,為了充分利用 GPU設備的異步并行技術掩蓋數據傳輸時間,在每個 GPU設備中需各分配3個流。由于各流之間除并行關系外相互獨立運行,因此需要為每個流分配一個獨立的存儲空間用于存儲從主機內存加載的數據塊。另外,各個運算模塊中的某些運算步驟需要用另外一塊同樣大小的存儲空間存儲運算處理結果,這些運算步驟包括轉置處理,ω κ算法中的 stolt插值處理[1],運動補償處理[4]等。因此,需要對每個流分配兩個同樣大小的存儲空間。實踐表明,對于機載SAR實時處理算法來說,兩塊存儲空間已能夠滿足算法的運算需要。

由此可見,每個GPU設備上共需分配6塊同樣大小的存儲空間。另外利用CUFFT庫函數進行FFT運算時,需要為每個流根據數據尺寸調用cufftPlan1d()創建一個plan配置數據。以上9項存儲空間之和不能超過一個GPU設備的顯存總容量。

4 設計與實現

4.1 存儲空間分配與FFT plan

在成像處理開始之前,需要先進行內存及顯存分配,在所有步驟執行完畢之后,再將所分配內存及顯存釋放。

首先在主機內存中分配兩段存儲空間H0與H1,H0用于存儲讀入的原始數據以及處理結果 SAR圖像(一般1個采樣點占用1個或2個字節),H1用于存儲算法各階段的中間處理結果(一般按單精度浮點存儲,1個采樣點占用8個字節)。假設所需處理的一景 SAR數據每個回波脈沖采樣點數為 Nr,共Na個脈沖,則H0與H1占用字節數分別為:

為了提高主機內存與 GPU顯存之間的數據傳輸速度,H0與H1按照頁鎖定(page-locked)的方式進行空間分配[4]。

根據第3節所述,在每部GPU設備上各分配3個流Sij(其中i,j分別表示以0為起始的GPU編號以及流編號),并為每個流在所在GPU設備顯存上分配兩塊字節數分別為Md(按照上節所述進行設置)的存儲空間DA,ij與DB,ij,用于完成圖2中每個模塊的各個計算步驟。根據顯存塊大小Md,可以得到用于每個運算模塊的數據分塊大小。對于先排距離向的運算模塊A,C,每個數據塊的方位脈沖數為:

為了方便起見,如有必要,Ba與Br可在以上計算結果基礎上適當減小,使其分別能整除Na與Nr。對于運算模塊A,C,處理數據的分塊數為Ca=Na/Ba;對于運算模塊 B,D,處理數據的分塊數為Cr=Nr/Br。

另外,由于各運算模塊的執行步驟中都需要用到FFT操作,對于每個運算模塊,還需要為每個流Sij根據數據塊2維尺寸利用CUDA函數cufftPlan1d建立 FFT執行所需 plan,并將所創建 plan用cufftSetStream 函數與所屬流關聯[4]。由于 plan的創建及銷毀占用時間非常小,對于每個運算模塊,可以在模塊執行前建立并關聯所需plan,模塊執行完畢后立即調用 cufftDestroy函數銷毀,或者在算法開始運行時創建所需plan,算法結束時銷毀所需plan。

4.2 算法設計

根據以上對CUDA編程技術以及SAR成像處理算法特點的分析,在上述存儲空間分配方案基礎上,可按照以下方案進行機載SAR實時成像處理算法設計:

(1) 將所需處理SAR原始數據由文件讀入主機內存H0。

(2) 將 H0中的 SAR原始數據沿方位向均分為Ca塊,各塊字節數均為2NrBa。各塊按照圖4所示方案依次分配給各個流 Sij,各個流 Sij調用cudaMemcpyAsync函數將所分配數據塊讀入顯存空間DA,ij,再進行運算模塊A的各處理步驟,最后將結果由cudaMemcpyAsync函數寫回主機內存H1的對應位置,每塊寫回數據字節數為 8NrBa。此時數據在H1中按照先排距離向的方式存儲。

(3) 將H1中的數據沿距離向均分為Cr塊,各塊按照圖4所示方案依次分配給各個流Sij,每個流將所分配數據塊(非連續存儲,如圖 3(b)所示)先由cudaMemcpy2DAsync函數讀入顯存空間 DB,ij,再由轉置kernel將DB,ij中的數據轉為先排方位向方式存儲于DA,ij,然后進行運算模塊B的各處理步驟;處理完成之后再次調用轉置 kernel將處理結果(可能在 DA,ij或 DB,ij中,視具體實現方式而定)轉為先排距離向方式存儲于該流的另一塊顯存空間,將結果由cudaMemcpyAsync函數寫回主機內存H1的原位置。此時數據在H1中仍然按照先排距離向的方式存儲。

(4) 按照與步驟(2)類似的方式執行運算模塊C,但不是從H0中讀取數據,而是從H1中讀取數據。

(5) 按照與步驟(3)類似的方式執行運算模塊D,但有以下幾點區別:(a) 在對處理結果進行轉置時,由于多視后每個圖像的像素點按照1個字節或2個字節無符號存儲,因此需要實現一個新的轉置kernel,但也可將轉置 kernel利用 C++的模板(template)技術實現,從而對中間結果的轉置處理以及對多視結果的轉置處理可復用一個函數代碼;(b)由于每塊數據處理前后數據量變化,而且數據在主機內存中非連續存儲,因此不能再將處理結果寫回H1的原位置,但可以將處理結果寫入H0。各塊圖像數據在 H0中的組織及寫回方式與 3.1節所述及圖3(b)所示方式相同。

(6) 將H0中的處理結果圖像寫入圖像文件。

在以上各步驟中,除了第(1)步數據讀取以及第(6)步數據落盤(這兩步受磁盤條件限制無法通過并行手段提高執行速度)以外,在步驟(2)-步驟(5)中,每步對所有數據塊的處理都按照 3.2節所述方式實現了并行執行,從而充分利用了 GPU設備的傳輸帶寬以及計算資源,保證在最短時間內完成所有的處理步驟。

4.3 批量任務處理策略

將上述方案用于實時成像處理時,需要對各景SAR數據依次進行處理。為滿足實時性要求,對各景的處理之間不能有長時間等待。在上述方案中,當一景數據量較大時,對H0,H1,DA,ij以及DB,ij的分配及釋放都需要占用較多的時間,若對每景數據都進行一次存儲空間的分配及釋放,將大大降低處理的實時性。

為了避免存儲空間的分配和釋放對處理實時性的影響,在各景數據2維尺寸不變的情況下(一般至少在一個條帶內能夠保證各景的數據 2維尺寸不變),可以通過圖5所示的策略避免主機內存/GPU顯存的重復分配與釋放。對于單景數據距離/方位點數未發生變化的一組處理任務,在主機內存/GPU顯存分配后對所有任務進行連續處理,處理結束后再將主機內存/GPU顯存釋放。

5 實驗結果

圖5 批量任務處理策略圖Fig.5 Processing strategy of a batch of tasks

由上述設計思路可知,本文提出的基于GPU的實驗結果如圖6所示,其中藍色表示CPU單線程處理,綠色表示CPU全速(6線程)處理,深紅色表示 GPU處理。由于從磁盤讀取原始數據和將結果圖像寫入磁盤兩個環節對各種處理手段來說耗費時間相同,因此圖6的時間測量結果中未計入這兩個環節所花時間。的機載 SAR實時成像處理算法并未對成像處理算法本身做任何更改,也未用單精度代替雙精度進行浮點運算,因此所需運算量與基于CPU的實現方式相同,而且能夠完全達到算法本身應有的處理精度。本文將測試同樣處理算法用本文所提出方案在GPU上實現時相對于常規在CPU上實現時處理速度的提升比例,而未針對分辨率等成像處理指標進行測試。本節測試在HP Z600立式工作站上進行,實驗所用GPU選用NVIDIA K20C,CPU選用工作站自帶INTEL E5645 @2.4 GHz。根據GPU處理速度提升比例的測試結果,還對價格、功耗、并行度、實時性等方面進行了分析。

5.1 加速比測試

對于某種成像處理算法,對一塊機載SAR數據的處理時間僅取決于距離及方位向的采樣點數,而與載頻波段及分辨率無關。因此本節選用ωκ成像處理算法,利用一段X波段機載SAR仿真數據分別用本文方案和常規基于CPU的處理算法進行處理,并對處理所需時間進行對比及討論。本節分別針對距離/方位采樣點數均為16384與32768兩種情況進行了仿真實驗。由于實際機載SAR數據處理中都需要進行運動補償處理,因此按照第2節所述在圖 2的運算模塊A中加入了運動補償的處理環節。其它相關運行參數如表1所示,各種處理手段消耗時間

?

由于顯存中的分塊大小為256 MB(占用顯存共計 1.5 GB),對于距離/方位點數為 16384的 SAR數據(中間結果數據量為2 GB),對所有數據的分塊數目為8;對于距離/方位點數為32768的SAR數據(中間結果數據量為8 GB),分塊數為32。

由圖6可見,對于距離/方位點數為16384的SAR數據,與單線程及6線程CPU處理相比,GPU處理的加速比分別約為71與14;對于距離/方位點數為32768的SAR數據,加速比分別約為80與16。通過NVIDIA提供的并行處理可視化分析工具-Visual profiler[15]觀察兩者各運算模塊的運行情況可知,兩種情況下各流的處理及數據傳輸速度基本相同,但由于數據分塊數較大時各運算模塊首尾未并行部分占模塊所有運行時間比例較大,因此距離/方位點數為32768時的加速比較大。

從價格的角度考慮,K20C目前市場價格約為E5645的將近10倍,可見與E5645相比K20C具有約1.5倍的價格優勢。從功耗的角度考慮,本文方案中CPU無需承擔任何大型運算任務,因此無需耗資配置高性能CPU,但須配置具有高速總線以及高速PCI-E插槽的主板。從功耗的角度考慮,K20C在處理時功耗約為140 W[5],而E5645的標稱功耗為80 W,可見K20C具有約8倍的功耗優勢。從便攜性的角度考慮,由于需要約15顆E5645才能達到一部K20C的處理能力,而一塊主板上的CPU插槽有限(目前市場上主流主板支持CPU個數一般不超過4個),因此至少需要配置4臺主機??梢?,選用GPU作為處理設備使得 SAR數據處理設備的便攜性大大提高。

5.2 并行度分析

利用Visual Profiler對本文方案的并行度進行分析,觀察數據在主機內存與GPU顯存間的傳輸與GPU運算的并行程度,距離/方位點數為16384時的處理過程在Visual Profiler中如圖7所示,其中黃色模塊表示CPU/GPU間數據傳輸,其它顏色模塊表示各種數據處理kernel。由圖7可見,對于圖2中的運算模塊A,B,C,kernel的運行幾乎沒有任何中斷,即由于數據傳輸與kernel執行的并行化,各數據塊的kernel開始執行之前,所需數據都已就緒(各流的首尾數據塊除外)。對于運算模塊D,由于數據傳入GPU時間大于數據傳入 GPU的拷貝過程以及kernel執行所需時間,因此前者的執行幾乎沒有任何中斷,而后兩者在前者的執行過程中已并行完成,省去了前者的等待時間(各流的首尾數據塊除外)。另外,由于各流的首尾數據塊未完全并行,各運算模塊總體執行時間與 kernel實際執行時間(或數據單向傳輸時間,取大者)相比有略微增加。

另外,如3.2.3節所述,由于采用了事件同步機制,各數據分塊的所有kernel都實現了連續集中執行,各數據分塊的所有kernel完全實現了順序執行,從而避免了各GPU→CPU數據傳輸環節延緩執行。

但由于事件同步機制的影響,從第2個數據分塊開始,每次cudaEventSynchronize調用都需要等待上一數據分塊的cudaEventSynchronize調用成功返回,即每個數據塊的數據處理任務及其之后發射的任務都需要在上一數據塊的數據處理完成之后開始執行(launch)[4],因此導致了運算模塊A,B,C從第3個數據分塊開始每次的CPU→GPU數據傳輸環節的執行略有延遲。而運算模塊D的kernel執行時間小于 CPU→GPU數據傳輸時間,因此未出現此現象。

5.3 實時性分析

機載SAR成像處理算法能否滿足實時性要求,取決于處理速度是否大于數據采集速度。假設距離采樣點數為Nr,每秒采集脈沖數為Prf,則數據采集速度為NrPrf??梢娞幚硭惴ǖ膶崟r性與處理速度、距離采樣點數以及每秒采集脈沖數有關,而與SAR系統波段、天線尺寸、載機速度等因素無關?;诖?,本節的分析無需設計距離采樣點數與每秒采集脈沖數之外的其它無關因素。

在不考慮每景 SAR數據處理的不完全孔徑截取的情況下,由圖6可見,一部K20C對機載SAR數據的處理速度約為每秒處理36 M個原始數據采樣點。對于距離采樣點數為64k的SAR系統,則每秒處理數據量約為576個脈沖,因此一部K20C可以滿足脈沖采樣點數64k、脈沖重復頻率(PRF)不超過576的機載SAR系統的2維全分辨率實時處理速度需求。

由于機載 SAR方位向分辨率為載機速度與多普勒帶寬之比(與系統波段無關),假設載機速度為v,則一部K20C能夠達到實時處理速度的機載SAR系統方位向分辨率約為:

在此基礎上,還可以通過增加 GPU設備個數(目前 1部服務器或工作站主板最多可支持 4部GPU設備)擴充設備的處理能力,以達到增加距離采樣點數以及提高方位向分辨率等要求。

6 結論

本文對機載SAR成像處理算法在CUDA架構下的高效實現方法進行了深入研究,首先對常用機載 SAR頻域成像處理算法的結構特征以及 CUDA架構下的實現思路進行了詳細分析,并對算法的CUDA實現所需解決的若干技術問題及其解決方法進行了詳細論述?;谝陨涎芯抗ぷ?,提出并詳細闡述了一種基于CUDA架構的機載SAR實時成像處理算法實現方案。該方案針對成像處理算法的結構特征以及CUDA架構的并行化特點,通過對顯存/內存分配策略以及數據傳輸/kernel執行并行化的巧妙設計,借助于CUDA編程體系所提供的數據處理及傳輸接口,實現了處理算法在 NVIDIA GPU設備上的高效部署。該方案實現了絕大部分的數據傳輸環節與 kernel執行的并行進行,大大減少了kernel執行的數據等待時間。在NVIDIA迄今最新的通用計算高性能產品K20C上實驗結果表明,借助于本文方案,與傳統基于CPU的成像處理算法相比,基于K20C的機載SAR成像處理算法具有低廉的價格、極低的功耗以及高度的便攜性,只需一臺配備一部或多部K20C的主機即可具有相當于數十臺普通主機的處理能力。

[1]Cumming I G and Wong F H.Digital Processing of Synthetic Aperture Radar Data: Algorithms and Implementation[M].Norwood: Artech House,2002.

[2]OpenMP Architecture Review Board.OpenMP application program interface[OL].http://www.openmp.org/mp-documents/spec30.pdf,May 2008.

[3]Snir M,Otto S,Lederman S H,et al..MPI: The Complete Reference[M].US: The MIT Press,1996.

[4]NVIDIA.CUDA Cprogramming guide[OL].http://docs.nvidia.com/cuda/pdf/CUDA_C_Programming_Guide.pdf,July 2013.

[5]NVIDIA.Tesla k20 GPU active accelerator: board specification [OL].http://www.nvidia.cn/content/PDF/kepler/tesla-k20-active-bd-06499-001-v03.pdf,May 2013.

[6]Intel.Intel Xeon Processor E5645 [OL].http://ark.intel.com/zh-cn/products/48768.2010.

[7]Yegulalp A F.Fast backprojection algorithm for synthetic aperture radar[C].Proceedings 1999 IEEE Radar Conference,Waltham,US,1999: 60-65.

[8]John Jr.C K.Motion compensation for synthetic aperture radar[J].IEEE Transaction on Aerospace and Electronic Systems,1975,11(3): 338-348.

[9]Meng Da-di,Hu Dong-hui,and Ding Chi-biao.A new approachto airborne high resolution SAR motion compensation for large trajectory deviations[J].Chinese Journal of Electronics,2012,21(4): 764-769.

[10]Liu Bin,Wang Kai-zhi,Liu Xing-zhao,et al..An efficient signal processor of synthetic aperture radar based on GPU[C].European Conference on Synthetic Aperture Radar,Eurogress,Aachen,Germany,June 2010: 1054-1057.

[11]Ning Xia,Yeh Chun-mao,Zhou Bin,et al..Multiple- GPU accelerated range-Doppler algorithm for synthetic aperture radar imaging[C].IEEE International Radar Conference,Kansas City,MO,USA,May 2011: 698-701.

[12]Clemente C,Bisceglie M D,Santo M D,et al..Processing of synthetic aperture radar data with GPGPU[C].IEEE Workshop on Signal Processing Systems,Tampere,Finland,Oct.2009: 309-314.

[13]俞驚雷,柳彬,王開志,等.一種基于 GPU 的高效合成孔徑雷達信號處理器[J].信息與電子工程,2010,8(4): 415-418.Yu J L,Liu B,Wang K Z,et al..A highly efficient GPU-based signal processor of Synthetic Aperture Radar[J].Information and Electronic Engineering,2010,8(4): 415-418.

[14]NVIDIA.Optimizing matrix transpose in CUDA[OL].http://www.cs.colostate.edu/~cs675/matrixtranspose.pdf,May 2013.

[15]NVIDIA.Profiler user’s guide[OL].http://docs.nvidia.com/cuda/pdf/CUDA_Profiler_Users_Guide.pdf,July 2013.作者簡介

猜你喜歡
分塊方位數據處理
面向量化分塊壓縮感知的區域層次化預測編碼
鋼結構工程分塊滑移安裝施工方法探討
認知診斷缺失數據處理方法的比較:零替換、多重插補與極大似然估計法*
基于低頻功率數據處理的負荷分解方法
認方位
關于4×4分塊矩陣的逆矩陣*
無人機測繪數據處理關鍵技術及運用
分塊矩陣初等變換的妙用
基于MATLAB語言的物理實驗數據處理探討
基于TMS320C6678的SAR方位向預濾波器的并行實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合