徐國偉,陳 建,成 怡
(天津工業(yè)大學 a.電氣工程與自動化學院; b.天津市電工電能新技術重點實驗室,天津 300387)
雷達設計與開發(fā)需要大量雜波實測數(shù)據(jù),然而持續(xù)采集該數(shù)據(jù)會消耗較多人力和物力[1-2],此外由于雜波受多種因素影響且特征變化較大[3],因此有必要建立能充分反映雷達雜波特性的統(tǒng)計模型,將其統(tǒng)計結(jié)果作為評估與測試雷達系統(tǒng)參數(shù)的重要依據(jù)。
海雜波下目標檢測是軍用和民用雷達設計與開發(fā)面臨的重要問題[4],建立精確描述海雜波統(tǒng)計特性的模型是研究人員關注的重點。K分布模型能很好地擬合真實數(shù)據(jù)[4],是解決上述問題較理想的模型。球不變隨機過程(Spherically Invariant Random Process,SIRP)方法與零記憶非線性變換(Zero Memory Non-linear,ZMNL)方法是K分布雜波仿真的兩種主要方法?;赯MNL方法的隨機序列產(chǎn)生方法直觀、簡潔,易于用算法快速實現(xiàn),模擬非相參雷達雜波較方便,但應用該方法的前提是已知非線性變換前后雜波相關系數(shù)的非線性關系,對于相關相干K分布雜波,無法找到明確的非線性關系。由于SIRP方法允許對雜波的邊緣概率密度函數(shù)和自相關函數(shù)進行獨立控制,且高階概率密度函數(shù)能以顯式表達,克服了ZMNL方法中非線性變換對自相關函數(shù)的影響,因此通常將SIRP方法用于相關相干K分布雜波的模擬[5]。
目前隨著雷達探測分辨率的提高,雜波建模與仿真方法不能很好地滿足參數(shù)精度和計算效率要求,雜波計算耗時較長成為K分布雜波仿真系統(tǒng)面臨的難題[6]。為更好地模擬實時環(huán)境,雷達每個相干處理周期都有相應雜波數(shù)據(jù),需對雜波進行快速、準確地仿真才能滿足雷達測試所要求的準確性與實時性。然而大數(shù)據(jù)量的雜波仿真僅通過單一中央處理器(Central Processing Unit,CPU)平臺進行模擬難以實現(xiàn),圖形處理器(Graphic Processing Unit,GPU)的發(fā)展與計算統(tǒng)一設備架構(Compute Unified Device Architecture,CUDA)并行計算技術的出現(xiàn)使大數(shù)據(jù)量下計算速度得到大幅提升,通過單指令多數(shù)據(jù)(Single Instruction Multiple Data,SIMD)并行體系執(zhí)行線程級并行任務[7-8]可使實時性不足的算法得到改進。文獻[9]利用CUDA進行雷達雜波的網(wǎng)格映像法仿真,通過優(yōu)化線程分配和并行歸約獲得最高約50倍的加速比。文獻[10]在優(yōu)化線程分配基礎上,對雜波仿真中矩陣運算進行分塊優(yōu)化,并使用共享內(nèi)存和CUDA流方法節(jié)省通信開銷以提升雜波仿真速度。然而上述文獻對SIRP方法沒有深入分析,且通過降低通信開銷進行優(yōu)化效果有限,缺乏有效方法對雜波計算的CPU-GPU任務進行劃分,導致執(zhí)行GPU任務時CPU處于空閑狀態(tài),不能合理利用計算資源。
針對上述問題,文獻[11]采用MPI+CUDA異構并行方法解決CPU-GPU異構平臺的任務劃分與協(xié)同計算問題。文獻[12]在雜波仿真的矩陣計算中,利用cuBLAS庫進行矩陣運算獲得遠超于CUDA核函數(shù)的計算性能。本文提出一種基于SIRP方法進行相關相干K分布雜波模擬的GPU改進算法,采用cuBLAS庫和OpenMP+CUDA多任務調(diào)度機制改進卷積計算,劃分GPU與CPU任務模塊進行最優(yōu)化調(diào)度,以實現(xiàn)相關相干K分布雜波模擬加速。
SIRP方法采用非線性變換生成實非負變量來調(diào)制復Gaussian變量以獲得相關相干K分布雜波,該方法流程如圖1所示。獨立實Gaussian變量序列w1,i,w2,i通過低通濾波器H1產(chǎn)生具有雜波功率譜的復Gaussian變量yi,使其實部y1,i和虛部y2,i具有高斯功率譜的形狀,且滿足y1,i~N(0,2va2)和y2,i~N(0,2va2)。由于低通濾波器H2用于使非線性變換后的隨機序列功率譜足夠窄,因此濾波器H2可采用多階巴特沃斯濾波器[5]。|h0(·)|為一種非線性變換,使得序列si的平方服從Gamma分布,即si2~G(si2;1/v;v),最終獲得相關相干K分布雜波序列zi。
圖1 SIRP方法流程
SIRP方法主要步驟如下:
1)生成2個獨立Gaussian變量序列w1,i和w2,i。
2)2個Gaussian變量通過低通濾波器H1產(chǎn)生具有高斯功率譜的復Gaussian序列y1,i和y2,i。
3)將所得復Gaussian序列y1,i和y2,i相加得到y(tǒng)i。
4)產(chǎn)生第3個獨立Gaussian變量序列w3,i,通過低通濾波器H2并經(jīng)過h0的非線性變換得到si。
5)將yi與si兩序列進行向量相乘運算,得到服從相關相干K分布的雜波數(shù)據(jù)。
由SIRP方法上述步驟可看出,整個過程運算量大且步驟支路較多,可并行程度高,因此可使用CUDA實現(xiàn)并行優(yōu)化。
利用SIRP生成相關相干K分布序列時,需先采用CUDA生成Gaussian變量序列。Gaussian變量序列通過高斯分布隨機數(shù)生成,高斯分布隨機數(shù)產(chǎn)生的方法有反函數(shù)法[13]、中心極限定理法[14]、拒絕-接受法和遞歸法[15]等。本文使用Box-Muller變換法,該方法是反函數(shù)法的另一種形式,其主要通過中間變量進行變換間接獲取高斯概率分布的逆變換,生成具有高斯概率密度的隨機數(shù)序列,計算效率較高。
由于w1,i、w2,i、w3,i3個高斯序列生成時在時序與邏輯上均無相關性,因此可將三者合為一條并行支路來實現(xiàn)任務并行。根據(jù)并行計算中Sun與Ni定理,在存儲空間允許的情況下,為滿足規(guī)定的時間要求,應盡量增大計算量,實現(xiàn)三通道并行提高執(zhí)行效率,并通過優(yōu)化指令集提高生成效率。CUDA基于隨機數(shù)生成機制提供應用于主機端與設備端的2種方法,其中主機端均勻分布隨機數(shù)生成方法更有利于大數(shù)據(jù)量計算。在相關相干K分布雜波計算過程中,各單獨環(huán)節(jié)數(shù)據(jù)計算串行度較低,濾波器H1通過CPU生成濾波器系數(shù),并通過一維離散卷積使相關高斯數(shù)據(jù)序列獲得相關高斯功率譜。濾波器H1與H2的系數(shù)計算量小,均可由CPU端計算。其中:H1濾波器進行濾波和非線性變換過程對序列的計算量較大,可使用GPU端對其進行并行計算;H2濾波過程采用多階差分方程計算并通過非線性變換使雜波序列具有相應概率密度,且H2濾波中需計算差分方程,難以改成并行計算,因此,使用CPU端對其進行計算。
在使用濾波器H1對高斯序列進行卷積操作時,若高斯序列長度為L,濾波器系數(shù)個數(shù)為n,則卷積需進行L×n次乘法運算與n×(L-1)次加法運算,而由于在計算大量雜波數(shù)據(jù)時高斯序列長度L達到1.0×105~1.0×106,因此計算時間較長。濾波器H2在進行濾波時需求解多階差分方程,而差分方程屬于嚴格遞歸運算,在雜波數(shù)據(jù)量較大時計算時間較長。
本文針對H1濾波在大數(shù)據(jù)量下計算時間較長的問題,提出利用CUDA中cuBLAS庫進行細粒度優(yōu)化,并針對H2濾波計算效率較低的問題提出基于OpenMP+CUDA的多任務調(diào)度機制進行粗粒度優(yōu)化,從而進一步提高并行效率。
2.1.1 基于cuBLAS庫的卷積計算
cuBLAS庫是CUDA上基本線性代數(shù)子程序(Basic Linear Algebra Subroutine,BLAS)的實現(xiàn)。GPU采用cuBLAS庫以串行與批量方式執(zhí)行高效的并行矩陣運算,并利用單精度浮點運算,使計算速度顯著增加[16-17]。
在多種深度學習框架下,采用caffe等矩陣乘法能加速GPU中的卷積計算??焖俑道锶~變換(Fast Fourier Transform,FFT)方法是一種卷積加速方法,但由于H1濾波系數(shù)較少,導致卷積核與輸入序列長度差距過大,因此在數(shù)據(jù)量較大的雜波計算中,其加速效果與直接卷積法等傳統(tǒng)方法相比并不理想[18]。
在SIRP方法中,對高斯數(shù)據(jù)可用gemm函數(shù)進行卷積的矩陣乘法運算,以卷積數(shù)組A={a1,a2,a3}、卷積核B={b1,b2,b3}為例,卷積結(jié)果C={c1,c2,c3,c4,c5},其表達式如下:
(1)
調(diào)用cuBLAS庫中gemm函數(shù)進行矩陣計算時,在對較大矩陣進行相乘操作且計算量相同的情況下,不同矩陣的計算速度差異較大。例如,矩陣A維度為m×n,矩陣B維度為n×k,若將m擴大p倍,同時將k縮小p倍,則在不改變m×k值(即不改變矩陣計算量)情況下改變矩陣維度,上述矩陣的計算效率差異較大。文獻[19]利用gemv函數(shù)進行同樣計算,發(fā)現(xiàn)不同維度下gemv函數(shù)對不同矩陣的計算效率具有較大差異。
設矩陣維度m=Q×p、n=Q、k=Q/p,其中Q分別為500、1 000、2 000,矩陣A=m×n、B=n×k,使用cuBLAS庫對矩陣A和B進行相乘運算,不同矩陣維度下計算效率如圖2所示。其中,以每秒10億次的浮點運算數(shù)(Giga Floating-point Operations Per Second,GFLOPS)作為計算效率的評價指標??梢钥闯霾煌仃嚲S度下計算所得GFLOPS均隨著加權值p的增加而下降,且各個矩陣維度的GFLOPS在相同計算量下變化趨勢明顯。
圖2 不同矩陣維度下的計算效率
設m=Q、n=Q/p、k=Q,矩陣A=m×n,B=n×k,當Q取值為500、1 000、2 000時,不同矩陣維度下計算量隨加權值p的增大而減小,計算量減小倍數(shù)為p,計算時間隨加權值p的變化情況如圖3所示。可以看出不同維度矩陣相乘的計算時間隨加權值p的增大均出現(xiàn)下降,且當p取值范圍為[1,10]時降幅明顯,而在p=10后計算時間趨于恒定。
圖3 不同矩陣維度下的計算時間
本文通過分析不同矩陣維度的計算特性,推導出適合cuBLAS庫進行卷積計算的卷積加速方法ConvC。設L為高斯隨機數(shù)序列長度,n為濾波器系數(shù)個數(shù),若L可分解為M×N行矩陣,設i=N-(n-1),拓展到第k行,設K=(k-1)×N-(n-1),則矩陣A可變換為(M+1)×(N+n-1)維矩陣,矩陣B可變換為(N+n-1)×N維矩陣,具體變換如下:
(2)
(3)
在矩陣A中第一個高斯序列前補n-1個零元素,前M個行向量與矩陣B每個列向量相乘所得結(jié)果即為卷積計算結(jié)果中的每一個元素。但每一行元素有限,在計算每一行第N個元素的前n-1個元素時,由于無法提供其卷積運算的后n-1個元素,因此對每一行進行延拓,補出前一行高斯序列后的n-1個元素,將列個數(shù)設為N+n-1,以保證后續(xù)n-1個元素的卷積計算,并在矩陣A最后一行第n-1個元素后補N個零元素。由于矩陣相乘所得結(jié)果后N-(n-1)個元素為零元素,因此將其舍去后即完成卷積數(shù)組的計算。矩陣B第一列以倒序?qū)⒕矸e核中元素依次分布在前n行,并補出后N-1個零元素,后面每一列將前一列n個卷積核元素下移,同時在空缺位置補出零元素,共創(chuàng)建N列。由于N為變量,因此矩陣形式根據(jù)N的大小有所不同。
序列L可能有多個因數(shù),對L=M×N中M與N的數(shù)值進行加權,設加權值為p,則L=(M×p)×(N/p),矩陣A維度為(M×p+1)×(N/p+n-1),矩陣B維度為(N/p+n-1)×(N/p),該矩陣維度具有可變性。假設序列L長度為1.0×106,卷積核長度為20,M=N=1 000,則L=(1 000×p)×(1 000/p)。當p為1時,矩陣A維度為(1 000+1)×(1 000+20-1),矩陣B維度為(1 000+20-1)×1 000;當p為2時,矩陣A維度為(2 000+1)×(500+20-1),矩陣B維度為(500+20-1)×500。根據(jù)cuBLAS庫中gemm函數(shù)計算特性,改變矩陣行與列的維度可使卷積計算時間更短且浮點數(shù)計算性能更高,從而加速卷積計算。在當前數(shù)據(jù)量下,采用gemm方法創(chuàng)建矩陣所需元素量為L×n+n×1,而本文ConvC方法所需元素量為矩陣A和矩陣B元素總個數(shù) (M+1+N)×(N+n-1)。設n=20,表1為gemm方法與ConvC方法進行卷積計算中創(chuàng)建矩陣所需元素量的對比,可以看出gemm方法所需元素量比ConvC方法多近10倍,因此采用gemm方法進行預處理耗時更長。
表1 gemm方法與ConvC方法所需元素量對比
2.1.2 基于CUDA的共享內(nèi)存卷積計算
使用共享內(nèi)存對卷積計算進行優(yōu)化也是一種提高矩陣乘法運算效率的有效方法。共享內(nèi)存是位于每個流處理器中的高速內(nèi)存空間,用來存放線程塊中所有線程都會頻繁訪問的數(shù)據(jù)。共享存儲器是片上存儲器,其訪問延遲僅幾個時鐘周期,遠低于數(shù)百個全局存儲器時鐘周期的訪問延遲[20]。CUDA除全局內(nèi)存和共享內(nèi)存外,還支持常量內(nèi)存。常量內(nèi)存用于保存在核函數(shù)執(zhí)行期間不發(fā)生變化的數(shù)據(jù),其具有兩個特性:1)高速緩存;2)支持將單個值廣播到線程束的每個線程,可減少大量訪問次數(shù)[21]。文獻[22]利用CUDA共享內(nèi)存方法降低線程塊中數(shù)據(jù)訪問延遲,可有效提高一般稀疏矩陣-矩陣乘法運算效率。
在高斯序列卷積計算中,高斯序列在第n個與第(L-n)個元素之間,對序列中元素和每個濾波器系數(shù)產(chǎn)生n次復用,由于n次全局存儲訪問開銷較大,而共享內(nèi)存的訪問速度遠高于全局內(nèi)存,因此可使用共享存儲單元替代全局存儲單元,將高斯序列中元素放入共享存儲單元。由于濾波器系數(shù)在核函數(shù)運行過程中未發(fā)生變化,因此可使用cudaCopyToSymbol函數(shù)將其放入常量內(nèi)存中進行存儲優(yōu)化,并通過常量內(nèi)存的線程廣播機制提高線程內(nèi)數(shù)據(jù)訪問速度,進而減少通信開銷。將高斯序列拆分為X段,分配X個線程塊,并在每個線程塊中配置共享內(nèi)存空間,將每段數(shù)據(jù)存入相應線程塊的共享存儲空間內(nèi),同時在線程塊中分配Y個線程,每個線程完成一次卷積計算,共完成X×Y=L+n-1次計算,卷積核函數(shù)計算中最多可減少n×L次全局內(nèi)存訪問開銷。
通過將高斯序列分配到共享內(nèi)存、濾波器系數(shù)分配到常量內(nèi)存,可大幅減少訪問全局內(nèi)存的次數(shù),從而縮短卷積核函數(shù)計算時間。此外,cuBLAS庫有約200 ms初始化時間,若只需少量單次生成雜波數(shù)據(jù),則可采用共享內(nèi)存方法,下文將對該方法的優(yōu)化效果進行介紹。
在采用H2濾波器進行濾波時,由于多階巴特沃斯濾波器需計算多階差分方程,因此H2濾波過程加速熱點為H2遞歸的串行部分與H2濾波后si序列的生成。差分方程具有多參數(shù)遞歸性,若強行將其改為并行,則可通過系數(shù)矩陣與初始向量的線性關系構造矩陣和向量的乘法運算,但由于差分方程系數(shù)多、數(shù)據(jù)運算量過大導致其系數(shù)矩陣很復雜,且系數(shù)運算量隨數(shù)據(jù)量的提升而增加,因此耗時嚴重,難以作為并行程序在GPU中執(zhí)行,本文通過優(yōu)化CPU-GPU任務調(diào)度模型進行粗粒度任務并行化處理。
差分方程計算中需生成高斯隨機數(shù)作為其中的x,而si序列的生成則需濾波后的結(jié)果數(shù)據(jù),各任務之間存在較強的數(shù)據(jù)依賴性。本文采用NVIDA公司提供的可視化性能分析器Visual Profiler對數(shù)據(jù)流進行分析,由于在各項任務執(zhí)行過程中CPU與GPU均有較長數(shù)據(jù)等待時間,難以達到負載平衡,因此在大量數(shù)據(jù)下采用多任務分割模型將該串行程序進行任務并行化,以節(jié)省算法所需時間。在任務的并行模型選擇上,OpenMP應用程序采用fork-and-join執(zhí)行模型,并利用工作共享指令在所生成線程之間分配工作負載[23]。文獻[24]利用OpenMP多核調(diào)度技術并行化CPU線程,可有效解決GPU-CPU負載不平衡問題,因此本文考慮采用OpenMP并行模型。
在大量數(shù)據(jù)下,GPU任務被分解為多塊執(zhí)行時仍能保持良好的加速比,在數(shù)據(jù)量為1.0×104的相乘開方運算中,較CPU單獨執(zhí)行快3倍以上。而在對高斯序列進行H2濾波計算時,由于需提前在GPU中生成高斯序列,因此將其作為GPU任務記為G1,在差分方程計算中,進行串行計算時將其作為CPU任務記為C1,在生成si序列時將其作為GPU任務記為G2,采用OpenMP+CUDA混合編程,如圖4所示,其中:Task表示任務塊;Device to Host表示從設備端拷貝數(shù)據(jù)到主機端,這也是CUDA中顯存和主機內(nèi)存的數(shù)據(jù)交換方式;Host to Device表示從主機端拷貝數(shù)據(jù)到設備端。
圖4 串-并行執(zhí)行任務調(diào)度模型結(jié)構Fig.4 Structure of task scheduling model of serial-parallel execution
圖4中串-并行執(zhí)行任務調(diào)度模型采用橫向串行縱向并行調(diào)度模式,將3個任務G1、C1、G2作為父任務分解為n個子任務集合,即G1={G11,G12,…,G1n},C1={C11,C12,…,C1n},G2={G21,G22,…,G2n}。由于CPU端進行H2濾波前需已知高斯數(shù)據(jù)序列,且在進行非線性變換時需采用H2濾波結(jié)果數(shù)據(jù),因此C1與G1、G2與C1之間具有數(shù)據(jù)依賴關系,在此情況下采用OpenMP多核技術并行調(diào)取CPU-GPU任務。執(zhí)行G1中第1個子任務G11,將其結(jié)果作為C1中第1個子任務C11的數(shù)據(jù)來源,模型中橫向為執(zhí)行時間線,在執(zhí)行G1第2個子任務時,CPU端執(zhí)行G1前項任務數(shù)據(jù),并將計算結(jié)果作為G2子任務的數(shù)據(jù)來源,此時其在縱向無數(shù)據(jù)依賴關系,以G1第1個子任務G11開始執(zhí)行為時間起始節(jié)點,以G2最后1個子任務G2n執(zhí)行完畢為時間結(jié)束節(jié)點。由于OpenMP主要是對for循環(huán)的多核并行調(diào)用[25],因此將縱向任務列為1個任務集合,通過判斷for循環(huán)次數(shù)來選取相應核中子任務執(zhí)行以進行任務調(diào)度,進而利用GPU實現(xiàn)細粒度數(shù)據(jù)并行計算。設G11與G2n的總執(zhí)行時間為T1,G1與G2(不含G11與G2n)任務集合執(zhí)行時間為T2,CPU程序C1的執(zhí)行時間為T3,G1、G2與C13個任務總執(zhí)行時間為Tmax,則其計算效率評價函數(shù)S的表達式為:
(4)
本文以相關相干K分布雜波為例,通過改進H1濾波中卷積計算方法和H2濾波中多任務串-并行任務調(diào)度機制,在SIRP方法基礎上提出SIRP-CU算法。SIRP-CU算法將GPU并行計算特性與SIRP方法中雜波生成方式相結(jié)合,并使用CPU-GPU異構通信進行數(shù)據(jù)共享,其具體計算流程如圖5所示。
圖5 SIRP-CU算法流程
本文使用SIRP-CU算法對相關相干K分布雜波進行仿真加速實驗,所用CPU為 Intel i5-8300,GPU為Nvidia 1050Ti,軟件平臺為Visual Studio 2013、CUDA 8.0。選取形狀參數(shù)λ為5和10,設定采樣頻率為Fs=1 000 Hz,2個半功率點之間的帶寬f3 dB=50 Hz,功率譜形狀為高斯功率譜,采樣點數(shù)量設置為1.0×105個。圖6為實驗所得相關相干K分布雜波仿真曲線與理論曲線對比??梢姺抡嫠孟嚓P相干K分布雜波的概率密度和功率譜密度在多個形狀參數(shù)下均可與理論曲線較好擬合,因此,利用SIRP-CU算法可對相關相干K分布雜波進行準確模擬。
圖6 相關相干K分布雜波仿真曲線與理論曲線對比
目前卷積方法較多,在使用FFT方法對大量數(shù)據(jù)進行卷積測試中,由于卷積核較小,與卷積序列相差過大,采用FFT方法進行H1濾波效果不如gemm卷積方法,使用cuFFT庫相較CPU的FFT效率提高數(shù)倍,但仍無法超過cuBLAS庫中gemm方法計算性能,因此采用基于GPU的gemm方法、共享內(nèi)存卷積方法(shared)與本文ConvC方法進行對比。在對雜波進行仿真時,H1濾波器系數(shù)個數(shù)設置為20,采用不同計算量對20個數(shù)字的卷積核進行卷積測試,得到GPU與CPU卷積計算加速比,如圖7所示??梢钥闯霎敂?shù)據(jù)量為1.0×106時,ConvC方法加速比為340,其加速效果優(yōu)于另外2種方法,gemm方法加速比為39.5,加速效果遠低于ConvC方法。
圖7 3種方法所得GPU與CPU卷積計算的加速比
圖8為ConvC與MKL庫卷積計算的加速比,MKL庫卷積方法包括FFT方法和直接卷積方法,本文選用MKL庫卷積方法中的VSL_CONV_MODE_AUTO方法,其可自動選取使用FFT方法和直接卷積方法中更快的一種方法進行卷積??梢钥闯鯟onvC方法和MKL庫方法的加速比最高達到6,當數(shù)據(jù)量較小時加速比約為2,隨著數(shù)據(jù)量的增大加速比增加,ConvC方法加速效果明顯提升。因此,在數(shù)據(jù)量較大且卷積核較小的情況下,采用ConvC方法進行卷積計算具有明顯優(yōu)勢。
圖8 ConvC與MKL庫卷積計算的加速比
使用OpenMP+CUDA的任務分配與調(diào)度機制,可提升H2濾波模塊的計算效率。根據(jù)式(4)中計算效率評價函數(shù)S的計算方法,針對H2濾波模塊中不同數(shù)據(jù)量使用MPI+CUDA方法與OpenMP+CUDA方法進行評價函數(shù)值對比,結(jié)果如圖9所示。可以看出當數(shù)據(jù)量由1.0×103增加到1.0×104時,OpenMP+CUDA方法計算效率提升約13%,與MPI+CUDA方法相差不大。但由于MPI所開辟進程具有單獨內(nèi)存空間,不同進程之間數(shù)據(jù)通信開銷較大,隨著數(shù)據(jù)量增多,該弊端逐漸明顯。而OpenMP基于共享內(nèi)存方式進行多線程協(xié)同運算,通信開銷較小,相較MPI+CUDA方法在非分布式單一計算機上具有優(yōu)勢。當數(shù)據(jù)量為1.0×106時,OpenMP+CUDA方法所得評價函數(shù)值高達42%,而MPI+CUDA方法所得評價函數(shù)值為33%,OpenMP+CUDA方法提升計算效率更明顯,這是因為OpenMP+CUDA基于多任務調(diào)度機制,對多個串-并行執(zhí)行任務進行粗粒度任務分割與調(diào)度,提高任務之間并行率,從而使H2濾波模塊的計算效率得到較大提升。
圖9 2種方法所得評價函數(shù)值對比
雜波仿真中常用線程優(yōu)化分配+共享內(nèi)存方法,將其作為未優(yōu)化方法與本文對細粒度與粗粒度優(yōu)化的SIRP-CU方法以及CPU方法所用計算時間進行對比,結(jié)果如表2所示??梢姰敂?shù)據(jù)量為1.0×103時,未優(yōu)化方法與SIRP-CU方法計算時間接近,但隨著數(shù)據(jù)量的增大,3種方法所用計算時間差距逐漸增加,SIRP-CU方法在不同數(shù)據(jù)量下所用計算時間均少于其他2種方法。
表2 3種方法所用計算時間的對比
圖10為未優(yōu)化方法與SIRP-CU方法所得GPU與CPU卷積計算的加速比??梢钥闯?當數(shù)據(jù)量為1.0×103時,2種方法加速比均較小;當數(shù)據(jù)量增大到5.0×105時,2種方法加速比均增大,計算效率均有所提升;當數(shù)據(jù)量達到1.0×107時,未優(yōu)化方法加速比為67.1,SIRP-CU方法加速比高達108.3,相較未優(yōu)化方法加速比大幅增加,計算效率更高。由上述可知:采用CPU生成雜波數(shù)據(jù)時,在大量數(shù)據(jù)下計算耗時較大;使用GPU進行較小數(shù)據(jù)量計算時,其計算效率提升不明顯,但在大量數(shù)據(jù)計算時,GPU并行計算較CPU計算效率更高。
圖10 2種方法所得GPU與CPU卷積計算的加速比
本文在SIRP方法基礎上提出一種提升雜波生成實時性的方法。使用CUDA中數(shù)據(jù)庫對相關相干K分布雜波的GPU計算方法進行優(yōu)化,利用cuBLAS庫和OpenMP+CUDA多任務調(diào)度機制改進卷積并行計算,以滿足GPU環(huán)境下卷積數(shù)組與卷積核相差較大時的計算需求。實驗結(jié)果表明,該方法能有效提升雜波生成實時性,當數(shù)據(jù)量逐漸增大時,計算加速效果顯著,加速比高達108.3。下一步將在多GPU和多CPU場景下改進GPU優(yōu)化策略,以獲取更高的加速比和雜波模擬效率。