姚 群,童 真,柴 恒
(中國船舶集團有限公司第七二三研究所,江蘇 揚州 225101)
隨著新體制雷達的廣泛使用,現(xiàn)代電子戰(zhàn)面臨的電磁環(huán)境更加復(fù)雜,信號波形復(fù)雜多變,各類脈內(nèi)調(diào)制類型如相位調(diào)制、線性/非線性調(diào)頻、頻率編碼、復(fù)合調(diào)制等調(diào)制類型的雷達信號逐漸增多。傳統(tǒng)的電子偵察(ESM)設(shè)備測量的五大常規(guī)參數(shù)(中心頻率、幅度、脈寬、到達時間和到達角)已經(jīng)無法適應(yīng)當前復(fù)雜電磁環(huán)境下的電子對抗過程中信號分選、目標識別等關(guān)鍵環(huán)節(jié)的需求。雷達信號的脈內(nèi)調(diào)制信息作為雷達信號的重要參數(shù),可以更加詳細地反映雷達信號的本質(zhì)信息,為參數(shù)復(fù)雜多變的新體制雷達信號的分選與識別提供幫助[1]。
雷達脈內(nèi)分析一般采用中頻數(shù)據(jù),數(shù)據(jù)量大,處理算法復(fù)雜,運算量大,實時性很難滿足,無法有效支援電子戰(zhàn)行動[2-3]。為了充分利用雷達脈內(nèi)調(diào)制特征信息,提高分選和識別的準確性,迫切需要提高脈內(nèi)分析的計算速度,提高脈內(nèi)分析的實時性。
隨著多核通用計算處理器技術(shù)的高速發(fā)展,高性能多核CPU正逐漸取代數(shù)字信號處理器(DSP)、PowerPC成為電子偵察信號處理領(lǐng)域的主要處理單元,并且進一步向多節(jié)點集群化的方向發(fā)展[4-6]。為了充分發(fā)揮電子偵察信號處理計算平臺的性能,本文開展了基于多節(jié)點多核CPU計算平臺的并行計算技術(shù)研究,根據(jù)雷達信號脈內(nèi)分析處理的特點,提出了一種基于消息傳遞接口+開放式多處理(MPI+OpenMP)的雷達信號脈內(nèi)分析并行計算技術(shù),綜合了 MPI 和OpenMP 并行編程環(huán)境的優(yōu)點,提高了雷達信號脈內(nèi)分析的處理速度。
多節(jié)點多核CPU計算平臺屬于對稱多處理(Symmetric Multi-Processing,SMP)架構(gòu),該結(jié)構(gòu)同時具備了節(jié)點內(nèi)共享內(nèi)存與節(jié)點間分布式存儲的層次特點,因此同時支持節(jié)點間消息傳遞和節(jié)點內(nèi)共享內(nèi)存并行編程模型,其中MPI與OpenMP是這2類并行編程模型的代表。
OpenMP是用于共享內(nèi)存并行化的標準共享內(nèi)存、多處理應(yīng)用程序接口(API)。OpenMP為線程創(chuàng)建、管理和同步提供了一組編譯器指令、環(huán)境變量和運行庫函數(shù),通過fork-join編程模型實現(xiàn)并行性。在此模型中,程序開始作為單個進程或線程順序執(zhí)行,當運行至并行區(qū)域時,創(chuàng)建其他幾個從線程來執(zhí)行并行任務(wù),并行域代碼執(zhí)行完后再回到主線程[7]。OpenMP為程序員提供了更高層的并行編程抽象,只需要在程序中添加編譯指令以及調(diào)用庫函數(shù),就可以在共享內(nèi)存系統(tǒng)中實現(xiàn)高效的并行程序,降低了并行編程的難度和復(fù)雜度,同時具有良好的可移植性。
MPI是為開發(fā)基于消息傳遞模型的并行程序而制定的工業(yè)標準消息傳遞接口。在并行計算中,多臺計算機或者同一臺計算機內(nèi)的多個處理器核心被稱為一個節(jié)點,共同完成計算任務(wù)。在分布式內(nèi)存系統(tǒng)中,并行計算的最大挑戰(zhàn)是如何同步各個并行節(jié)點的動作,在節(jié)點之間交換數(shù)據(jù)以及對整個并行集群提供命令和控制[8]。MPI為這些任務(wù)定義了一套標準的函數(shù)。MPI的優(yōu)點是高性能、大規(guī)模性和可移植性,是高性能計算的主要模型。
OpenMP和MPI這2種編程模型可以在同一個程序中使用,適用于由共享和分布式內(nèi)存組成的架構(gòu),如多核處理器集群[9-10]。在OpenMP和MPI混合編程模型中,MPI可用于跨節(jié)點提供過程級并行,而OpenMP可用于通過使用編譯器指令在節(jié)點內(nèi)實現(xiàn)循環(huán)級并行,如圖1所示。在混合編程模型中,OpenMP線程將共享每個節(jié)點的內(nèi)存,因而此時的消耗內(nèi)存總量會遠遠小于使用純MPI進程模型時所占用的內(nèi)存總量,輕量級線程間的通信也因為取代了傳統(tǒng)的MPI進程收發(fā)通信機制而變得更快,并且由于跨節(jié)點間更少的MPI,通信混合模型的可擴展性也因而得到顯著提升。
圖1 MPI+OpenMP模型
電子偵察雷達信號脈內(nèi)分析架構(gòu)如圖2所示,通常分為兩部分:首先對原始的中頻信號進行數(shù)字化采樣,完成信號檢測,這一部分通常在FPGA處理單元內(nèi)完成;之后將脈沖信號數(shù)據(jù)送至脈內(nèi)分析模塊,獲取脈內(nèi)特征參數(shù)以及常規(guī)參數(shù)(中心頻率、幅度、脈寬、到達時間),生成包含調(diào)制樣式與調(diào)制參數(shù)的脈沖描述字(PDW),供后續(xù)分選識別模塊進一步使用,生成輻射源描述字(EDW),提高其對復(fù)雜環(huán)境的適應(yīng)性。上述流程關(guān)鍵是提升脈內(nèi)分析環(huán)節(jié)處理速度,以滿足實時性要求[11-12]。
圖2 電子偵察雷達信號脈內(nèi)分析架構(gòu)
雷達信號脈內(nèi)分析的最主要功能是對脈沖數(shù)據(jù)的調(diào)制類型識別與參數(shù)解調(diào),目前廣泛應(yīng)用的脈內(nèi)分析方法主要分為基于似然函數(shù)的分析算法和基于特征的分析算法?;谒迫缓瘮?shù)的方法計算量大,計算復(fù)雜度高,工程中一般采用基于特征提取的脈內(nèi)分析方法,算法流程如圖3所示。
圖3 基于特征的脈內(nèi)分析算法
雷達信號脈內(nèi)分析以一個完整的脈沖數(shù)據(jù)為數(shù)據(jù)分析單元,各個脈沖間的數(shù)據(jù)是相互獨立的[13-14]。因此脈內(nèi)分析功能的并行計算加速根據(jù)并行的粒度不同可分為2種方式:一種是細粒度單脈沖級的加速,即對單個脈沖脈內(nèi)分析的算法流程進行加速;另一種粗粒度加速方式是以脈沖為最小單位進行并行計算。為了獲得最大的單脈沖并行計算性能,細粒度單脈沖級脈內(nèi)分析并行加速需要根據(jù)圖3流程中的算法模塊進行并行化設(shè)計,系統(tǒng)的并行化程度取決于設(shè)計人員對算法的設(shè)計。圖4給出了一種可供參考的單脈沖級別脈內(nèi)分析并行化示意圖,針對脈內(nèi)分析流程中不同處理算法進行相應(yīng)的并行化設(shè)計,輸出包含調(diào)制參數(shù)的單個PDW。單脈沖級的加速方式,理論上可以獲取最小的單脈沖脈內(nèi)分析時延。但是由于脈沖流數(shù)據(jù)量大,該方法會頻繁產(chǎn)生I/O讀取與線程切換,導致處理開銷變大,同時該方式對脈內(nèi)算法分析流程的并行化實現(xiàn)要求極高,設(shè)計難度大,不易于后期算法更新擴展。
圖4 單脈沖脈內(nèi)分析并行化參考示意圖
另一種粗粒度加速方式是以脈沖為最小單位進行并行計算,即為每個脈沖的脈內(nèi)分析任務(wù)分配一個線程,并行計算多個脈沖數(shù)據(jù),最終匯總所有脈沖的PDW結(jié)果輸出,如圖5所示。脈內(nèi)分析算法各個脈沖分析計算任務(wù)數(shù)據(jù)完全獨立[15],在并行計算時不需要額外的數(shù)據(jù)通信開銷,該并行方式可以充分發(fā)揮系統(tǒng)并行計算的能力,并且易于后期處理算法的靈活升級。但是該方式需要存儲一段時間的脈沖數(shù)據(jù),因此會引入至少1幀數(shù)據(jù)塊的延遲,而雷達信號分選功能本身就需要累積一段時間的數(shù)據(jù),因此此部分延遲開銷并不影響后續(xù)分選功能。
圖5 脈沖級脈內(nèi)分析并行化
綜上所述,實時脈內(nèi)分析針對實時脈沖數(shù)據(jù)流,進行相同的分析處理,各個脈沖數(shù)據(jù)相互獨立,因此本文提出為每個節(jié)點分配1個MPI進程,用于處理一定數(shù)量的脈沖數(shù)據(jù),同時在節(jié)點內(nèi)部利用OpenMP為每個脈沖串分配一個分析線程,實現(xiàn)多線程并行計算,如圖6所示。為了考慮各個節(jié)點的負載均衡性,脈沖串數(shù)據(jù)的分配一般需要考慮數(shù)據(jù)量而非脈沖數(shù)據(jù)個數(shù),具體實現(xiàn)步驟如下:
圖6 基于MPI+OpenMP的并行脈內(nèi)分析流程
(1) 在每個節(jié)點上建立MPI進程,并進行必要的初始化;
(2) 主數(shù)據(jù)節(jié)點的主進程對數(shù)據(jù)進行劃分,通過節(jié)點間通信為每個節(jié)點的MPI進程分配數(shù)據(jù);
(3) 在每個節(jié)點的MPI進程內(nèi)部,通過 OpenMP 編譯指導語句,對脈沖串數(shù)據(jù)進行脈沖級的多線程并行計算(線程數(shù)量根據(jù)硬件平臺的計算核心數(shù)進行配置);
(4) 當全部計算完成后,MPI進程結(jié)束,由主節(jié)點進程匯總結(jié)果輸出。
下面給出混合編程模型實時脈內(nèi)分析的偽代碼:
MPI_Init();
MPI_Comm_rank();
MPI_Comm_size();
if (myid == 0)//主進程分發(fā)數(shù)據(jù)
{
MPI_Send();
}
else //其余節(jié)點進程接收數(shù)據(jù)
{
MPI_Recv();
}
omp_set_num_threads(n);//設(shè)置OpenMP線程數(shù)n
#pragma omp parallel for //N個脈沖多線程并行
For i=1:N
Elint();//脈內(nèi)分析計算
/*MPI進程通信,結(jié)果匯總至主節(jié)點輸出*/
MPI_Finalize();
本文采用的硬件測試平臺為2臺高性能計算服務(wù)器(每臺包含2個Xeon E5-2640 CPU,單個CPU包含8核心,主頻2.6 GHz),即每個節(jié)點共包含16核。軟件環(huán)境為Centos 7操作系統(tǒng),測試程序采用c++編寫,編譯環(huán)境使用gcc-8.3.1,mpich-3.3.2等。
在單個節(jié)點上,測試了采用OpenMP并行編程模型在不同CPU核心數(shù)的情況下對脈內(nèi)分析算法(常規(guī)參數(shù)測量、調(diào)制識別、調(diào)制參數(shù)解調(diào)等)的加速情況,如圖7所示。其中測試采用常規(guī)信號中頻脈沖數(shù)據(jù),脈沖寬度10 μs,脈沖數(shù)量1 000。
圖7 單節(jié)點OpenMP/MPI加速比
由圖7可以看出:單節(jié)點內(nèi)由于不需要進行進程間通信,OpenMP獲得了相對較好的加速性能。但隨著核數(shù)的增多,因為存在多線程資源分配、回收等開銷,加速比并未呈現(xiàn)線性增加的趨勢。因此在實際應(yīng)用中,需要根據(jù)具體處理算法需求,合理分配線程數(shù)以達到最優(yōu)的效率。
進一步對比單節(jié)點串行計算,單節(jié)點OpenMP并行計算以及兩節(jié)點MPI+OpenMP并行計算的脈內(nèi)分析處理時間,測試結(jié)果如表1所示。其中測試數(shù)據(jù)采用常規(guī)信號(NS)、線性調(diào)頻信號(LFM)、二相編碼信號(BPSK)和四相編碼信號(QPSK)的中頻脈沖數(shù)據(jù),脈沖寬度10 μs,脈沖數(shù)量1 000。
表1 處理用時對比(單位ms)
表1中,OpenMP計算時使用單個服務(wù)器、單個進程32線程并行計算,MPI+OpenMP計算時使用2臺服務(wù)器,將計算數(shù)據(jù)平均分配至2個節(jié)點,在每個節(jié)點上采用單進程32線程的并行計算??梢钥闯?在單節(jié)點上采用OpenMP加速能有效提高脈內(nèi)分析的處理速度。在2個節(jié)點間采用MPI+OpenMP時,每個節(jié)點的計算數(shù)據(jù)量降低1倍,但是由于節(jié)點間通信的開銷,導致實際計算速度提升小于2倍。圖8給出了2種并行計算方式對不同調(diào)制類型數(shù)據(jù)的加速比。可以看出:MPI+OpenMP的加速方法對不同調(diào)制類型的加速比達到了15以上。
圖8 不同調(diào)制類型的加速比
本文提出了一種基于MPI+OpenMP的雷達信號實時脈內(nèi)分析并行計算方法,針對雷達信號脈沖數(shù)據(jù)流,在每個節(jié)點分配MPI進程,在節(jié)點進程的內(nèi)部利用OpenMP為每個脈沖串分配一個線程,實現(xiàn)脈沖級的脈內(nèi)分析并行計算,充分發(fā)揮電子偵察信號處理計算平臺的性能。測試結(jié)果表明,該方法對不同調(diào)制類型信號的處理速度都獲得了較大的提升。該方法實時性好,并且易于擴展,可以為雷達信號脈內(nèi)分析的實時處理提供解決方案。