陳永強(qiáng),馬 宏,焦義文,劉燕都
(航天工程大學(xué)電子與光學(xué)工程系 北京 101416)
甚長(zhǎng)基線干涉測(cè)量VLBI(Very Long Baseline Interferometry)技術(shù)利用孔徑綜合思想,將分布在各地的觀測(cè)天線等效成為一個(gè)天線,具有極高的測(cè)角精度和空間分辨率,能夠?yàn)榭臻g目標(biāo)的觀測(cè)提供高精度橫向信息。目前,我國(guó)已建成中國(guó)科學(xué)院VLBI網(wǎng)、國(guó)家授時(shí)中心VGOS VLBI全球觀測(cè)系統(tǒng)(VLBI Global Observation System)多站觀測(cè)系統(tǒng),以及我國(guó)深空測(cè)控網(wǎng)等多個(gè)重要的VLBI觀測(cè)網(wǎng)絡(luò),這些網(wǎng)絡(luò)將在基于VLBI的時(shí)空框架的建立和維持、地球自傳參數(shù)測(cè)量、深空導(dǎo)航以及大地測(cè)量等領(lǐng)域扮演越來越重要的角色[1-3]。完整的VLBI觀測(cè)網(wǎng)絡(luò)由觀測(cè)站和相關(guān)處理中心兩部分構(gòu)成,VLBI數(shù)字基帶轉(zhuǎn)換器DBBC(Digital Baseband Converter)作為觀測(cè)站數(shù)據(jù)采集、記錄和傳輸?shù)暮诵脑O(shè)備,在我國(guó)深空探測(cè)及國(guó)際VLBI聯(lián)測(cè)中發(fā)揮了重要作用。
為了實(shí)現(xiàn)聯(lián)合觀測(cè)的數(shù)據(jù)交互,VLBI研究機(jī)構(gòu)在21世紀(jì)初為VLBI系帶轉(zhuǎn)換器數(shù)據(jù)記錄系統(tǒng)設(shè)計(jì)了VLBI標(biāo)準(zhǔn)接口VSI(VLBI Standard Interface)規(guī)范[4],該標(biāo)準(zhǔn)是上一代干涉測(cè)量系統(tǒng)基帶轉(zhuǎn)換器實(shí)信號(hào)數(shù)據(jù)接口和軟件控制的指定標(biāo)準(zhǔn)格式,并作為國(guó)際VLBI聯(lián)合觀測(cè)的主要數(shù)據(jù)交換格式一直沿用至今。然而,VSI規(guī)范卻未將VLBI數(shù)據(jù)傳輸格式納入考慮范圍[5]。為了解決數(shù)據(jù)傳輸問題,基于標(biāo)準(zhǔn)RTP/RTCP協(xié)議的e-VLBI標(biāo)準(zhǔn)被開發(fā)出來,即VSI-E,該標(biāo)準(zhǔn)功能全面,但由于其協(xié)議過于復(fù)雜,導(dǎo)致難以得到廣泛應(yīng)用[6]。
近年來,隨著通信技術(shù)和網(wǎng)絡(luò)技術(shù)的快速發(fā)展,許多研究機(jī)構(gòu)研制了新一代VLBI數(shù)據(jù)基帶轉(zhuǎn)換系統(tǒng),由于各機(jī)構(gòu)產(chǎn)品標(biāo)準(zhǔn)不一,導(dǎo)致國(guó)際VLBI聯(lián)合觀測(cè)數(shù)據(jù)交換需要進(jìn)行大量的數(shù)據(jù)格式轉(zhuǎn)換。為了解決此問題,2008年,國(guó)際VLBI研討會(huì)決定開發(fā)VLBI接口規(guī)范VDIF(VLBI Data Interchange Format)[7]。與VSI-E格式相比,VDIF格式更加簡(jiǎn)化,數(shù)據(jù)格式設(shè)計(jì)完全獨(dú)立于傳輸協(xié)議,這使得該標(biāo)準(zhǔn)適合于各種網(wǎng)絡(luò)傳輸協(xié)議和磁盤文件傳輸。近年來,隨著VDIF標(biāo)準(zhǔn)的不斷更新[5,8],大量新一代基帶轉(zhuǎn)換系統(tǒng),包括歐洲D(zhuǎn)BBC3[9]、中國(guó)CDAS3[10]、美國(guó)R2DBE[11]、日本OCTAVE[12]、俄羅斯MDBE[13]等系統(tǒng)均支持該標(biāo)準(zhǔn),同時(shí),我國(guó)部分院校的研究人員對(duì)VDIF格式在FPGA平臺(tái)的實(shí)現(xiàn)方式也進(jìn)行了研究[14]。
我國(guó)深空測(cè)控網(wǎng)VLBI基帶轉(zhuǎn)換與記錄系統(tǒng)是一套基于FPGA平臺(tái)開發(fā)的VLBI數(shù)字后端DBE(Digital Backend Equipment)系統(tǒng),該系統(tǒng)從設(shè)計(jì)之初便同時(shí)支持VSI標(biāo)準(zhǔn)規(guī)范和RDEF規(guī)范。但隨著系統(tǒng)功能的拓展,該系統(tǒng)需支持VDIF格式以應(yīng)對(duì)VLBI聯(lián)合觀測(cè)需求的日益增加,而當(dāng)前系統(tǒng)的體系結(jié)構(gòu)給系統(tǒng)進(jìn)一步升級(jí)換代帶來了較大困難。為了提高系統(tǒng)的靈活性和擴(kuò)展性,同時(shí)提高系統(tǒng)的可重構(gòu)性,需要對(duì)系統(tǒng)結(jié)構(gòu)進(jìn)行改進(jìn)。
本文通過研究,利用圖形處理單元GPU(Graphic Process Unit)的高靈活性和高效并行數(shù)據(jù)處理能力[15],設(shè)計(jì)了一種基于GPU的干涉測(cè)量VDIF格式數(shù)據(jù)編幀方法,并通過試驗(yàn)驗(yàn)證了方法的正確性。
VDIF數(shù)據(jù)幀(VDIF Data Frame)由數(shù)據(jù)幀頭(Data Frame Header)和數(shù)據(jù)陣列(Data Array)兩部分構(gòu)成。幀頭處于數(shù)據(jù)幀的頭部,是一個(gè)帶有自我識(shí)別標(biāo)識(shí)的32字節(jié)字段,內(nèi)含用于標(biāo)識(shí)本幀數(shù)據(jù)的附加信息。幀頭后面跟著一個(gè)或多個(gè)頻率通道采樣點(diǎn)組成的時(shí)間數(shù)據(jù)序列。
VDIF規(guī)范的數(shù)據(jù)排列具有很高的靈活性,一個(gè)數(shù)據(jù)幀中可攜帶多個(gè)通道的數(shù)據(jù),也可以僅攜帶一個(gè)通道的數(shù)據(jù)。在VDIF規(guī)范中,來自同一組子帶的時(shí)間序列幀被稱作一個(gè)數(shù)據(jù)線程(Data Thread),同一個(gè)數(shù)據(jù)線程中每一個(gè)數(shù)據(jù)幀用位于幀頭內(nèi)的線程序號(hào)(Thread ID)來標(biāo)識(shí)。一組數(shù)據(jù)集內(nèi)的數(shù)據(jù)線程被合并成單個(gè)串行的數(shù)據(jù)流(Data Stream),一個(gè)觀測(cè)掃描周期內(nèi)的所有的數(shù)據(jù)線程被稱作一個(gè)數(shù)據(jù)段(Data Segment)。在VDIF規(guī)范中推薦了兩種數(shù)據(jù)流組織方式[7]:①一個(gè)數(shù)據(jù)流僅由一個(gè)數(shù)據(jù)線程組成;②一個(gè)數(shù)據(jù)流由多個(gè)單通道數(shù)據(jù)線程組成。兩種模式下數(shù)據(jù)流如圖1所示。
VDIF規(guī)范的設(shè)計(jì)同時(shí)適用于網(wǎng)絡(luò)傳輸和硬盤存儲(chǔ)。在網(wǎng)絡(luò)傳輸模式下,每個(gè)數(shù)據(jù)包僅包含一個(gè)VDIF數(shù)據(jù)幀作為其數(shù)據(jù)載荷,在此模式下,數(shù)據(jù)幀長(zhǎng)一般被限制在約64字節(jié)~9000字節(jié)。而在硬盤存儲(chǔ)模式下,數(shù)據(jù)幀長(zhǎng)受限于幀頭中表示幀長(zhǎng)的數(shù)據(jù)位數(shù),即227字節(jié)。
圖1 多通道模式和單通道模式VDIF數(shù)據(jù)流示意圖Fig.1 Schematic diagram of VDIF data flow in multi-channel mode and single-channel mode
標(biāo)準(zhǔn)的VDIF數(shù)據(jù)幀頭大小為32字節(jié),其內(nèi)部結(jié)構(gòu)如圖2所示[7]。
圖2 VDIF規(guī)范數(shù)據(jù)幀頭格式Fig.2 VDIF standard data frame header format
當(dāng)前,VDIF規(guī)范數(shù)據(jù)幀頭格式已經(jīng)更新到第四版[16],該版是為了解決多路復(fù)用VDIF數(shù)據(jù)的有效性問題而設(shè)計(jì)。其核心功能主要解決兩個(gè)方面的問題,一是大量數(shù)據(jù)處理時(shí)丟幀的問題,二是相關(guān)處理時(shí)數(shù)據(jù)重新排列(corner-turn)的問題。此外,NICT[17]、NRAO[18]、Haystack[19]和ALMA[20]等機(jī)構(gòu)均在VDIF規(guī)范的基礎(chǔ)上利用用戶擴(kuò)展字節(jié)開發(fā)了自己的VDIF版本。
標(biāo)準(zhǔn)的VDIF數(shù)據(jù)序列的排列方式只與幀頭內(nèi)的通道數(shù)和量化位數(shù)有關(guān)。數(shù)據(jù)格式必須遵守這些基本設(shè)定以便后續(xù)的數(shù)據(jù)處理設(shè)備能夠快速解析數(shù)據(jù)。根據(jù)幀頭中數(shù)據(jù)類型和通道數(shù)的定義,VDIF規(guī)范的數(shù)據(jù)排列方式可分為單通道實(shí)數(shù),單通道復(fù)數(shù),多通道實(shí)數(shù),多通道復(fù)數(shù)四種模式。在VDIF規(guī)范中,復(fù)數(shù)是以實(shí)部和虛部?jī)刹糠謫为?dú)處理的,其量化與實(shí)數(shù)相同,只是數(shù)據(jù)排列時(shí)將復(fù)數(shù)的I、Q兩部分連續(xù)排列即可。
①單通道VDIF數(shù)據(jù)排列格式
在單通道實(shí)數(shù)模式下,數(shù)據(jù)量化位數(shù)1bit到32bit任選,數(shù)據(jù)排列從低位開始,最先進(jìn)入的數(shù)據(jù)占據(jù)bit0,其后的數(shù)據(jù)依次占據(jù)后面的數(shù)據(jù)位,直到32bit字的剩余空間不足一個(gè)采樣點(diǎn)量化存儲(chǔ)時(shí),從下一個(gè)32位字重新開始寫入數(shù)據(jù),即一個(gè)數(shù)據(jù)的量化結(jié)果不跨越32位字的邊界。需要注意的是,第一個(gè)數(shù)據(jù)點(diǎn)的時(shí)刻必須與幀頭中標(biāo)識(shí)的時(shí)間嚴(yán)格對(duì)應(yīng)。以2bit量化為例,單通道模式下實(shí)數(shù)數(shù)據(jù)排列方式如圖3(a)所示。
單通道復(fù)數(shù)模式下VDIF數(shù)據(jù)排列方式與實(shí)數(shù)排列方式類似,主要區(qū)別在于復(fù)數(shù)的一個(gè)采樣點(diǎn)實(shí)際上由實(shí)部和虛部?jī)蓚€(gè)部分構(gòu)成,且兩個(gè)部分的量化位數(shù)相同。這兩個(gè)部分在量化時(shí)是作為一對(duì)數(shù)據(jù)處理而且是相鄰放置。放置時(shí),實(shí)部位于低位,虛部位于高位。當(dāng)量化位數(shù)大于16bit時(shí),實(shí)部占據(jù)前兩個(gè)32位字,虛部占據(jù)相鄰的后兩個(gè)32位字。單通道模式下量化位數(shù)2bit的復(fù)數(shù)數(shù)據(jù)排列方式如圖3(b)所示。
②多通道VDIF數(shù)據(jù)排列格式
為了符合傳統(tǒng)VLBI應(yīng)用實(shí)踐,同時(shí)簡(jiǎn)化數(shù)據(jù)格式,VDIF規(guī)范多通道模式僅支持2的整數(shù)次冪數(shù)量的通道數(shù)和量化位數(shù)。為了定義多通道模式下數(shù)據(jù)格式,VDIF規(guī)范提出了“complete sample”的概念,complete sample表示所有通道一次采樣所得量化位數(shù)。在實(shí)數(shù)模式下,若用2n表示通道數(shù),2k表示量化位數(shù),則complete sample=2n×2k。多通道模式下complete sample為4bit的實(shí)數(shù)數(shù)據(jù)排列方式如圖3(c)所示。需要注意,該模式下每個(gè)數(shù)據(jù)矩陣必須包含整數(shù)個(gè)complete sample,而這一要求在通道數(shù)較多時(shí)將面臨困難。因此,多通道模式在網(wǎng)絡(luò)傳輸時(shí)會(huì)遇到較大的障礙,而在文件記錄和傳輸時(shí)不受影響。
在多通道復(fù)數(shù)模式下,通道數(shù)依然限制為2n,而復(fù)數(shù)的實(shí)部和虛部的量化位數(shù)均為2k,因此復(fù)數(shù)模式下,complete sample=2×2n×2k。復(fù)數(shù)數(shù)據(jù)各通道排列方式與實(shí)數(shù)相同,而實(shí)部和虛部的排列方式與單通道模式下相同,多通道模式下complete sample為8bit的復(fù)數(shù)數(shù)據(jù)排列方式如圖3(d)所示。
圖3 VDIF規(guī)范數(shù)據(jù)排列方式Fig.3 VDIF specification data arrangement
典型的深空測(cè)控干涉測(cè)量系統(tǒng)基帶轉(zhuǎn)換器結(jié)構(gòu)如圖4所示[21]?;鶐мD(zhuǎn)換器整體由數(shù)據(jù)預(yù)處理模塊、并行信道化模塊、數(shù)據(jù)格式化模塊和IO模塊組成。模擬輸入信號(hào)經(jīng)過數(shù)據(jù)預(yù)處理模塊的幅度調(diào)節(jié)和并行信道化模塊的分通道處理,最終按照要求輸出固定帶寬的多路并行子帶信號(hào)。數(shù)據(jù)格式化模塊按照接口文件的要求,將各通道信號(hào)量化編幀,輸出符合標(biāo)準(zhǔn)格式規(guī)范的數(shù)據(jù)流。數(shù)據(jù)格式化模塊是基帶轉(zhuǎn)換器和相關(guān)處理機(jī)溝通的橋梁,只有經(jīng)過該模塊嚴(yán)格格式化的數(shù)據(jù)才能最終通過IO模塊送到數(shù)據(jù)處理中心進(jìn)行進(jìn)一步處理。
圖4 VLBI基帶轉(zhuǎn)換器工作流程Fig.4 Workflow of VLBI baseband converter
經(jīng)過并行信道化模塊的處理,串行的高速數(shù)據(jù)變?yōu)椴⑿械亩嗦返退贁?shù)據(jù),在數(shù)據(jù)速率降低的同時(shí),數(shù)據(jù)的并行性大幅提高,各通道之間數(shù)據(jù)完全獨(dú)立,可充分利用GPU實(shí)現(xiàn)數(shù)據(jù)的并行化處理。
根據(jù)VDIF格式規(guī)范要求,多路并行的數(shù)據(jù)可選擇多通道合并量化或者單通道單獨(dú)量化,最終輸出格式化的數(shù)據(jù)。由于各路數(shù)據(jù)之間互相獨(dú)立,且同一通道內(nèi)各數(shù)據(jù)之間也有獨(dú)立性,因此可利用每個(gè)GPU線程完成一個(gè)數(shù)據(jù)點(diǎn)的量化,最終將量化結(jié)果合并為格式化文件。計(jì)算統(tǒng)一設(shè)備架構(gòu)CUDA(Compute Unified Device Architecture)是NVIDIA提出的GPU平臺(tái)并行計(jì)算模型,基于CUDA的VDIF數(shù)據(jù)編幀流程如圖5所示。
由圖5可知,該流程主要由三個(gè)模塊構(gòu)成,即初始化和幀頭參數(shù)計(jì)算模塊、單通道單線程編幀模塊以及多通道單線程編幀模塊。該流程輸入數(shù)據(jù)為信道化后輸出的并行多通道數(shù)據(jù),數(shù)據(jù)處理模塊根據(jù)量化參數(shù)生成幀頭,并按照量化模式分別對(duì)多通道數(shù)據(jù)進(jìn)行量化處理。在單線程多通道模式下,系統(tǒng)僅開啟一個(gè)數(shù)據(jù)線程,所有通道的數(shù)據(jù)均按通道順序量化編幀,由于CUDA數(shù)組訪存是行優(yōu)先,為了提高訪存效率,首先對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)置,然后按行對(duì)數(shù)據(jù)進(jìn)行逐點(diǎn)量化并組成字節(jié)和32位字。在單線程單通道模式下,系統(tǒng)按照通道數(shù)啟動(dòng)多個(gè)數(shù)據(jù)線程,每個(gè)數(shù)據(jù)線程處理一路數(shù)據(jù)。而在CUDA環(huán)境中,可采用CUDA Stream異步啟動(dòng)多個(gè)流并行處理每一通道數(shù)據(jù)。在一幀數(shù)據(jù)處理完后,循環(huán)更新幀號(hào)并處理下一幀數(shù)據(jù),實(shí)際上,由于數(shù)據(jù)的并行性,此流程也可以同時(shí)實(shí)現(xiàn)多幀數(shù)據(jù)的并行量化。
圖5 基于GPU的VDIF數(shù)據(jù)編幀流程Fig.5 GPU-based VDIF data encoding process
幀頭參數(shù)計(jì)算模塊主要完成計(jì)算單元的初始化和幀頭參數(shù)的計(jì)算,而幀頭參數(shù)的計(jì)算為其核心內(nèi)容。在實(shí)際處理過程中,幀頭參數(shù)的計(jì)算和更新流程如圖6所示。
在圖6中,幀頭參數(shù)計(jì)算模塊輸入?yún)?shù)為量化位數(shù)、帶寬、通道數(shù)、幀長(zhǎng)、數(shù)據(jù)類型。該模塊接收到上述參數(shù)后,首先啟動(dòng)時(shí)標(biāo)計(jì)算,根據(jù)VDIF格式規(guī)范,首先根據(jù)當(dāng)前時(shí)間計(jì)算當(dāng)天的參考?xì)v元epoch,然后根據(jù)epoch計(jì)算當(dāng)前時(shí)刻的積秒。時(shí)標(biāo)計(jì)算完成后,根據(jù)通道數(shù)、量化位數(shù)和數(shù)類型計(jì)算complete sample,同時(shí)根據(jù)帶寬、量化位數(shù)和數(shù)據(jù)類型計(jì)算數(shù)據(jù)速率。最后,根據(jù)數(shù)據(jù)速率和complete sample計(jì)算量化后的數(shù)據(jù)量,并根據(jù)輸入幀長(zhǎng)參數(shù)對(duì)幀長(zhǎng)按照8字節(jié)取整。計(jì)算完成后,該模塊進(jìn)行參數(shù)合法性判定:一是1s內(nèi)幀數(shù)是否為整數(shù),二是量化后數(shù)據(jù)量是否為完成量化位數(shù)的整數(shù)倍。至此,幀頭參數(shù)的計(jì)算和校驗(yàn)完成,加入線程ID、測(cè)站ID和擴(kuò)展數(shù)據(jù)后即創(chuàng)建初始幀頭。
初始幀頭創(chuàng)建完成后,數(shù)據(jù)量化流程同時(shí)啟動(dòng),按照量化的數(shù)據(jù)幀信息,幀頭內(nèi)時(shí)標(biāo)和幀序號(hào)實(shí)時(shí)更新并循環(huán)寫入數(shù)據(jù)幀,直到量化編幀流程結(jié)束。
圖6 VDIF規(guī)范數(shù)據(jù)幀頭創(chuàng)建和更新流程Fig.6 VDIF specification data frame header creation and update
在多通道單線程模式下,為了實(shí)現(xiàn)數(shù)據(jù)存取操作的加速,需要將原來按通道行優(yōu)先存儲(chǔ)的數(shù)據(jù)變?yōu)榘赐ǖ懒袃?yōu)先存儲(chǔ),這樣按行高效存取時(shí)就能直接獲取一次采樣的所有通道數(shù)據(jù),使得存取效率大大提高。
在完成了數(shù)據(jù)轉(zhuǎn)置后,并行的多路數(shù)據(jù)變?yōu)榘戳写鎯?chǔ)的二維數(shù)據(jù)矩陣。在此二維數(shù)據(jù)的基礎(chǔ)上,針對(duì)性開辟二維CUDA線程塊,每個(gè)線程負(fù)責(zé)一個(gè)數(shù)據(jù)點(diǎn)的量化,最終將量化結(jié)果拼接成字節(jié)存儲(chǔ)。以2bit量化為例,線程塊的分配、數(shù)據(jù)量化流程如圖7所示。線程網(wǎng)格分配按照512為基數(shù)循環(huán)加載,保證處理完所有的數(shù)據(jù)點(diǎn)。線程網(wǎng)格內(nèi),線程塊分配為二維,第一維度線程數(shù)大于通道數(shù)并以32為單位增加;第二維度代表需要處理的每通道數(shù)據(jù)點(diǎn),設(shè)置線程數(shù)為256,并隨著線程網(wǎng)格循環(huán)加載直到處理完所有數(shù)據(jù)。在量化階段,每個(gè)線程負(fù)責(zé)處理一個(gè)數(shù)據(jù)點(diǎn),首先執(zhí)行位置判斷確定其所處字節(jié)位置,然后執(zhí)行量化判斷選擇量化結(jié)果,最終按順序?qū)⑾噜徦膫€(gè)數(shù)據(jù)點(diǎn)合并為字節(jié)并編入幀結(jié)構(gòu)。
與傳統(tǒng)基帶轉(zhuǎn)換器數(shù)據(jù)格式相比,VDIF規(guī)范多通道模式下通道數(shù)和量化位數(shù)仍然服從2的整數(shù)次冪的約束,但完成量化位數(shù)不再受32位字空間的約束,可以將符合complete sample=2×2n×2k(n=0~31,k=0~5)的所有數(shù)據(jù)經(jīng)行編幀處理。從圖7可知,在多通道數(shù)據(jù)轉(zhuǎn)置完成后,量化編幀過程僅與完成量化位數(shù)有關(guān),據(jù)此便可得到不同完成量化位數(shù)條件下的量化核函數(shù)。
在多通道多線程模式下,并行的各通道數(shù)據(jù)由獨(dú)立的數(shù)據(jù)線程進(jìn)行處理,而由于各路數(shù)據(jù)相互獨(dú)立,可采用流式異步并行架構(gòu)對(duì)各路數(shù)據(jù)同時(shí)進(jìn)行量化處理,數(shù)據(jù)處理流程如圖8所示。在處理過程中,并行的各路數(shù)據(jù)流被按通道號(hào)分配給不同的CUDA stream,各個(gè)stream同時(shí)拷貝數(shù)據(jù)到各自空間并執(zhí)行異步量化和編幀,待各路編幀完成后,各stream讀入下一段數(shù)據(jù)并重復(fù)上述過程。待處理完成后,符合VDIF格式規(guī)范的數(shù)據(jù)通過主機(jī)接口寫入文件或?qū)懭刖W(wǎng)絡(luò)數(shù)據(jù)包發(fā)送給用戶。
圖8 多通道多線程編幀流程圖Fig.8 Flow chart of multi-channel and multi-threaded framing
在多通道多線程模式下,一個(gè)數(shù)據(jù)線程負(fù)責(zé)處理一個(gè)單獨(dú)的數(shù)據(jù)通道,所以其數(shù)據(jù)編幀方式更加靈活,量化位數(shù)不再受到2的整數(shù)次冪的限制,但其整體數(shù)據(jù)幀結(jié)構(gòu)仍然受到以32位字為單位的制約。另外,由于各通道數(shù)據(jù)本身就是按照行優(yōu)先排列,不再需要數(shù)據(jù)轉(zhuǎn)置。
由于量化過程的相似性,多通道多線程模式下數(shù)據(jù)量化編幀核函數(shù)依然分為數(shù)據(jù)量化映射與按位編幀兩個(gè)步驟,因此可以認(rèn)為單通道單線程是多通道單線程在通道數(shù)為1時(shí)的一個(gè)特例,在常用的2的整數(shù)次冪量化位數(shù)條件下,兩種模式重要核函數(shù)可復(fù)用。
數(shù)據(jù)編幀模塊實(shí)現(xiàn)了基于GPU的并行多路數(shù)據(jù)的逐點(diǎn)量化和編幀。然而,在量化核函數(shù)中,采用了大量的分支判斷結(jié)構(gòu),該結(jié)構(gòu)邏輯清晰,但在GPU核函數(shù)中會(huì)給執(zhí)行效率帶來不利影響。另外,上述量化編碼結(jié)構(gòu)采用逐幀循環(huán)處理的方法處理數(shù)據(jù),由于數(shù)據(jù)量大,循環(huán)結(jié)構(gòu)在無法有效占用GPU資源的條件下,將會(huì)降低數(shù)處理效率。為了解決以上問題,本文設(shè)計(jì)了基于紋理查找表的編碼方法和基于流架構(gòu)的多幀數(shù)據(jù)異步并行編幀方法。
為了解決分支結(jié)構(gòu)給量化過程帶來的效率損失,本文采用基于紋理緩存的量化查找表代替分支結(jié)構(gòu),實(shí)現(xiàn)數(shù)據(jù)量化過程。紋理緩存是GPU全局內(nèi)存上一塊特殊的區(qū)域,該區(qū)域經(jīng)過特別的硬件加速,能夠按照輸入索引輸出對(duì)應(yīng)的列表值,適用于實(shí)現(xiàn)高效的查找表。
基于紋理緩存的量化查找表實(shí)現(xiàn)步驟如下:
①根據(jù)輸入?yún)?shù)計(jì)算完成量化位數(shù)(complete sample=通道數(shù)×量化位數(shù)×復(fù)數(shù)標(biāo)識(shí)),其中當(dāng)數(shù)據(jù)類型為復(fù)數(shù)(實(shí)數(shù))時(shí),復(fù)數(shù)標(biāo)識(shí)為2(1);
②根據(jù)完成量化位數(shù)分配緩存空間,并加載量化數(shù)據(jù)表;
③將量化數(shù)據(jù)表綁定紋理內(nèi)存;
④在量化編幀核函數(shù)內(nèi),按照輸入數(shù)據(jù)調(diào)用紋理拾取核函數(shù),尋址方式為鉗位尋址(CUDA Address Mode Clamp),紋理拾取濾波模式選擇取整量化(CUDA Filter Mode Point);
⑤將量化結(jié)果按位置寫入數(shù)據(jù)幀。
在上文所述的編幀方法中,無論是多通道模式還是單通道模式,數(shù)據(jù)幀的寫入均遵循幀內(nèi)數(shù)據(jù)點(diǎn)并行量化,每幀數(shù)據(jù)串行循環(huán)處理的思路。雖然幀內(nèi)數(shù)據(jù)的并行處理有效提高了數(shù)據(jù)并行性,但數(shù)據(jù)幀的串行處理并沒有充分利用讀入數(shù)據(jù)段的并行性。根據(jù)幀頭參數(shù)設(shè)置,每一次所要處理的幀數(shù)已經(jīng)確定,且各幀之間數(shù)據(jù)完全獨(dú)立。因此,可利用異步并行結(jié)構(gòu),在查找表量化環(huán)節(jié)之后,直接對(duì)量化后的數(shù)據(jù)分段異步并行編幀,這樣可以進(jìn)一步提高數(shù)據(jù)的并行性。然而,并行編幀之前,需要預(yù)先計(jì)算好各個(gè)數(shù)據(jù)幀頭的參數(shù)。流式架構(gòu)異步并行編幀方法流程如圖9所示。
圖9 流式架構(gòu)異步并行編幀算法流程Fig.9 Algorithm flow of asynchronous and parallel framing of streaming architecture
圖9中,系統(tǒng)輸入數(shù)據(jù)為信道化后的浮點(diǎn)數(shù),該浮點(diǎn)數(shù)經(jīng)過并行量化變?yōu)闊o符號(hào)的二進(jìn)制量化數(shù)據(jù)。輸出數(shù)據(jù)根據(jù)幀數(shù)N分為并行的N段,使得每段數(shù)據(jù)剛好組成一幀。啟動(dòng)N個(gè)CUDA stream,并保證每一個(gè)stream負(fù)責(zé)處理一幀數(shù)據(jù)。在每一個(gè)stream內(nèi),數(shù)據(jù)根據(jù)量化位數(shù)(多通道模式下為complete sample)將相鄰點(diǎn)的數(shù)據(jù)寫入32位word,并組成數(shù)據(jù)幀。
為了驗(yàn)證所提編幀方法的有效性,本文利用仿真數(shù)據(jù)對(duì)編幀過程全流程進(jìn)行了正確性測(cè)試。測(cè)試過程分為幀頭測(cè)試和數(shù)據(jù)陣列測(cè)試兩個(gè)部分。測(cè)試硬件平臺(tái)為HP ZBook-15,計(jì)算用GPU為NVIDIA Quadro P2000 Mobile,計(jì)算能力6.1。軟件開發(fā)環(huán)境采用Microsoft Visual Studio Community 2015和CUDA 10.2。
幀頭測(cè)試主要流程為,首先利用本文所提方法得到VDIF規(guī)范數(shù)據(jù)幀,然后利用測(cè)試軟件測(cè)試幀頭數(shù)據(jù),驗(yàn)證幀頭數(shù)據(jù)的正確性。測(cè)試時(shí)間為UTC時(shí)間2020年6月21日1時(shí)46分11.5630秒,帶寬2MHz。設(shè)置量化位數(shù)為1,則實(shí)際量化位數(shù)2bit。模式為單線程多通道模式,設(shè)置線程ID為0,通道數(shù)對(duì)數(shù)為1,則實(shí)際通道數(shù)為2。設(shè)置不含幀頭的8bit單位幀長(zhǎng)為1000,則實(shí)際幀長(zhǎng)8032字節(jié),數(shù)據(jù)為實(shí)數(shù)。另外設(shè)置測(cè)站ID為“HR”,VDIF版本設(shè)置為0,擴(kuò)展數(shù)據(jù)2設(shè)置為幀同步字“0xACABFEED”,其余擴(kuò)展數(shù)據(jù)位設(shè)置為零。這里為了測(cè)試方便,暫未對(duì)數(shù)據(jù)有效性信息相關(guān)的擴(kuò)展字節(jié)定義。
根據(jù)以上信息生成VDIF格式數(shù)據(jù)幀,然后利用VLBI開源數(shù)據(jù)處理軟件DiFX[22]內(nèi)用于VDIF數(shù)據(jù)測(cè)試的函數(shù)printVDIFHeader測(cè)試數(shù)據(jù)幀幀頭數(shù)據(jù),得測(cè)試結(jié)果如圖10所示。從測(cè)試結(jié)果可知,本文設(shè)計(jì)的幀頭生成結(jié)構(gòu)可實(shí)現(xiàn)VDIF格式數(shù)據(jù)幀頭正確生成。
編幀結(jié)果測(cè)試主要流程為:首先,利用本文所提方法分別采用CUDA和MATLAB對(duì)輸入數(shù)據(jù)進(jìn)行量化,得到VDIF規(guī)范數(shù)據(jù)幀;然后,利用MATLAB分別提取兩種方法生成的數(shù)據(jù),并比較數(shù)據(jù)的正確性。輸入數(shù)據(jù)選用均值為0方差為1的高斯白噪聲。由此得到分別采用兩種方法量化后一幀數(shù)據(jù)逐字節(jié)比對(duì)結(jié)果如圖11所示,從圖中可知,兩種方法量化結(jié)果完全吻合,量化結(jié)果與理論值偏差優(yōu)于10-10。測(cè)試結(jié)果證明了量化方法的正確性。
圖10 VDIF規(guī)范數(shù)據(jù)幀幀頭測(cè)試結(jié)果Fig.10 VDIF standard data frame header test results
圖11 VDIF規(guī)范數(shù)據(jù)8bit量化結(jié)果對(duì)比Fig.11 Comparison of 8bit quantization results of VDIF standard data
本文首先分析了干涉測(cè)量數(shù)據(jù)記錄系統(tǒng)VDIF規(guī)范支持的必要性和基于GPU的編幀方法的可行性;然后分析了VDIF格式規(guī)范規(guī)定的數(shù)據(jù)編幀方法,介紹了幀頭數(shù)據(jù)的填寫規(guī)范,重點(diǎn)研究了不同數(shù)據(jù)類型、不同通道數(shù)和不同數(shù)據(jù)線程數(shù)條件下的數(shù)據(jù)排列方法;最后,基于GPU開發(fā)了符合VDIF規(guī)范的數(shù)據(jù)編幀方法,并介紹了幀頭計(jì)算模塊、多通道單線程編幀模塊和多通道多線程編幀模塊的實(shí)現(xiàn)方法。為了實(shí)現(xiàn)編幀過程效率的優(yōu)化,設(shè)計(jì)了基于紋理緩存查找表的數(shù)據(jù)量化方法和基于流式架構(gòu)的多幀信號(hào)異步編幀方法。通過實(shí)驗(yàn)驗(yàn)證,證明了本文編幀方法的正確性。本文所設(shè)計(jì)的基于GPU的VDIF規(guī)范數(shù)據(jù)編幀方法將能夠有效提高我國(guó)深空測(cè)控干涉測(cè)量數(shù)據(jù)記錄系統(tǒng)的靈活性和兼容性,為該系統(tǒng)參與聯(lián)合觀測(cè)提供有效的支持。