













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