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