邱麗原,孫偉超
(海軍航空大學(xué),山東煙臺(tái) 264001)
數(shù)字計(jì)算機(jī)仿真(以下簡(jiǎn)稱(chēng)為計(jì)算機(jī)仿真)以相似原理為基礎(chǔ),結(jié)合模型理論、系統(tǒng)技術(shù)、計(jì)算機(jī)技術(shù)、信息技術(shù)以及應(yīng)用領(lǐng)域的相關(guān)專(zhuān)業(yè)技術(shù)[1],在現(xiàn)代武器裝備的論證、設(shè)計(jì)、制造、試驗(yàn)、定型、訓(xùn)練,特別是對(duì)抗性驗(yàn)證、評(píng)估中得到廣泛而深入的應(yīng)用,取得了很好的軍事效益和經(jīng)濟(jì)效益。
現(xiàn)代信息化戰(zhàn)爭(zhēng)的一個(gè)最顯著的特點(diǎn)就是電子戰(zhàn)的作用和地位日益突出,甚至可以說(shuō),電子戰(zhàn)水平和應(yīng)用能力的高低,在很大程度上決定了戰(zhàn)斗和戰(zhàn)役的勝負(fù)。雷達(dá)和針對(duì)雷達(dá)的電子對(duì)抗是電子戰(zhàn)中最主要的內(nèi)容和攻防矛盾之一,應(yīng)用計(jì)算機(jī)仿真對(duì)雷達(dá)/電子干擾攻防對(duì)抗進(jìn)行研究非常必要。
雷達(dá)/電子干擾攻防對(duì)抗計(jì)算機(jī)仿真可以粗略分為功能級(jí)仿真和信號(hào)級(jí)仿真兩大類(lèi),在滿(mǎn)足了真實(shí)性要求的前提下,信號(hào)級(jí)仿真最突出的問(wèn)題就是仿真速度的問(wèn)題。在本文中,我們結(jié)合多年從事雷達(dá)/電子干擾攻防對(duì)抗信號(hào)級(jí)仿真的體會(huì),就提高雷達(dá)/電子干擾攻防對(duì)抗信號(hào)級(jí)仿真的仿真速度的問(wèn)題進(jìn)行一些討論,主要包括以下內(nèi)容:
1) 信號(hào)級(jí)仿真的必要性;
2) 信號(hào)級(jí)仿真的速度問(wèn)題及其解決出路;
3) 從仿真軟件本身找速度問(wèn)題的解決出路。
關(guān)于什么是信號(hào)級(jí)仿真,什么是功能級(jí)仿真的問(wèn)題,在國(guó)內(nèi)有不同的看法[1]。簡(jiǎn)而言之,我們認(rèn)為,對(duì)于相參雷達(dá),能夠再現(xiàn)雷達(dá)內(nèi)部的零中頻及其以下的信號(hào)流動(dòng)流程及其處理過(guò)程;對(duì)于非相參雷達(dá),能夠再現(xiàn)雷達(dá)內(nèi)部的視頻及其以下的信號(hào)流動(dòng)流程及其處理過(guò)程,就是信號(hào)級(jí)仿真。而功能級(jí)仿真,通常僅涉及空間能量計(jì)算以及一些基于概率計(jì)算的隨機(jī)變量門(mén)限檢測(cè),而不涉及雷達(dá)內(nèi)部的信號(hào)流動(dòng)流程及其處理過(guò)程。
從信號(hào)級(jí)仿真和功能級(jí)仿真的作用和實(shí)際效果看,在雷達(dá)/電子干擾攻防對(duì)抗仿真中,有以下區(qū)別。
1)客觀還是主觀的區(qū)別
信號(hào)級(jí)仿真要求把雷達(dá)本身真實(shí)地仿出來(lái),把干擾機(jī)產(chǎn)生的干擾信號(hào)真實(shí)地仿出來(lái),還要求把目標(biāo)和環(huán)境也真實(shí)地仿出來(lái)。攻防對(duì)抗的結(jié)果,是通過(guò)運(yùn)行仿真軟件來(lái)產(chǎn)生的,是客觀的。而功能級(jí)仿真在多個(gè)環(huán)節(jié)上都要有人的主觀參與和決策,特別是一些關(guān)鍵的結(jié)論性數(shù)據(jù),要由“專(zhuān)家”人為設(shè)定,因而有很強(qiáng)的主觀性。
2)能不能實(shí)現(xiàn)的區(qū)別
由于在信號(hào)流動(dòng)流程及其處理過(guò)程的層面對(duì)雷達(dá)、干擾信號(hào)、目標(biāo)信號(hào)和環(huán)境信號(hào)進(jìn)行真實(shí)的仿真,在信號(hào)級(jí)仿真中,所有的干擾都可以加入雷達(dá)中。而在功能級(jí)仿真中,一些干擾是加不到雷達(dá)中的。換句話(huà)說(shuō),一些干擾在功能級(jí)仿真中不能實(shí)現(xiàn),因而是得不出結(jié)果的。特別是欺騙性干擾(一個(gè)典型的例子是距離波門(mén)拖引干擾),信噪比雖然是重要因素,但已經(jīng)不是決定性因素,決定性因素是目標(biāo)回波信號(hào)、干擾信號(hào)在雷達(dá)組件中的相互作用以及雷達(dá)組件對(duì)信號(hào)的處理。對(duì)欺騙性干擾進(jìn)行功能級(jí)仿真既沒(méi)有針對(duì)性,也沒(méi)有實(shí)際意義。
另外,除個(gè)別情況外,對(duì)于雷達(dá)/電子干擾攻防對(duì)抗中至關(guān)重要的目標(biāo)識(shí)別,無(wú)法進(jìn)行有意義的功能級(jí)仿真。
3)誤差與顛覆的區(qū)別
毋庸諱言,任何仿真都是有誤差的,信號(hào)級(jí)仿真也不例外。但功能級(jí)仿真與實(shí)際情況的差別在一些場(chǎng)合下是顛覆性的。以反艦導(dǎo)彈末制導(dǎo)雷達(dá)為例。反艦導(dǎo)彈末制導(dǎo)雷達(dá)在受到艦載有源壓制式干擾時(shí),按照功能級(jí)仿真通常使用的信噪比準(zhǔn)則,由于信噪比極低,在末制導(dǎo)雷達(dá)中已經(jīng)看不到目標(biāo)回波,干擾是成功的。但實(shí)際情況是,在這種情況下,末制導(dǎo)雷達(dá)會(huì)啟動(dòng)雜波源跟蹤(HOJ)功能,繼續(xù)在方位上跟蹤水面艦艇目標(biāo),引導(dǎo)反艦導(dǎo)彈準(zhǔn)確命中,從而使得干擾徹底失敗。
綜上所述,我們認(rèn)為,對(duì)于雷達(dá)/電子干擾攻防對(duì)抗而言,要進(jìn)行客觀、全面、準(zhǔn)確的研究,信號(hào)級(jí)仿真是非常必要的[2]。
相對(duì)于功能級(jí)仿真,信號(hào)級(jí)仿真有一些特別突出的問(wèn)題,例如仿真速度問(wèn)題,模型校核問(wèn)題[3]等。在滿(mǎn)足了真實(shí)性要求的前提下,信號(hào)級(jí)仿真的一個(gè)最引人關(guān)注的問(wèn)題就是仿真速度的問(wèn)題。信號(hào)級(jí)仿真速度慢,主要原因在兩個(gè)方面:一是計(jì)算內(nèi)容多而且細(xì)致導(dǎo)致的計(jì)算量大;二是計(jì)算頻率高。以非相參雷達(dá)為例,系統(tǒng)采樣頻率需要達(dá)到20 MHz。這兩個(gè)方面的因素是由于信號(hào)級(jí)仿真本身的性質(zhì)決定的,是無(wú)法改變的。
信號(hào)級(jí)仿真的速度慢主要導(dǎo)致三個(gè)方面的問(wèn)題:一是一次仿真要花費(fèi)很長(zhǎng)的時(shí)間,效率太低,同時(shí)也影響了仿真應(yīng)用者對(duì)重點(diǎn)問(wèn)題的關(guān)注;二是極大地限制了信號(hào)級(jí)仿真在系統(tǒng)層面、體系層面上的應(yīng)用;三是不能用于任何有硬件參與的研究,包括模擬訓(xùn)練等。
雖然計(jì)算量大、計(jì)算頻率高是信號(hào)級(jí)仿真的天然特性,但提高其仿真速度,使其達(dá)到實(shí)時(shí)或近實(shí)時(shí)(這里的近實(shí)時(shí)指的是:名義時(shí)間∶計(jì)算機(jī)時(shí)間<=1∶3)還是大有可為的。從通用的角度看問(wèn)題,提高信號(hào)級(jí)仿真的速度有賴(lài)于在以下方面取得突破:
1)計(jì)算機(jī)硬件的整體速度有大幅度的提高;
2)計(jì)算機(jī)的多核并行處理能力有大幅度的提高;
3)通過(guò)輔助硬件加速使計(jì)算機(jī)系統(tǒng)的速度得到大幅度的提高;
4)使仿真軟件本身的運(yùn)行速度得到大幅度的提高。
第一個(gè)方面,計(jì)算機(jī)硬件的整體速度,至少涉及CPU、內(nèi)存、主板等多個(gè)硬件(或硬件組件)的速度以及整合速度,這里主要拖后腿的是內(nèi)存(也涉及主板和總線(xiàn))的存取速度。除非出現(xiàn)系統(tǒng)性的技術(shù)變革,要計(jì)算機(jī)硬件的整體速度有大幅度的提高是不現(xiàn)實(shí)的。
第二個(gè)方面,計(jì)算機(jī)的多核并行處理能力的大幅度提高,在今天已經(jīng)成為技術(shù)現(xiàn)實(shí)。多核并行處理能力的提高,通過(guò)多個(gè)實(shí)體仿真軟件(多枚反艦導(dǎo)彈同時(shí)攻擊水面艦艇目標(biāo)情況下,每一枚反艦導(dǎo)彈的末制導(dǎo)雷達(dá)都是一個(gè)實(shí)體仿真軟件)的并行運(yùn)行,可以提高整個(gè)仿真系統(tǒng)的運(yùn)行速度,但對(duì)于構(gòu)成真正瓶頸的單個(gè)實(shí)體仿真軟件的速度提高則沒(méi)有意義。實(shí)際情況下,不大可能為了多核并行處理,把一個(gè)實(shí)體仿真軟件拆分成為多個(gè)部分。這里有三個(gè)問(wèn)題:
1)能不能并行的問(wèn)題
并行計(jì)算是需要條件的?;蛘哒f(shuō),并不是任何實(shí)體仿真軟件的任何部分都能夠任意地拆分來(lái)進(jìn)行并行計(jì)算的。一個(gè)實(shí)體軟件的某些部分要能夠并行,必須滿(mǎn)足一定的時(shí)序、邏輯或計(jì)算關(guān)系。事實(shí)上,對(duì)于一個(gè)雷達(dá)的仿真軟件實(shí)體而言,能夠進(jìn)行拆分進(jìn)而進(jìn)行并行計(jì)算的部分是非常有限的。
2)并行化改造的代價(jià)
無(wú)論是對(duì)一個(gè)已經(jīng)完成的實(shí)體仿真軟件進(jìn)行拆分并行化改造,還是在設(shè)計(jì)、編制一個(gè)新的實(shí)體仿真軟件過(guò)程中貫徹并行化,都需要在較深的技術(shù)層次上付出較大的人力和時(shí)間代價(jià)。
3)并行化執(zhí)行的代價(jià)
在并行化執(zhí)行一個(gè)實(shí)體仿真軟件時(shí),相應(yīng)的通信/控制、數(shù)據(jù)分配、數(shù)據(jù)合并和數(shù)據(jù)(包括程序)存取/傳輸?shù)?都是要付出時(shí)間代價(jià)的。特別是最后一個(gè)環(huán)節(jié),由于涉及的是不同核之間的數(shù)據(jù)/程序的傳輸和存取,會(huì)付出相當(dāng)大的時(shí)間代價(jià)。
當(dāng)并行化執(zhí)行的代價(jià)接近甚至高于并行化帶來(lái)的收益的時(shí)候,并行化就失去意義了。
由于上述三個(gè)問(wèn)題的存在,要利用計(jì)算機(jī)的多核并行處理能力的大幅度的提高來(lái)提高單個(gè)實(shí)體仿真軟件的運(yùn)行速度是沒(méi)有普遍意義的。
第三個(gè)方面,通過(guò)輔助硬件加速使計(jì)算機(jī)系統(tǒng)的速度得到大幅度的提高。通行做法有兩條途徑:一條途徑是采用FPGA或FPGA+DSP構(gòu)建專(zhuān)用的輔助硬件;一條途徑是采用GPU等通用輔助硬件。
采用FPGA或FPGA+DSP構(gòu)建的專(zhuān)用輔助硬件,的確能夠大幅度提高單個(gè)實(shí)體仿真軟件的運(yùn)行速度,除了構(gòu)建專(zhuān)用輔助硬件需要付出的成本和人力/時(shí)間代價(jià)外,其最大缺點(diǎn)是靈活性差。
GPU從本質(zhì)上看是一種并行多核,而且其處理單元數(shù)比CPU中的核數(shù)高好幾個(gè)量級(jí)。除了上述的多核并行處理的三個(gè)問(wèn)題外,GPU并行處理還有一個(gè)特殊的問(wèn)題,就是其處理深度很淺,因而需要頻繁地交換數(shù)據(jù),在這個(gè)方面會(huì)付出更大的時(shí)間代價(jià)。有GPU方面的資深專(zhuān)家給出了一個(gè)例子[4],對(duì)于同一個(gè)問(wèn)題(該問(wèn)題比較復(fù)雜,具體內(nèi)容在此不擬贅述),采用程序優(yōu)化和GPU加速兩種方法,GPU加速方法的速度僅比程序優(yōu)化方法快一倍。我們認(rèn)為,GPU加速的適用面受到很大的限制。
第四個(gè)方面,使仿真軟件本身的運(yùn)行速度得到大幅度的提高,在下面作為一個(gè)專(zhuān)題,進(jìn)行一定程度上的展開(kāi)討論。
從理論和實(shí)踐兩個(gè)方面看,從仿真軟件本身找速度問(wèn)題的解決出路,使仿真軟件本身的運(yùn)行速度得到大幅度的提高,是大有可為的?;谖覀兊木唧w實(shí)踐,以下列出四條基本思路或者說(shuō)是基本技術(shù)方法:
1)提高模型抽象和實(shí)現(xiàn)的層次和水平;
2)提高算法優(yōu)化的層次和水平;
3)提高以空間換時(shí)間的水平;
4)提高數(shù)據(jù)存取的速度水平。
提高模型抽象和實(shí)現(xiàn)的層次和水平,在一定意義上,對(duì)于提高仿真軟件的運(yùn)行速度具有根本的、普遍的意義和作用。
系統(tǒng)仿真以模型為基礎(chǔ),在本質(zhì)上是模型試驗(yàn),仿真運(yùn)行主要就是模型的運(yùn)行。模型的有效性和精度決定了仿真的有效性和精度,模型也決定了仿真軟件運(yùn)行的計(jì)算量。這里所說(shuō)的通過(guò)提高模型抽象和實(shí)現(xiàn)的層次和水平來(lái)提高仿真軟件的運(yùn)行速度,以保證模型的有效性和精度不下降為基本前提。
本文以目標(biāo)回波的仿真為例闡述模型抽象的問(wèn)題。這里僅考慮回波的時(shí)間位置和標(biāo)準(zhǔn)波形(與發(fā)射基帶波形相同的單位幅度的波形,這里采用簡(jiǎn)單矩形脈沖)。
很多使用Matlab/Simulink進(jìn)行仿真的人,在一開(kāi)始的時(shí)候會(huì)用如圖1所示的模型一來(lái)實(shí)現(xiàn)目標(biāo)回波的仿真。
圖1 回波仿真的模型一
圖1中的目標(biāo)回波延遲時(shí)間根據(jù)目標(biāo)與雷達(dá)之間的距離計(jì)算而得。
在圖1的模型中,目標(biāo)回波由發(fā)射脈沖經(jīng)目標(biāo)回波延遲時(shí)間的延遲得到,在物理概念上是完全正確和精確的。但圖1的模型的實(shí)現(xiàn)效率是非常低的:其中的可變時(shí)間延遲器(Variable Time Delay)模塊在內(nèi)部通過(guò)存儲(chǔ)器來(lái)存儲(chǔ)一個(gè)指定時(shí)間范圍內(nèi)的最新輸入數(shù)據(jù)。在每一個(gè)系統(tǒng)仿真步長(zhǎng)(0.1 us量級(jí))中,除了新數(shù)據(jù)輸入外,存儲(chǔ)器中的所有已有數(shù)據(jù)(數(shù)量在10 000量級(jí),具體值與系統(tǒng)仿真步長(zhǎng)和雷達(dá)的脈沖重復(fù)周期有關(guān))都要依次向后挪移一個(gè)存儲(chǔ)單元。由此使得僅僅是單個(gè)目標(biāo)的回波的仿真就會(huì)消耗計(jì)算機(jī)的很多時(shí)間資源。
模型一效率低的主要原因是大量存儲(chǔ)器數(shù)據(jù)的高頻率的位移。分析后發(fā)現(xiàn),這種導(dǎo)致低效率的位移實(shí)際上是不必要的。對(duì)目標(biāo)回波的生成過(guò)程進(jìn)一步抽象后可知,發(fā)射脈沖的波形延遲可以用其發(fā)射后時(shí)間的延遲來(lái)替代,因而可以得到實(shí)現(xiàn)目標(biāo)回波仿真的模型二,如圖2所示。
圖2 回波仿真的模型二
比較圖1和圖2可以看到,圖2中用重復(fù)序列產(chǎn)生器(Repeating Sequence)取代了圖1中的脈沖產(chǎn)生器Pulse Generator,而且沒(méi)有了可變時(shí)間延遲器。在圖2中,不再直接產(chǎn)生發(fā)射脈沖(概念上,發(fā)射脈沖還是要產(chǎn)生的),而是代之以產(chǎn)生以發(fā)射脈沖為起點(diǎn)的時(shí)間;再?zèng)]有通過(guò)發(fā)射脈沖的延遲來(lái)產(chǎn)生目標(biāo)回波,而是直接用以發(fā)射脈沖為起點(diǎn)的時(shí)間與目標(biāo)回波延遲時(shí)間進(jìn)行比較,一旦達(dá)到目標(biāo)回波延遲時(shí)間即產(chǎn)生目標(biāo)回波。
理論分析和實(shí)際的仿真運(yùn)行測(cè)試都表明,在相同輸入的條件下,上述的模型一、模型二的輸出完全相同。明顯不同的是,模型二的仿真速度幾乎是模型一的10倍。這還只是針對(duì)單目標(biāo)的情況。在多目標(biāo)的情況下,仿真運(yùn)行測(cè)試表明,模型二的仿真速度優(yōu)勢(shì)更加突出:如果目標(biāo)數(shù)為N,則模型二的仿真速度幾乎是模型一的10×N倍。
這個(gè)例子說(shuō)明,提高模型抽象和實(shí)現(xiàn)的層次和水平對(duì)于提高仿真軟件的運(yùn)行速度可以具有非常顯著的作用。
在科學(xué)技術(shù)的發(fā)展歷史上,通過(guò)算法優(yōu)化提高運(yùn)行和處理速度的事例不勝枚舉。針對(duì)離散傅里葉變換DFT進(jìn)行快速計(jì)算的快速傅里葉變換FFT是最著名的一個(gè)例子。FFT的發(fā)明為DFT的廣泛應(yīng)用創(chuàng)造了良好的條件。
針對(duì)不同的具體問(wèn)題,算法優(yōu)化的具體方法可能千差萬(wàn)別,但還是有一些共同的規(guī)律可以摸索和遵循。例如,已有計(jì)算結(jié)果的重用(重復(fù)使用)、避免數(shù)據(jù)的不必要的移動(dòng)等。本文以在雷達(dá)信號(hào)級(jí)仿真中經(jīng)常會(huì)遇到的非相參脈沖滑窗積累(滑窗寬度設(shè)為M)的算法優(yōu)化為例來(lái)進(jìn)行說(shuō)明。
簡(jiǎn)而言之,非相參脈沖滑窗積累就是對(duì)于雷達(dá)接收機(jī)在連續(xù)M個(gè)脈沖重復(fù)周期中的視頻輸出數(shù)據(jù)按距離單元相加,其基本原理如表1所示。
表1中,L表示一個(gè)脈沖重復(fù)周期中的距離單元數(shù),當(dāng)前的脈沖重復(fù)周期編號(hào)為N+M-1,要與前面的編號(hào)直到N的各個(gè)脈沖重復(fù)周期(一共是M個(gè)脈沖重復(fù)周期)中的數(shù)據(jù)按距離單元相加。
表1 非相參脈沖滑窗積累原理示意表(按距離單元進(jìn)行M個(gè)脈沖重復(fù)周期的數(shù)據(jù)相加)
由表1所示的非相參脈沖滑窗積累原理可知,如果直接實(shí)施非相參脈沖滑窗積累,在每一個(gè)脈沖重復(fù)周期,對(duì)于每一個(gè)距離單元,M個(gè)數(shù)據(jù)相加,需要進(jìn)行M-1次加法。
進(jìn)一步分析可知,以距離單元K為例,在一個(gè)脈沖重復(fù)周期進(jìn)行相加的M個(gè)數(shù)據(jù)(相加結(jié)果記做SN+M-1,K)中,前M-1個(gè)數(shù)據(jù)的相加在上一個(gè)脈沖重復(fù)周期中已經(jīng)完成,僅需從上一個(gè)脈沖重復(fù)周期的積累數(shù)據(jù)(SN+M-2,K)中剔除(減去)最早的脈沖重復(fù)周期的數(shù)據(jù)DN-1,K即可得到;再加上本脈沖重復(fù)周期中的新數(shù)據(jù)DN+M-1,K即得到完整的SN+M-1,K。換句話(huà)說(shuō),對(duì)于滑窗寬度為M的非相參脈沖滑窗積累,在每一個(gè)脈沖重復(fù)周期,對(duì)于每一個(gè)距離單元,僅需進(jìn)行1次加法和1次減法(以下簡(jiǎn)稱(chēng)為1+1算法),而無(wú)須進(jìn)行M-1次加法。顯然,這種1+1算法的效率明顯高于要進(jìn)行M-1次加法的直接算法?;皩挾仍綄?1+1算法的效率提高越顯著。
以下給出一次完成一個(gè)脈沖重復(fù)周期中所有距離單元的非相參脈沖滑窗積累的1+1算法的Matlab程序。
程序中用到以下變量:
aIQinput:存儲(chǔ)當(dāng)前PRI(PRI為脈沖重復(fù)周期)輸入的正交雙通道復(fù)數(shù)數(shù)據(jù)的數(shù)組(行數(shù)組,數(shù)組元素對(duì)應(yīng)于距離單元,以下除I-Row外類(lèi)似);
aTempAbs:存儲(chǔ)當(dāng)前PRI的要進(jìn)行非相參積累的視頻數(shù)據(jù)的數(shù)組;
aIntegrationData:存儲(chǔ)當(dāng)前PRI的非相參積累結(jié)果數(shù)據(jù)的數(shù)組;
aStoreCD:存儲(chǔ)當(dāng)前滑窗中輸入視頻數(shù)據(jù)的數(shù)組;
I-Row:aStoreCD的行指針;
Width-SW:滑窗寬度M。
除初始化部分外,1+1算法的Matlab程序中僅需要以下四條中的后三條語(yǔ)句:
1)aTempAbs=abs(aIQinput);
2)I-Row=mod(I-Row,Width-SW)+1;
3)aIntegrationData=aIntegrationData+aTempAbs-aStoreCD(I-Row,:);
4)aStoreCD(I-Row,:)=aTempAbs;
第1)條語(yǔ)句的作用是由當(dāng)前PRI的正交雙通道復(fù)數(shù)數(shù)據(jù)aIQinput得到要進(jìn)行非相參積累的當(dāng)前PRI的視頻數(shù)據(jù)aTempAbs。顯然,該語(yǔ)句不屬于1+1算法。
第2)條語(yǔ)句的作用是行指針I(yè)-Row以滑窗寬度Width-SW取模后加1,以循環(huán)指向aStoreCD中最早的脈沖重復(fù)周期的輸入視頻數(shù)據(jù),該數(shù)據(jù)在本次積累中應(yīng)該剔除。
第3)條語(yǔ)句的作用是具體實(shí)施1+1算法,得到當(dāng)前PRI的非相參積累結(jié)果數(shù)據(jù)。
第4)條語(yǔ)句的作用是以當(dāng)前PRI的新數(shù)據(jù)更新(替換)存儲(chǔ)aStoreCD中當(dāng)前被剔除的舊數(shù)據(jù)。
在上述程序中,通過(guò)1+1算法,在最大的程度上做到了已有計(jì)算結(jié)果的重用;通過(guò)aStoreCD數(shù)組和I-Row指針的應(yīng)用,避免了數(shù)據(jù)的移動(dòng)。通過(guò)這樣的算法優(yōu)化,有效地提高了仿真軟件運(yùn)行的速度。
狹義地講,以空間換時(shí)間就是以計(jì)算機(jī)的存儲(chǔ)空間資源換取計(jì)算機(jī)的時(shí)間資源,提高計(jì)算機(jī)的運(yùn)行速度。以空間換時(shí)間的最簡(jiǎn)單也是非常有效的例子之一就是通過(guò)查表法來(lái)避免復(fù)雜計(jì)算,直接得到相關(guān)數(shù)據(jù)結(jié)果。下面以FFT為例進(jìn)行說(shuō)明和討論。
對(duì)于sin()等連續(xù)函數(shù)的數(shù)值計(jì)算[5],最容易想到的是采用泰勒級(jí)數(shù)。對(duì)于sin(x),有
取上式的前三項(xiàng)(5次多項(xiàng)式)來(lái)近似計(jì)算sin(x),得到
在|x|≤1的范圍內(nèi),P5(x)的誤差小于1/7!≈2×10-4。按照高效的多項(xiàng)式計(jì)算的秦九韶算法,計(jì)算一次P5(x),需要進(jìn)行5次加法和5次乘法。
除了泰勒級(jí)數(shù)外,對(duì)于sin()等連續(xù)函數(shù)的數(shù)值計(jì)算,用得更多的是精度更好、計(jì)算效率更高的切比雪夫插值法。對(duì)于sin(x),其切比雪夫插值法近似為
sin(x)≈-1.2 850 635×10-3x6+0.0 121 117x5-6.0 244 134×10-3x4-0.16 137 988x3-2.357 414×10-3x2+1.0 004 218x-1.32 648×10-5
在0≤x≤π的范圍內(nèi),上式的誤差小于1.5×10-5。
用秦九韶算法,按上式計(jì)算一次sin(x),需要6次加法和6次乘法。以下關(guān)于計(jì)算量的計(jì)算以采用切比雪夫插值法的秦九韶算法為準(zhǔn)。
一個(gè)復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算包括二個(gè)sin()的計(jì)算(一個(gè)sin()和一個(gè)cos()),每個(gè)sin()的計(jì)算需要6次加法和6次乘法,粗略認(rèn)為兩次實(shí)數(shù)乘法和加法分別與一次復(fù)數(shù)乘法和加法相當(dāng),則一個(gè)復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算需要6次復(fù)數(shù)乘法和6次復(fù)數(shù)加法。
眾所周知,對(duì)于N點(diǎn)(N為2的整數(shù)次冪)FFT,其復(fù)數(shù)乘法和加法的次數(shù)都是Nlog2N。關(guān)于復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算量可以有兩種不同的衡量方法。
第一種方法:FFT中的復(fù)數(shù)乘法實(shí)際就是輸入信號(hào)數(shù)據(jù)等與復(fù)指數(shù)冪數(shù)據(jù)的相乘。N點(diǎn)FFT中,Nlog2N次復(fù)數(shù)乘法要計(jì)算Nlog2N次復(fù)指數(shù)冪數(shù)據(jù),而計(jì)算Nlog2N次復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算量為6Nlog2N次復(fù)數(shù)乘法和加法,是FFT算法本身計(jì)算量的6倍。
第二種方法:N點(diǎn)FFT中需要用到的復(fù)指數(shù)冪數(shù)據(jù)僅為N個(gè)。這N個(gè)數(shù)據(jù)中,有的會(huì)多次用到。如果一個(gè)復(fù)指數(shù)冪數(shù)據(jù)計(jì)算后即存儲(chǔ)保留,在需要的時(shí)候再重用,則N點(diǎn)FFT中,復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算量為N×6次復(fù)數(shù)乘法和N×6次復(fù)數(shù)加法。換句話(huà)說(shuō),對(duì)于64點(diǎn)(log264=6)以下的FFT計(jì)算,復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算量超過(guò)了FFT算法本身的計(jì)算量。FFT的點(diǎn)數(shù)越少,復(fù)指數(shù)冪數(shù)據(jù)的計(jì)算量的比重越大。
當(dāng)FFT的點(diǎn)數(shù)N給定后,其所需要的N個(gè)復(fù)指數(shù)冪數(shù)據(jù)就是固定的了,可以在仿真程序外進(jìn)行計(jì)算(線(xiàn)下計(jì)算),然后存入一個(gè)小數(shù)據(jù)表中。仿真軟件運(yùn)行過(guò)程中,在需要的時(shí)候通過(guò)查表讀入復(fù)指數(shù)冪數(shù)據(jù),相應(yīng)的時(shí)間消耗可以忽略不計(jì)。上面的討論表明,相對(duì)于線(xiàn)上計(jì)算,采用查表的方法獲取復(fù)指數(shù)冪數(shù)據(jù),對(duì)第一種方法,無(wú)論FFT的點(diǎn)數(shù)多少,計(jì)算速度可以提高6倍;對(duì)第二種方法,對(duì)于64點(diǎn)的FFT,計(jì)算速度可以提高1倍;對(duì)于32點(diǎn)的FFT,計(jì)算速度可以提高1.2倍;對(duì)于16點(diǎn)的FFT,計(jì)算速度可以提高1.5倍。
信號(hào)級(jí)的雷達(dá)/電子干擾攻防對(duì)抗仿真軟件在目前的計(jì)算機(jī)(指PC機(jī),以下同)上要提高運(yùn)行速度,一條大有潛力的技術(shù)途徑是提高數(shù)據(jù)存取的速度。
信號(hào)級(jí)的雷達(dá)/電子干擾攻防對(duì)抗仿真軟件在目前的計(jì)算機(jī)上運(yùn)行時(shí),人們感覺(jué)運(yùn)行緩慢,這是一種整體感覺(jué)。事實(shí)上,真正緩慢的、或者說(shuō)成為仿真軟件整體速度瓶頸的是計(jì)算機(jī)中的存儲(chǔ)器(指內(nèi)存,以下同)及其相關(guān)部件。因?yàn)楹芫靡詠?lái),CPU的運(yùn)行速度已經(jīng)達(dá)到了存儲(chǔ)器存取速度的100倍以上[6]。容易想到,如果能夠提高存儲(chǔ)器存取速度使其達(dá)到CPU的運(yùn)行速度,僅此一條就可以大幅度提高仿真軟件的運(yùn)行速度,使信號(hào)級(jí)的雷達(dá)/電子干擾攻防對(duì)抗仿真軟件的運(yùn)行速度達(dá)到實(shí)時(shí)。但令人遺憾的是,全面、大幅度提高存儲(chǔ)器的速度在目前以及可以預(yù)見(jiàn)到的將來(lái)都是做不到的,只能采取Cache等折中的辦法。
Cache被稱(chēng)作緩沖存儲(chǔ)器,其特點(diǎn)是速度快(比內(nèi)存快10倍以上)但容量小。因其容量小,產(chǎn)生了命中率的概念。Cache的命中率定義為CPU需要的信息已經(jīng)存在于Cache中的比率。顯然,只有當(dāng)CPU需要的信息已經(jīng)存在于Cache中時(shí),才能發(fā)揮Cache速度快的優(yōu)勢(shì),真正提高仿真軟件的運(yùn)行速度。因此,提高Cache的命中率對(duì)于提高仿真軟件的運(yùn)行速度可以起到直接的、顯著的作用。
Cache命中率的提高涉及多方面的因素,但數(shù)據(jù)/程序是否存入Cache在根本上遵循所謂的局部性原理[6]:在訪問(wèn)完一個(gè)內(nèi)存區(qū)域后,程序會(huì)在不久的將來(lái)(時(shí)間局部性)訪問(wèn)鄰近的區(qū)域(空間局部性)。
Cache的局部性原理可以在不同的層次、從不同的角度加以利用,以提高Cache的命中率。這里以Matlab中矩陣數(shù)據(jù)的存儲(chǔ)和應(yīng)用為例,來(lái)闡述和討論一些典型問(wèn)題。
眾所周知,在Matlab的m語(yǔ)言中,矩陣數(shù)據(jù)是按列存儲(chǔ)的。這就意味著,如果在組織矩陣數(shù)據(jù)的時(shí)候,把相關(guān)的數(shù)據(jù)組織到相同的列中去,在處理的時(shí)候也按列進(jìn)行處理,將獲得(相對(duì)于按行組織數(shù)據(jù)和按行處理)更快的處理速度。以下舉例說(shuō)明[7]。
問(wèn)題:對(duì)于512×512的矩陣A,生成一個(gè)矩陣B,其元素按下式取值
對(duì)于本問(wèn)題,可以用多種方法來(lái)求解。這里采用兩種方法,分別對(duì)應(yīng)于函數(shù)ForLoopCompare1(x)和ForLoopCompare2(x)。
方法一:
functiony=ForLoopCompare1(x)
y(512,512)=0;
tic;
fori=2∶511
forj=2∶511
fork1=-1∶1
fork2=-1∶1
y(i,j)=y(i,j)+x(i+k1,j+k2)/9;
end
end
end
end
toc
方法二:
functiony=ForLoopCompare2(x)
y(512,512)=0;
tic;
fork2=-1∶1
fork1=-1∶1
forj=2∶511
fori=2∶511
y(i,j)=y(i,j)+x(i+k1,j+k2)/9;
end
end
end
end
toc
下面,在相同的環(huán)境和相同的輸入條件下比較兩種方法的運(yùn)行效率。
X=rand(512);
Y1=ForLoopCompare1(x);Elapsed time is 0.330648 seconds.
Y2=ForLoopCompare2(x);Elapsed time is 0.057423 seconds.
上述例子表明,對(duì)于同一個(gè)問(wèn)題,Cache利用的差異可以導(dǎo)致接近6倍的速度差異。
在方法一的函數(shù)ForLoopCompare1(x)中,次數(shù)多的循環(huán)i、j放在外層,而且是按行的順序從矩陣A(即x)中讀取數(shù)據(jù)。按這樣的方法,Cache基本不能發(fā)揮作用:對(duì)于每一個(gè)i、j和k1,k2=-1時(shí)取出的數(shù)據(jù)為x(i+k1,j-1),下一個(gè)要取出的數(shù)據(jù)為x(i+k1,j),再下一個(gè)要取出的數(shù)據(jù)是x(i+k1,j+1),各個(gè)數(shù)據(jù)在內(nèi)存中的存儲(chǔ)地址相差512×8字節(jié)(數(shù)據(jù)按double類(lèi)型存儲(chǔ)),第一個(gè)數(shù)據(jù)與第三個(gè)數(shù)據(jù)在內(nèi)存中的存儲(chǔ)地址相差8k字節(jié),考慮到L1Cache和L2Cache的容量非常有限,這些要相繼取出的數(shù)據(jù)是不可能同時(shí)被放入Cache中的。也就是說(shuō),這些數(shù)據(jù)只能從內(nèi)存中讀取,從而導(dǎo)致程序的運(yùn)行速度低下。
在方法二的函數(shù)ForLoopCompare2(x)中,次數(shù)多的循環(huán)i、j放在內(nèi)層,而且是按列的順序從矩陣A(即x)中讀取數(shù)據(jù)。按這樣的方法,Cache的作用可以得到很好的發(fā)揮:對(duì)于每一個(gè)k2、k1和j,在i從2循環(huán)到511的過(guò)程中需要相繼取出的509個(gè)數(shù)據(jù)在內(nèi)存中是連續(xù)存放的;不僅如此,在k2、k1或j變化前后需要相繼取出的數(shù)據(jù)在內(nèi)存中也基本上是連續(xù)存放的,這就保證了Cache的極高的命中率,從而使得程序的運(yùn)行速度得到很大的提高。
對(duì)于雷達(dá)/電子干擾攻防對(duì)抗信號(hào)級(jí)仿真,提高仿真軟件的運(yùn)行速度具有非常重要的意義。基于技術(shù)分析和多年的實(shí)踐經(jīng)驗(yàn),我們認(rèn)為,在當(dāng)今的技術(shù)條件下,針對(duì)仿真軟件本身挖掘潛力,對(duì)于提高速度仍然是大有可為的。以我們的親身經(jīng)歷為例,我們研制了一個(gè)信號(hào)級(jí)的艦載多功能相控陣?yán)走_(dá)仿真軟件,最初的運(yùn)行速度為1∶80,采取多種方法改進(jìn)后,在原有功能不變,技術(shù)性能還有所提高的情況下,在相同的硬件環(huán)境中,使該仿真軟件的運(yùn)行速度提高近20倍,達(dá)到1∶4左右。所采取的方法就是上述的模型抽象、算法優(yōu)化、以數(shù)據(jù)表格替換復(fù)雜計(jì)算、提高Cache命中率等。我們希望并相信,經(jīng)過(guò)更加深入的艱苦努力,在國(guó)內(nèi)同行的支持和共同參與下,雷達(dá)/電子干擾攻防對(duì)抗信號(hào)級(jí)仿真以及其他領(lǐng)域中具有計(jì)算量大和計(jì)算頻率高特點(diǎn)的信號(hào)級(jí)仿真,在運(yùn)行速度方面,能夠有進(jìn)一步的顯著提高,從而使得信號(hào)級(jí)仿真在應(yīng)用廣度上得到大幅度的擴(kuò)展,包括應(yīng)用于系統(tǒng)層面、體系層面上的仿真,應(yīng)用于有硬件參與的研究,如模擬訓(xùn)練等。