關(guān)鍵詞:彈道計(jì)算; 微分方程; 并行運(yùn)算; 龍格-庫塔法; 多核多線程技術(shù)
彈道學(xué)主要研究各種彈丸或拋射體從發(fā)射起點(diǎn)到終點(diǎn)的運(yùn)動(dòng)規(guī)律及伴隨發(fā)生的有關(guān)現(xiàn)象[1]。作為彈道學(xué)的一個(gè)分支,計(jì)算彈道學(xué)通過對實(shí)際彈道問題建立數(shù)學(xué)模型,利用高性能計(jì)算設(shè)備對彈道學(xué)中的各種現(xiàn)象與規(guī)律進(jìn)行數(shù)值計(jì)算和仿真分析,已成為武器火力系統(tǒng)計(jì)算機(jī)輔助設(shè)計(jì)的重要基礎(chǔ),為武器的總體論證及性能預(yù)測提供了必要的數(shù)據(jù)[1-5]。為了提高復(fù)雜的導(dǎo)彈諸元和彈道計(jì)算任務(wù)的執(zhí)行效率,通常采用并行計(jì)算技術(shù)[2-5],通過將大型計(jì)算任務(wù)分解為多個(gè)子任務(wù)在多個(gè)并發(fā)處理機(jī)上進(jìn)行運(yùn)算,利用多核計(jì)算設(shè)備和并行計(jì)算技術(shù)可以有效地縮短任務(wù)解算時(shí)間。
為了提高彈道解算效率,科研人員利用數(shù)值模擬技術(shù)開展了許多研究工作[2-11]。對于彈道并行運(yùn)算的研究,廉燦國等[2]在并行計(jì)算導(dǎo)彈諸元時(shí)提出了線程池的技術(shù),即在積分函數(shù)的調(diào)用次數(shù)較多的情況下使用多個(gè)線程的線程池來減少計(jì)算時(shí)間,雖然相對提高了并行彈道計(jì)算的速度,但頻繁地進(jìn)行線程創(chuàng)建和銷毀會耗費(fèi)大量時(shí)間。潘艇等[3]提出了通過現(xiàn)場可編程門陣列(FPGA)實(shí)現(xiàn)并行數(shù)據(jù)處理從而提高彈道解算速率,但是主要針對火控解算中求解微分方程組的速度和精確度等進(jìn)行設(shè)計(jì),未考慮硬件之間的數(shù)據(jù)通信帶來的影響。鐘新玉等[4]提出了基于信息傳遞接口(MPI)的彈道仿真的并行計(jì)算方法,主要側(cè)重于通過減少并行計(jì)算進(jìn)程之間通信量和通信次數(shù)來加速解算時(shí)間。鮮勇等[5]在彈道并行計(jì)算的設(shè)計(jì)中提出了面向?qū)ο蟮乃枷脒M(jìn)行彈道解算,即通過將導(dǎo)彈在飛行過程中受到的影響因素進(jìn)行對象劃分后賦予各個(gè)對象不同的性質(zhì)從而計(jì)算出不同的彈道。王鎰磊等[6]基于迫擊炮內(nèi)彈道模型提出了一種內(nèi)彈道優(yōu)化設(shè)計(jì)方法并采用多目標(biāo)遺傳算法進(jìn)行求解,以提高優(yōu)化設(shè)計(jì)效率。黃玉才[7]針對高超聲速彈箭建立了外彈道數(shù)學(xué)模型。徐曉東等[8-9]基于MPI研究了諸元和彈道并行計(jì)算的并行計(jì)算模型和實(shí)現(xiàn)方法,并針對遠(yuǎn)程彈道導(dǎo)彈擾動(dòng)引力計(jì)算設(shè)計(jì)了利用多臺計(jì)算機(jī)的并行計(jì)算模型。秦小麗等[10]針對巨型規(guī)模的火箭彈最優(yōu)彈道解算問題建立了一種并行求解模型。由于計(jì)算硬件或系統(tǒng)內(nèi)部進(jìn)程之間的數(shù)據(jù)交互和通信通常會額外花費(fèi)大量的時(shí)間,會極大地影響加速效率,盡管以上研究嘗試?yán)貌⑿杏?jì)算技術(shù)提高彈道計(jì)算速度,但仍需要進(jìn)一步研究加速架構(gòu)與解算任務(wù)之間的耦合關(guān)系。楊帆等[11]研究和分析了導(dǎo)彈武器系統(tǒng)動(dòng)力學(xué)性能與武器系統(tǒng)總體參數(shù)之間的定量關(guān)系,并討論了提高導(dǎo)彈精度的新方法。除彈道計(jì)算領(lǐng)域外,數(shù)值計(jì)算和模擬分析技術(shù)在其他工程應(yīng)用領(lǐng)域中發(fā)揮著日益重要的作用[12-13]。
本文針對多彈道計(jì)算問題設(shè)計(jì)了基于Visual C++異步編程的多線程多核并行運(yùn)算架構(gòu),通過對多彈道計(jì)算任務(wù)的劃分和調(diào)度實(shí)現(xiàn)了多核多線程并行化運(yùn)算,通過仿真試驗(yàn)測試了所設(shè)計(jì)的并行運(yùn)算架構(gòu)在多彈道解算中的性能,并將串行計(jì)算和并行計(jì)算進(jìn)行對比,來驗(yàn)證并行運(yùn)算方法的有效性。
1 彈道解算
1.1 彈道解算概述
諸元與彈道計(jì)算[1]是指彈道導(dǎo)彈發(fā)射前,根據(jù)實(shí)際發(fā)射條件和武器系統(tǒng)狀態(tài)計(jì)算出一條由發(fā)射點(diǎn)到目標(biāo)點(diǎn)的理論彈道,如圖1 所示,并以該彈道為基準(zhǔn),為導(dǎo)彈的控制系統(tǒng)、瞄準(zhǔn)系統(tǒng)和彈頭系統(tǒng)等計(jì)算并制定一整套基準(zhǔn)參數(shù),確保導(dǎo)彈實(shí)際發(fā)射后能基本沿著選擇的彈道飛行,并以要求的精度命中目標(biāo)[14]。這些參數(shù)包括自射出點(diǎn)起計(jì)算的彈丸飛行時(shí)間、彈丸質(zhì)心在地面坐標(biāo)系中的坐標(biāo)、質(zhì)心速度的大小,以及矢量與水平面的方向傾角等,可簡要概括為射程、最大彈道高、初速、落速、射角、落角和飛行時(shí)間等。此外,彈道計(jì)算在實(shí)際中有廣泛的應(yīng)用,如射表編擬[15]和火控計(jì)算[16]。在火控系統(tǒng)設(shè)計(jì)中,彈道解算器按照彈種和激光測距儀測到的目標(biāo)距離自動(dòng)裝定表尺,同時(shí)控制穩(wěn)定器在高低向自動(dòng)抬炮。因此必須有計(jì)算彈道的數(shù)學(xué)模型作為基本依據(jù),使得在射擊中的實(shí)際彈道與彈道計(jì)算結(jié)果足夠準(zhǔn)確符合。
1.2 彈丸質(zhì)心運(yùn)動(dòng)方程組
本文基于以下基本假設(shè):(1)彈丸在全飛行過程中,迎角為0;(2)彈丸的質(zhì)量分布是軸對稱的;(3)彈丸質(zhì)心運(yùn)動(dòng)環(huán)境中地表為平面并且重力加速度大小不變且垂直向下;(4)地球自轉(zhuǎn)產(chǎn)生的科氏加速度為0;(5)氣象環(huán)境為標(biāo)準(zhǔn)大氣條件、無風(fēng)力作用等,研究了彈丸質(zhì)心運(yùn)動(dòng),建立了彈丸質(zhì)心運(yùn)動(dòng)方程組。
2 四階龍格-庫塔法
通過迭代求解微分方程進(jìn)行彈道計(jì)算,首先依據(jù)初始值計(jì)算出標(biāo)準(zhǔn)的彈道以及落點(diǎn)與目標(biāo)點(diǎn)之間的偏差,然后根據(jù)偏差依次修正迭代的初始值,直到落點(diǎn)的偏差在允許的范圍內(nèi)則停止修正。本文采用龍格-庫塔法迭代求解微分方程,龍格-庫塔方法是一種在工程上應(yīng)用廣泛的高精度單步算法,由于此算法精度高,需采取措施對誤差進(jìn)行抑制,因此其實(shí)現(xiàn)原理也較為復(fù)雜。該算法源于歐拉公式,算法原理如下。
由于四階龍格-庫塔法通過四步分段逼近微分方程組的解,在一個(gè)求解步長h 內(nèi)可以逼近較復(fù)雜的曲線,因此能夠取得較高的計(jì)算精度,其截?cái)嗾`差可以達(dá)到O(h5),該算法當(dāng)前每一步的求解都需要其上一步的求解結(jié)果,通過迭代得到最終結(jié)果。
3 基于四階龍格-庫塔法的多彈道并行計(jì)算架構(gòu)
3.1 多彈道并行解算
并行計(jì)算是指將一個(gè)應(yīng)用分解為多個(gè)子任務(wù)分配給并行機(jī)上不同的處理器,各個(gè)處理器之間相互協(xié)同并行地執(zhí)行子任務(wù),從而達(dá)到加速求解大規(guī)模應(yīng)用問題的目的[5]。隨著計(jì)算機(jī)硬件的發(fā)展,CPU核數(shù)的不斷增加,要體現(xiàn)多核在并行計(jì)算上的優(yōu)勢,需要在問題建模、算法構(gòu)造以及程序?qū)崿F(xiàn)等階段進(jìn)行有效設(shè)計(jì)以充分利用多核高性能硬件資源的并行效能。
本文在多核環(huán)境下利用多核多線程并行計(jì)算技術(shù)來解決多彈道并行計(jì)算問題,以保證在給定精度要求的前提下能夠在規(guī)定的時(shí)間內(nèi)完成多彈道解算任務(wù),圖2 為多彈道并行化流程圖。為保證在盡可能短的等待時(shí)間內(nèi)完成解算任務(wù),算法需要對每個(gè)彈道解算任務(wù)進(jìn)行評估和調(diào)度。彈道計(jì)算的初始參數(shù)包括射擊起始點(diǎn)坐標(biāo)、彈丸初始速度、彈丸直徑和射角。
彈道計(jì)算通常對運(yùn)算速度和精度具有較高的要求,特別是在整個(gè)彈丸發(fā)射過程中,相等時(shí)間間隔內(nèi)彈丸的位置變化規(guī)律并不固定,而是一個(gè)間隔持續(xù)變化的過程,因而需要不斷地對彈丸的軌跡進(jìn)行迭代和修正計(jì)算。利用龍格-庫塔法進(jìn)行多彈道解算,微分方程數(shù)目較多并且迭代運(yùn)算復(fù)雜,屬于計(jì)算密集型計(jì)算任務(wù)。如果使用串行計(jì)算策略,運(yùn)算時(shí)間會隨著計(jì)算精度和彈道數(shù)目的增加而急劇增加,從而因耗時(shí)過長而導(dǎo)致無法滿足實(shí)際需求。為了提高求解微分方程的迭代速度,在多核環(huán)境下采用并行計(jì)算多條彈道的方式來減少解算任務(wù)的迭代時(shí)間,即對多彈道的計(jì)算數(shù)據(jù)進(jìn)行分解,將非必須串行化的部分分開到多個(gè)并行的核上進(jìn)行計(jì)算,從而達(dá)到加速計(jì)算的目的。
3.2 基于多核多線程的并行多彈道解算
采用多核多線程并行計(jì)算技術(shù)將不同彈道計(jì)算數(shù)據(jù)進(jìn)行分解,根據(jù)彈道參數(shù)將相互之間變量關(guān)聯(lián)密切的彈道分配為同一個(gè)子線程并調(diào)度至相應(yīng)的處理器內(nèi)核中。如圖3 所示,初始參數(shù)設(shè)置完成后,為了實(shí)現(xiàn)多核多線程并行結(jié)構(gòu),將不同彈道計(jì)算任務(wù)進(jìn)行分解,將相互之間關(guān)聯(lián)變量多的彈道分配為同一個(gè)子線程,可以縮短計(jì)算時(shí)間和平衡負(fù)載。在每一個(gè)子線程的執(zhí)行過程中,迭代求解在某種環(huán)境因素下的微分方程,最后接收并輸出彈道計(jì)算結(jié)果。將子線程調(diào)度至處理器內(nèi)核后,主線程可以根據(jù)參數(shù)關(guān)聯(lián)情況將解算任務(wù)分配至相應(yīng)的子線程,而該子線程無須為新分配的解算任務(wù)開辟計(jì)算空間,同時(shí),線程之間是異步并行的,每個(gè)子線程完成解算任務(wù)后便可以將結(jié)果傳遞給控制器。
在算法執(zhí)行過程中需要將多個(gè)彈道解算任務(wù)映射到不同的內(nèi)核線程中,以提高解算效率。不同的彈道會被分配到不同的線程中,通過異步調(diào)用可以避免同步等待結(jié)果和阻塞主線程,線程返回的響應(yīng)結(jié)果暫存至緩存,在需要時(shí)可直接獲取結(jié)果,但獲取結(jié)果的過程會阻塞主線程,如圖4所示。
在混合線程系統(tǒng)中多線程之間主要存在兩種競爭:進(jìn)程競爭和系統(tǒng)競爭。進(jìn)程競爭是指線程與相同進(jìn)程內(nèi)的其他線程進(jìn)行競爭,系統(tǒng)競爭是指線程與系統(tǒng)進(jìn)程內(nèi)的線程進(jìn)行競爭。彈道計(jì)算線程如圖5 所示。如進(jìn)程A有4 個(gè)線程,對應(yīng)4 條待計(jì)算的彈道,進(jìn)程B 有2 個(gè)線程,對應(yīng)2條彈道,系統(tǒng)有4 個(gè)CPU核心。由于進(jìn)程A的前三個(gè)線程使用了內(nèi)核1 和內(nèi)核2,這三個(gè)線程會在進(jìn)程A 內(nèi)競爭。而進(jìn)程B的一個(gè)線程和進(jìn)程A的一個(gè)線程共用內(nèi)核3,這兩個(gè)線程會在系統(tǒng)范圍內(nèi)競爭。解決這些競爭需要在執(zhí)行計(jì)算任務(wù)之前進(jìn)行合理地調(diào)度,每個(gè)線程可以設(shè)置與主線程不同的調(diào)度策略和優(yōu)先級?;旌暇€程分配方式如圖6所示。根據(jù)彈道初始參數(shù)估算彈道解算的計(jì)算量,首先利用式(6)計(jì)算彈丸飛行時(shí)間t,然后根據(jù)飛行時(shí)間t 利用式(7)估算彈丸質(zhì)心的最大飛行距離xmax。因此,彈道解算的計(jì)算量可估算為E ? xmax /h。本文基于輪詢調(diào)度策略均衡內(nèi)核負(fù)載,詳細(xì)調(diào)度策略如算法LBS所示。
4 仿真試驗(yàn)與結(jié)果分析
本文試驗(yàn)采用了三組不同的彈道(參數(shù)見表1、軌跡見圖7)對所設(shè)計(jì)的基于四階龍格-庫塔法的多彈道并行計(jì)算架構(gòu)進(jìn)行仿真驗(yàn)證,并對計(jì)算架構(gòu)的性能進(jìn)行測試和分析。
在不同的彈道發(fā)射初始值下,得到基于四階龍格-庫塔法計(jì)算的彈道軌跡,如圖7 所示。其中,圖7(a)為對彈道1設(shè)置不同的射擊高度所得到的彈丸軌跡,圖7(b)為對彈道2設(shè)置不同的射擊角度而得到的彈丸軌跡,圖7(c)為對彈道3設(shè)置不同的初始速度而得到的彈丸軌跡。從圖7 可以看出,初始速度和射擊角度影響彈丸飛行的垂直高度和落點(diǎn)的水平距離,而在實(shí)際應(yīng)用中彈丸飛行時(shí)所受的空氣阻力還受到彈丸直徑的影響,因而可以自由設(shè)置多組參數(shù)來解算對應(yīng)的軌跡。
為了評估多彈道并行計(jì)算架構(gòu)的有效性,在仿真試驗(yàn)中隨機(jī)采用不同參數(shù)下的試驗(yàn)1~3 分別組成10 彈道、20 彈道、26 彈道、35 彈道以及50 彈道進(jìn)行解算,分別采用多線程并行計(jì)算、多核多線程計(jì)算以及串行計(jì)算對多個(gè)彈道進(jìn)行計(jì)算和試驗(yàn)對比。表2 為采用不同計(jì)算策略的多彈道計(jì)算仿真試驗(yàn)結(jié)果。由表2 可以發(fā)現(xiàn),對于計(jì)算量較小的彈道計(jì)算,并行計(jì)算所使用的計(jì)算時(shí)間相較于串行計(jì)算并未產(chǎn)生較大提升,然而對于計(jì)算量較大的彈道計(jì)算,并行計(jì)算結(jié)果明顯優(yōu)于串行計(jì)算,從而驗(yàn)證了多彈道并行計(jì)算的有效性。通過對比單核多線程并行計(jì)算和多核多線程并行計(jì)算所使用時(shí)間,可以看出對于計(jì)算量較?。ú介L較大)的彈道解算任務(wù),多核并行計(jì)算所花費(fèi)的時(shí)間與多線程并行計(jì)算基本相近。但對于計(jì)算量較大(步長較?。┑膹椀烙?jì)算任務(wù),多核并行計(jì)算花費(fèi)的計(jì)算時(shí)間少于多線程并行計(jì)算(見圖8和圖9)。
從圖8 可以看出,對于計(jì)算數(shù)目較小的多彈道并行化計(jì)算,多線程并行方法不能對程序提升較大的速度,相反可能由于線程之間的阻塞會導(dǎo)致計(jì)算過程變慢,而多核隨機(jī)分配的過程是通過將計(jì)算過程中的多個(gè)彈道隨機(jī)分配到空余的CPU內(nèi)核中,因此計(jì)算速度并不會受到太大影響。
從圖9 可以看出,在步長縮短到0.01 時(shí),計(jì)算量隨之增大,此時(shí)多線程以及多核等并行化方法相較于串行計(jì)算方法,計(jì)算速度明顯加快,計(jì)算時(shí)間降低了50%。隨著計(jì)算量的增加,計(jì)算速度減少的比率更高。如圖10 所示,在不同步長下,并行計(jì)算策略明顯優(yōu)于串行計(jì)算。
在相同彈道數(shù)的情況下,試驗(yàn)測試了彈道解算時(shí)間隨步長變化的對應(yīng)關(guān)系,試驗(yàn)中分別采用20、35 和50 條彈道對彈道2 進(jìn)行并行計(jì)算,結(jié)果如圖11 所示。隨著步長的增加,解算時(shí)間快速減少,驗(yàn)證了本文所設(shè)計(jì)并行計(jì)算架構(gòu)的有效性。
為了進(jìn)一步測試本文所設(shè)計(jì)并行計(jì)算架構(gòu)的穩(wěn)定性,在復(fù)雜計(jì)算環(huán)境下對由圖7 中所示彈道隨機(jī)組合的多彈道進(jìn)行了解算試驗(yàn),復(fù)雜計(jì)算環(huán)境設(shè)置為處理器在處理彈道解算任務(wù)時(shí)同時(shí)處理其他事務(wù),試驗(yàn)中通過多次運(yùn)行統(tǒng)計(jì)了所花費(fèi)計(jì)算時(shí)間的平均值和方差,試驗(yàn)結(jié)果如圖12 所示(紅色為并行計(jì)算,黑色為串行計(jì)算)。試驗(yàn)結(jié)果顯示,本文所設(shè)計(jì)的并行計(jì)算架構(gòu)受運(yùn)算環(huán)境的影響較小,具有較高的穩(wěn)定性。
5 結(jié)束語
本文設(shè)計(jì)了基于多核多線程的多彈道并行計(jì)算架構(gòu),為了充分利用多核處理器實(shí)現(xiàn)彈道解算加速,在并行計(jì)算中將多彈道解算任務(wù)映射為可異步執(zhí)行的并發(fā)多線程任務(wù),并且根據(jù)彈道初始參數(shù)對計(jì)算任務(wù)進(jìn)行劃分,然后通過調(diào)度將各線程分配至多個(gè)處理器內(nèi)核,從而實(shí)現(xiàn)了多任務(wù)的異步并發(fā)執(zhí)行。試驗(yàn)驗(yàn)證了所設(shè)計(jì)的多核多線程并行計(jì)算架構(gòu)在多彈道計(jì)算實(shí)例中可以顯著提高多彈道計(jì)算速度,且隨著彈道數(shù)目逐漸增加,并行計(jì)算性能明顯優(yōu)于串行計(jì)算策略。因此,利用多線程技術(shù)可以有效地改進(jìn)多彈道解算效率。由于國內(nèi)特殊計(jì)算裝備對計(jì)算性能的高要求,在諸多彈道計(jì)算中采用并行化技術(shù)可以有效提高彈道計(jì)算時(shí)間和設(shè)備快速反應(yīng)能力。