胡鐵喬,趙小龍,陳 明
(1.中國(guó)民航大學(xué)智能信號(hào)與圖像處理重點(diǎn)實(shí)驗(yàn)室,天津 300300;2.北京一樸科技有限公司,北京 100080)
北斗衛(wèi)星信號(hào)仿真器的GPU速度優(yōu)化
胡鐵喬1,趙小龍1,陳明2
(1.中國(guó)民航大學(xué)智能信號(hào)與圖像處理重點(diǎn)實(shí)驗(yàn)室,天津300300;2.北京一樸科技有限公司,北京100080)
針對(duì)衛(wèi)星信號(hào)軟件仿真器耗時(shí)長(zhǎng)的問題,提出基于圖形處理器(GPU)的速度優(yōu)化方法并介紹了現(xiàn)有衛(wèi)星信號(hào)仿真器的特點(diǎn)。在分析仿真器結(jié)構(gòu)的基礎(chǔ)上給出了結(jié)構(gòu)調(diào)整方案,介紹了不同GPU存儲(chǔ)器的特點(diǎn)及優(yōu)化方法。基于計(jì)算統(tǒng)一設(shè)備架構(gòu)(CUDA)實(shí)現(xiàn)了北斗衛(wèi)星信號(hào)仿真器的數(shù)據(jù)實(shí)時(shí)生成。對(duì)速度優(yōu)化后的仿真器進(jìn)行了速度測(cè)試和性能驗(yàn)證。介紹了仿真器程序優(yōu)化過(guò)程,優(yōu)化后的仿真器大大提高了信號(hào)生成速度和科研效率,對(duì)程序優(yōu)化具有一定的借鑒意義。
仿真器;圖形處理器;計(jì)算統(tǒng)一設(shè)備架構(gòu)
除了美國(guó)的GPS導(dǎo)航系統(tǒng)和歐洲的伽利略導(dǎo)航系統(tǒng),中國(guó)也發(fā)展了自己的導(dǎo)航系統(tǒng),即北斗衛(wèi)星導(dǎo)航系統(tǒng)(BeiDou Navigation Satellite System)[1]。衛(wèi)星信號(hào)仿真器在全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)接收機(jī)的開發(fā)過(guò)程中起著重要作用。相對(duì)于利用真實(shí)衛(wèi)星信號(hào),軟件模擬器提供可控場(chǎng)景,提高接收機(jī)的研發(fā)效率[2-3]?;谟布姆抡嫫飨鄬?duì)復(fù)雜,技術(shù)難度比較大[3],而基于PC平臺(tái)的軟件模擬器則具有結(jié)構(gòu)靈活、開放、低成本等優(yōu)點(diǎn)[4-6]。但由于軟件仿真器在生成中頻數(shù)據(jù)的過(guò)程中需進(jìn)行大量數(shù)據(jù)計(jì)算,在CPU上進(jìn)行串行計(jì)算需消耗的時(shí)間比較長(zhǎng),不能產(chǎn)生實(shí)時(shí)信號(hào),因此計(jì)算速度成為影響仿真器效率的關(guān)鍵因素。
在利用軟件仿真器進(jìn)行場(chǎng)景仿真時(shí),通用的做法是先將生成的數(shù)據(jù)進(jìn)行存盤,使用時(shí)再去讀取文件。GPU是一種高度并行化的眾核處理器,可以利用大量處理單元進(jìn)行并行計(jì)算,CUDA是由NVIDIA在2006年提出的利用CPU實(shí)現(xiàn)通用計(jì)算的編程模型,研發(fā)人員可以使用熟悉的C語(yǔ)言編寫CUDA并行程序[7],為仿真器的速度優(yōu)化提供了便利,也為仿真器實(shí)時(shí)生成中頻數(shù)據(jù)提供了可能。使用實(shí)時(shí)化仿真器生成信號(hào)并通過(guò)硬件回放卡實(shí)時(shí)回放信號(hào),完全可以達(dá)到與硬件仿真器同樣的效果,同時(shí)具有容易擴(kuò)充、方便調(diào)整的優(yōu)點(diǎn)。實(shí)時(shí)化仿真器可大大縮短信號(hào)生成時(shí)間,顯著提高科研效率。
1.1北斗衛(wèi)星信號(hào)結(jié)構(gòu)
B1、B2信號(hào)由I、Q兩個(gè)支路組成,信號(hào)由“測(cè)距碼+導(dǎo)航電文”正交調(diào)制在載波上。B1、B2信號(hào)表達(dá)式分別為
其中:上標(biāo)j表示衛(wèi)星編號(hào);下標(biāo)B1I表示B1頻點(diǎn)I支路,B1Q表示B1頻點(diǎn)Q支路,B2I表示B2頻點(diǎn)I支路,B2Q表示B2頻點(diǎn)Q支路;A表示振幅;C表示測(cè)距碼;D表示調(diào)制在測(cè)距碼上的數(shù)據(jù)碼;f1表示B1信號(hào)載頻;f2表示B2信號(hào)載頻。
1.2總體功能
仿真器功能模塊包括:衛(wèi)星位置和用戶位置計(jì)算模塊、偽隨機(jī)碼生成模塊、導(dǎo)航電文生成模塊、隨機(jī)噪聲生成模塊、誤差仿真模塊和信號(hào)生成(調(diào)制)模塊。信號(hào)仿真器總體流程如圖1所示。
圖1 衛(wèi)星信號(hào)仿真器流程圖Fig1 Simulator flow chart
配置參數(shù)由配置文件獲取,配置文件中記錄了配置的信號(hào)頻率(B1頻點(diǎn)、B2頻點(diǎn))、中頻頻率、采樣率、載噪比、前端帶寬、量化位數(shù)、是否正交輸出、是否仿真誤差、軌跡文件路徑等參數(shù)。程序需要從文件中讀取用戶設(shè)置的起始仿真時(shí)間、仿真時(shí)長(zhǎng)、用戶速度、用戶軌跡類型等參數(shù)。為了加快仿真速度,用戶位置提前計(jì)算好,使用時(shí)再進(jìn)行查表。仿真器每次仿真0.1 s的數(shù)據(jù),在0.1 s時(shí)間內(nèi)判斷一次可見星,每顆可見星計(jì)算一次碼延時(shí)(Tp)和載波相位延時(shí)(Tc)、進(jìn)行一次信號(hào)調(diào)制(信號(hào)生成),添加隨機(jī)噪聲并進(jìn)行一次量化,最后寫入文件。如果設(shè)置的仿真時(shí)長(zhǎng)全部完成,則結(jié)束程序[4-6]。
1.3仿真器結(jié)構(gòu)調(diào)整
信號(hào)仿真器的速度優(yōu)化瓶頸是信號(hào)生成部分,由于計(jì)算量較大,因此該部分是優(yōu)化的重點(diǎn)。信號(hào)生成部分是一個(gè)循環(huán)結(jié)構(gòu),該部分的偽代碼為
為適應(yīng)并行化計(jì)算,程序結(jié)構(gòu)需適當(dāng)調(diào)整,并且為了與信號(hào)回放卡連接,信號(hào)生成部分的速度要足夠快。因此為盡量降低該部分的工作量,將判斷可見星的計(jì)算放在信號(hào)生成模塊之外,使用時(shí)進(jìn)行查表。同時(shí),衛(wèi)星信號(hào)的碼延時(shí)和載波相位延時(shí)計(jì)算(Tp、Tc真值的生成及插值計(jì)算)比較耗時(shí),因此該部分也調(diào)整到了信號(hào)生成模塊之外(提前生成真值)。
2.1CUDA編程模型
在CUDA編程模型中,PC機(jī)的CPU稱為主機(jī)(Host),GPU稱為設(shè)備(Device),二者協(xié)同工作。在一個(gè)完整的程序中,CPU主要處理串行計(jì)算和邏輯性較強(qiáng)的事務(wù),而GPU則負(fù)責(zé)執(zhí)行高度線程化的并行處理任務(wù)[9]。在GPU上運(yùn)行的CUDA并行計(jì)算函數(shù)稱為內(nèi)核(kernel),一個(gè)完整的CUDA程序由主機(jī)端的串行處理函數(shù)和一系列設(shè)備端的內(nèi)核并行處理函數(shù)共同組成,如圖2所示。
在CUDA架構(gòu)下,線程(Thread)是GPU執(zhí)行的最小單位,若干個(gè)線程組成線程塊(Block),若干個(gè)線程塊構(gòu)成一個(gè)網(wǎng)格(Grid),一個(gè)網(wǎng)格對(duì)應(yīng)一個(gè)內(nèi)核函數(shù)。
圖2 CUDA編程模型Fig2 CUDA programming model
2.2仿真器的GPU優(yōu)化
2.2.1存儲(chǔ)器優(yōu)化
CUDA程序在運(yùn)行前需將數(shù)據(jù)從主機(jī)端復(fù)制到顯存中,計(jì)算結(jié)束后將數(shù)據(jù)從顯存復(fù)制回內(nèi)存。全局存儲(chǔ)器位于顯卡的顯存中,CPU和GPU都能對(duì)其進(jìn)行讀寫訪問。同時(shí),所有線程都能讀寫其任意位置,一般用于存儲(chǔ)大型的公用數(shù)據(jù),如仿真器中用到的時(shí)間數(shù)組,以62 MHz采樣率為例,每次計(jì)算0.1 s,則時(shí)間數(shù)組有6.2 M個(gè)double型元素,共占用49.6 M存儲(chǔ)空間,故該變量只能位于全局存儲(chǔ)器。此外,生成調(diào)制信號(hào)用到的正弦和余弦表、星歷參數(shù)等數(shù)據(jù)量較大的參數(shù)都位于全局存儲(chǔ)器。在計(jì)算能力3.5的顯卡上,全局存儲(chǔ)器具有緩存,如果遵守全局存儲(chǔ)器的對(duì)齊要求,就可避免分區(qū)沖突,有效利用帶寬,否則會(huì)導(dǎo)致較低的訪問效率[7]。
常量存儲(chǔ)器(constant memory)顧名思義就是存儲(chǔ)常數(shù)的存儲(chǔ)器,是另一種具有緩存的存儲(chǔ)器,GPU生成信號(hào)過(guò)程中用到的參數(shù)如采樣率、中頻頻率等可以存儲(chǔ)在常量存儲(chǔ)器。
使用頁(yè)鎖定存儲(chǔ)器(pinned memory)可以明顯提高主機(jī)內(nèi)存和設(shè)備全局存儲(chǔ)器的數(shù)據(jù)傳輸速度。如生成的衛(wèi)星信號(hào)位于全局存儲(chǔ)器,同時(shí)在內(nèi)存上使用cudaHostAlloc(void**pHost,size_t size,unsigned int flags)函數(shù)分配一段頁(yè)鎖定存儲(chǔ)器,并且flags參數(shù)配置為cudaHostAllocMapped,即在內(nèi)存上分配的空間可以映射到顯存。使用cudaHostGetDevicePointer(void** pDevice,void*pHost,unsigned int flags)函數(shù)可以獲得該內(nèi)存空間映射到顯存的地址指針,這就意味著映射的頁(yè)鎖定存儲(chǔ)器有兩個(gè)地址指針,一個(gè)位于內(nèi)存,另一個(gè)位于顯存。這樣CPU和GPU都可以訪問該空間,并且沒有顯式的數(shù)據(jù)傳輸,速度較一般的數(shù)據(jù)拷貝方式要快[11-12]。
此外,共享存儲(chǔ)器(shared memory)的使用可以顯著提高數(shù)據(jù)訪問速度。Shared memory位于GPU片內(nèi),訪問速度僅次于寄存器,同一個(gè)塊內(nèi)的線程都可以訪問,是Block內(nèi)線程通信的一種理想方式,一般用于存儲(chǔ)Block線程公用數(shù)據(jù)。在沒有存儲(chǔ)體沖突(bank conflict)的情況下其速度可達(dá)到寄存器的速度[7]。Shared memory是以bank為單位組織的,在32位模式下bank以4字節(jié)為單位組織,相鄰的4字節(jié)位于不同的bank;在64位模式下,bank以8字節(jié)為單位組織,相鄰的8字節(jié)位于不同的bank。在32位模式下,以32×32的float型數(shù)組為例介紹共享存儲(chǔ)器的訪問特點(diǎn),如圖3所示。
圖3 32×32 float型數(shù)組Fig3 32×32 float array
1)1個(gè) warp內(nèi)的 32個(gè)線程同時(shí)訪問 32個(gè)bank,其特點(diǎn)是每次只能響應(yīng)1個(gè)線程的訪問請(qǐng)求,因此32個(gè)bank同時(shí)響應(yīng)32個(gè)線程,沒有訪問沖突;
2)32個(gè)線程同時(shí)訪問共享存儲(chǔ)器中的1個(gè)bank,由于CUDA的廣播機(jī)制,該bank中的數(shù)據(jù)會(huì)一次廣播給warp中的所有線程,因此也沒有訪問沖突;
3)當(dāng)所有warp中的所有線程同時(shí)訪問同一列時(shí),由于同一列屬于1個(gè)bank,而1個(gè)bank每次只能相應(yīng)1個(gè)線程的訪問請(qǐng)求,因此有沖突。
2.2.2部分算法的改進(jìn)
為了適應(yīng)并行計(jì)算,在不影響仿真器性能的條件下,部分算法進(jìn)行了改進(jìn)。以Tp、Tc的插值算法為例,原來(lái)使用了三階內(nèi)插算法,計(jì)算相對(duì)耗時(shí)且不利于并行計(jì)算,現(xiàn)改為線性內(nèi)插算法,使用y=kx+b式近似推出所有采樣點(diǎn)的Tp、Tc值。信號(hào)生成的周期是0.1 s,Tp、Tc真值的生成周期是1 ms,因此在1個(gè)信號(hào)生成周期內(nèi)有100個(gè)真值,每個(gè)塊處理fs/100個(gè)點(diǎn)。
以tp[100]表示提前生成的真值,因?yàn)橛?00個(gè)真值,因此在GPU上需要分配100個(gè)Block,每個(gè)Block的大小根據(jù)需要分配,如可分配128個(gè)線程。每個(gè)Block計(jì)算1個(gè)斜率kbid,下標(biāo)bid代表每個(gè)Block的ID。在CPU上串行執(zhí)行的線性內(nèi)插部分代碼為
該并行計(jì)算模型如圖4所示。
圖4 100個(gè)Block并行運(yùn)行示意圖Fig.4 100 Blocks run in parallel
這樣在GPU上就有100個(gè)Blcok同時(shí)執(zhí)行,計(jì)算速度大大加快。
2.2.3加噪和量化函數(shù)的優(yōu)化
加噪函數(shù)(AddNoise())僅僅做了一次加法運(yùn)算,并且CPU生成的隨機(jī)噪聲在信號(hào)生成模塊之前已經(jīng)復(fù)制到顯存,對(duì)全局存儲(chǔ)器的訪問滿足對(duì)齊要求,因此在GPU上完成加噪功能速度很快。由于量化函數(shù)(Quantization())在計(jì)算過(guò)程中需使用所有數(shù)據(jù)的和,故在量化函數(shù)中使用了并行規(guī)約求和思想[10],并行規(guī)約算法適合在GPU上并行執(zhí)行。加噪函數(shù)和量化函數(shù)分別在CPU和GPU上的運(yùn)行耗時(shí)對(duì)比如表1所示。
表1 兩個(gè)函數(shù)并行化前后速度對(duì)比Tab.1 Speed contrast before and after parallelization
其他優(yōu)化手段包括指令優(yōu)化等,如求模運(yùn)算每次需要32個(gè)時(shí)鐘周期,而改為等價(jià)的乘法指令則只需要4個(gè)時(shí)鐘周期[9]。數(shù)據(jù)的存儲(chǔ)精度對(duì)速度同樣會(huì)有較大的影響,由于仿真器量化后的存儲(chǔ)類型是char型,故在不影響精度的情況下,可將生成信號(hào)的類型由double型改為float型,這樣精度沒有損失,但卻增加了運(yùn)算吞吐量,因此運(yùn)行速度也會(huì)加快。
對(duì)仿真器進(jìn)行優(yōu)化的主要目的是提高信號(hào)生成速度,同時(shí)又不損失性能,以下將分別驗(yàn)證。
3.1速度測(cè)試
信號(hào)生成部分的調(diào)制過(guò)程與在CPU上計(jì)算沒有差別,不同的是在CPU上是單線程計(jì)算,而在GPU上同時(shí)有大量線程計(jì)算。由于對(duì)存儲(chǔ)器的訪問進(jìn)行了細(xì)致的優(yōu)化以及對(duì)仿真器結(jié)構(gòu)的調(diào)整,因此信號(hào)生成速度大大加快。測(cè)試時(shí)長(zhǎng)設(shè)置為10 s、50 s、100 s,分別使用優(yōu)化前的CPU版本和優(yōu)化后的GPU版本進(jìn)行測(cè)試。采樣率為80 MHz,中頻頻率為29.52 MHz,測(cè)試用的PC平臺(tái)為HP Z820工作站,運(yùn)行程序的顯卡為GTX TITIAN Black高性能游戲顯卡,該顯卡核心為英偉達(dá)GK110,具有2 880個(gè)流處理單元,核心頻率為889 MHz,板載6 G容量的GDDR5顯存,顯存位寬384 Bit,采用PCI-E 3.0接口,計(jì)算能力為3.5。測(cè)試結(jié)果如表2所示。
表2 優(yōu)化前后速度測(cè)試對(duì)比Tab.2 Speed contrast before and after parallelization
由表2可知,仿真器速度已達(dá)到實(shí)時(shí)要求,加速比達(dá)到60左右,并有一定冗余量,這為連接硬件回放卡奠定了基礎(chǔ)。
3.2性能測(cè)試
用軟件接收機(jī)(SDR)對(duì)仿真器生成的數(shù)字中頻文件進(jìn)行驗(yàn)證。測(cè)試使用北京一樸科技有限公司的GNSS仿真驗(yàn)證軟件,該軟件由GPS-L1及北斗B1、B2、B3頻點(diǎn)的仿真和驗(yàn)證功能部分組成。
用實(shí)時(shí)化后的仿真器生成數(shù)字中頻數(shù)據(jù)文件,測(cè)試頻點(diǎn)為BD2-B3頻點(diǎn),初始WGS84坐標(biāo)為(40,120,100),初始ENU速度為(3,4,0),載噪比設(shè)置為43。
在GNSS仿真驗(yàn)證軟件菜單欄選擇“系統(tǒng)類別”中的“接收機(jī)”選項(xiàng),再點(diǎn)擊“參數(shù)設(shè)置”配置接收機(jī)參數(shù),本次測(cè)試的參數(shù)配置如圖5所示。
圖5 參數(shù)設(shè)置Fig.5 Parameter setting
點(diǎn)擊菜單欄“運(yùn)行”后,GNSS仿真驗(yàn)證軟件運(yùn)行界面如圖6所示。軟件主界面分星空?qǐng)D、位置信息、圖表信息、通道信息4部分,仿真器位置及速度在位置信息部分會(huì)顯示。由圖6可看出位置及速度解算均正確,證明仿真器經(jīng)CUDA速度優(yōu)化后,性能沒有損失。
圖6 軟件接收機(jī)Fig.6 GNSS SDR
針對(duì)基于CPU的衛(wèi)星信號(hào)仿真器生成信號(hào)速度慢的缺點(diǎn),基于GPU利用CUDA架構(gòu)對(duì)仿真器進(jìn)行優(yōu)化,使其速度大大提高,滿足實(shí)時(shí)生成信號(hào)的要求,為連接回放卡實(shí)時(shí)回放信號(hào)提供了基礎(chǔ)。經(jīng)接收機(jī)驗(yàn)證,沒有性能損失。后續(xù)研究將通過(guò)進(jìn)一步提高GPU對(duì)資源的利用率來(lái)提高計(jì)算速度,同時(shí)研究利用GPU實(shí)時(shí)生成多天線信號(hào)。
[1]北斗衛(wèi)星導(dǎo)航系統(tǒng)網(wǎng)站.北斗衛(wèi)星導(dǎo)航系統(tǒng)簡(jiǎn)介[EB/OL].(2015-05-02)[2015-09-02].http://www.beidou.gov.cn.
[2]王帥.GNSS多頻段衛(wèi)星信號(hào)模擬器關(guān)鍵技術(shù)研究及其實(shí)現(xiàn)[D].桂林:桂林電子科技大學(xué),2014.
[3]王軍.GPS衛(wèi)星信號(hào)模擬器的硬件實(shí)現(xiàn)[D].西安:西安理工大學(xué),2011.
[4]傅金梅.GNSS中頻衛(wèi)星信號(hào)的仿真研究 [D].西安:西安電子科技大學(xué),2014.
[5]熊智華.GNSS中頻衛(wèi)星信號(hào)的仿真研究 [D].南京:南京理工大學(xué),2012.
[6]侯博,謝杰,范志良,等.多模衛(wèi)星信號(hào)模擬器設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2012,20(1):170-172.
[7]NVIDIA.CUDACProgrammingGuidv7.0[EB/OL].(2015-03-05)[2015-08-30].http://www.signal-pro.org.cn/CN/column/column106.shtml.
[8]王顥.GNSS衛(wèi)星信號(hào)模擬器的軟件設(shè)計(jì)與實(shí)現(xiàn) [D].西安:西安電子科技大學(xué),2013.
[9]劉金碩,鄧娟,周崢,等.基于CUDA的并行程序設(shè)計(jì)[M].北京:科學(xué)出版社,2014:92-108.
[10]MARK HARRIES.Optimizing Parallel Reduction in CUDA[EB/OL].(2015-03-05)[2015-09-02].http://docs.nvidia.com/cuda/samples/6_ Advanced/redu-ction/doc/reduction.pdf.
[11]NVIDIA.CUDA RunTime API v7.0[EB/OL].(2015-03-05)[2015-08-31].http://docs.nvidia.com/cuda/cuda-runtime-api/index.html.
[12]NVIDIA.CUDACBestPracticeGuidev7.0[EB/OL].(2015-03-05).[2015-09-02].http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/.
(責(zé)任編輯:黨亞茹)
Speed optimization of Beidou satellite signal simulator based on GPU
HU Tieqiao1,ZHAO Xiaolong1,CHEN Ming2
(1.Intelligent Signal and Image Processing Key Lab of Tianjin,CAUC,Tianjin 300300,China;2.Beijing YIPU Technology Co.,Ltd,Beijing 100080,China)
The existing Beidou satellite signal software simulator is time-consuming,a method of program performance optimization based on GPU(graphic processing unit)is proposed.Introducing the features of existing satellite signal simulator,the structure adjustment plan is given after analyzing the simulator structure.Characteristics and optimization methods of different GPU memory is introduced and the real-time signal generator based on CUDA(compute unified device architecture)is realized.The performance and speed of optimized simulator are tested and verified with detailed optimizing process.The optimized simulator speeds up the signal generation and improves the efficiency of science research.The current method has a certain referencial significance on program optimization.
simulator;graphics processing unit;unified compute device architecture
TN96;V241.52
A
1674-5590(2016)03-0033-05
2015-09-06;
2015-10-16
國(guó)家自然科學(xué)基金項(xiàng)目(61271404,61471363);中央高?;究蒲袠I(yè)務(wù)費(fèi)專項(xiàng)(3122014D008)
胡鐵喬(1970—),男,河南洛陽(yáng)人,副教授,碩士,研究方向?yàn)樽赃m應(yīng)信號(hào)處理、陣列信號(hào)處理、硬件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).