劉建濤 張海彬
(1.海裝沈陽(yáng)局駐沈陽(yáng)地區(qū)第三軍事代表室 沈陽(yáng) 110003)(2.沈陽(yáng)遼海裝備有限責(zé)任公司 沈陽(yáng) 110003)
聲納是海軍艦艇的重要裝備,而信號(hào)處理是聲納裝備從海洋干擾背景中提取信息的關(guān)鍵過(guò)程。近年來(lái),隨著國(guó)防發(fā)展的需要,對(duì)聲納裝備的性能要求日益提高。信號(hào)處理需要處理的數(shù)據(jù)量越來(lái)越大,算法復(fù)雜度越來(lái)越高。以DSP芯片為運(yùn)算核心的第三代信號(hào)處理平臺(tái)在處理大規(guī)模數(shù)據(jù)和更復(fù)雜的算法時(shí),不得不使用更多的硬件來(lái)彌補(bǔ)運(yùn)算力的不足,隨之而來(lái)的則是軟件編程的難度進(jìn)一步提高[1]。
GPU具有大規(guī)模并行運(yùn)算的特點(diǎn),在處理大量數(shù)據(jù)的復(fù)雜運(yùn)算時(shí)具有速度優(yōu)勢(shì)。同時(shí)其具有相對(duì)DSP更低的功耗和體積。因此,GPU已經(jīng)成為下一代信號(hào)處理平臺(tái)的主要研究方向[3~4]。
本文通過(guò)分析GPU硬件結(jié)構(gòu),CUDA軟件編程模型和并行架構(gòu),研究嵌入式微型GPU平臺(tái)作為水聲信號(hào)處理系統(tǒng)。該系統(tǒng)體積非常小,作為信號(hào)處理設(shè)備可以應(yīng)用于無(wú)人艇,UUV,聲納浮標(biāo)等小型水聲探測(cè)平臺(tái),其運(yùn)算量也支持其應(yīng)用于大型聲納系統(tǒng)。科學(xué)實(shí)驗(yàn)使用該系統(tǒng)替代DSP平臺(tái)可以節(jié)約大量經(jīng)費(fèi),減少負(fù)擔(dān)。該GPU平臺(tái)也支持?jǐn)?shù)據(jù)庫(kù)和深度學(xué)習(xí)模塊[5~6]。
Jetson系列是英偉達(dá)開(kāi)發(fā)的微型嵌入式平臺(tái),主要應(yīng)用于移動(dòng)AI設(shè)備,如配送物流自主機(jī)器人,UAV,工廠系統(tǒng)等。該平臺(tái)具有高運(yùn)算量(每秒32萬(wàn)億次運(yùn)算),低功耗(30W),高速I(mǎi)/O性能(750Gbps),體積?。?00 mm×105mm)的特點(diǎn),可以完成如視覺(jué)測(cè)距、傳感器融合、定位與地圖繪制、障礙物探測(cè),以及對(duì)新一代機(jī)器人至關(guān)重要的路線規(guī)劃算法等。
研究在該平臺(tái)上開(kāi)發(fā)波束形成,目標(biāo)識(shí)別等算法作為信號(hào)處理系統(tǒng),以及嵌入數(shù)據(jù)庫(kù),機(jī)器學(xué)習(xí)模塊。對(duì)于水聲信號(hào)處理平臺(tái)的微型化,數(shù)據(jù)化,智能化具有重要意義。
Jetson agx xavier嵌入式平臺(tái)硬件配置如表1所示。
表1 Jetson agx xavier硬件配置
該平臺(tái)CPU采用了8核64位ARM,在保證低功耗的情況下,完全可以滿(mǎn)足信號(hào)處理程序調(diào)度部分需求。GPU主要負(fù)責(zé)信號(hào)處理程序運(yùn)算部分,深度學(xué)習(xí)和計(jì)算機(jī)視覺(jué)任務(wù)上達(dá)到30Tops的運(yùn)算速度。512核的Volta GPU支持張量核和混合精度計(jì)算,能夠達(dá)到11 TFLOPS FP16或22 TOPS INT8計(jì)算。Jetson AGX Xavier的雙NVDLA能夠?qū)崿F(xiàn)5TOPS INT8或2.5 TFLOPS FP16性能。內(nèi)存方面,CPU內(nèi)存和GPU顯存共用32GB LPDDR4,在根本上解決了CPU與GPU的數(shù)據(jù)傳輸瓶頸問(wèn)題,在使用cudaMemcpy進(jìn)行數(shù)據(jù)傳輸時(shí)理論速度達(dá)到137GB/s,完全滿(mǎn)足信號(hào)處理需求。功耗方面,該平臺(tái)功耗最高只有30W,并提供多種模式供設(shè)置。在風(fēng)扇開(kāi)啟的情況下,即便滿(mǎn)載運(yùn)行,設(shè)備溫度也可以保持在30℃左右,而且噪音相當(dāng)?shù)?,非常適合小型平臺(tái)或者無(wú)人平臺(tái)。
TMS320C6678帶有四片TI最新KeyStone多核心架構(gòu)的TMS320C6678型DSP處理器,每片處理器含有8個(gè)DSP內(nèi)核,主頻為1GHz,單核峰值浮點(diǎn)運(yùn)算能力為16GFLOPS,整板峰值浮點(diǎn)運(yùn)算能力可達(dá)512 GFLOPS。模塊上每片處理器外接2GB的DDR3,整板外部存儲(chǔ)容量為8GB;板內(nèi)兩簇處理器(4片)間可直接進(jìn)行4×SRIO交換,鏈路線速率默認(rèn)3.125Gbps,數(shù)據(jù)傳輸不小于800MB/s;板間處理器通信:板卡對(duì)外提供2路4×SRIO鏈路(每簇處理器各占1路),鏈路線速率默認(rèn)3.125Gbps,數(shù)據(jù)傳輸不小于 800MB/s[9]。
由表2可知,在單精度運(yùn)算能力上一塊Jetson agx xavier的提供的理論運(yùn)算能力約等于9個(gè)整板TMS320C6678。
表2 Jetson agx xavier與TMS320C6678對(duì)比
在存儲(chǔ)空間上,Jetson agx xavie為編程人員提供了整片32GB的顯存,相比于TMS320C6678分配在各個(gè)芯片上的模式,在內(nèi)存分配上更加方便。
在傳輸速度上,Jetson agx xavier內(nèi)部137GB/s的傳輸速度遠(yuǎn)高于DSP的板內(nèi)3.125Gbps的速度。
以上可知,在主要硬件指標(biāo)上,Jetson agx xavier相比于TMS320C6678擁有較大的優(yōu)勢(shì)。
CUDA是英偉達(dá)公司在2006年1月推出的一種通用的編程模型,CUDA是一種將GPU作為數(shù)據(jù)并行計(jì)算設(shè)備的軟硬件體系。CUDA這種計(jì)算模型是以CPU+GPU的一種異構(gòu)模式來(lái)工作的。CPU負(fù)責(zé)整體程序的串行邏輯控制和任務(wù)調(diào)度,GPU則用于執(zhí)行一些能夠被高度并行化的并行計(jì)算任務(wù)[7]。即讓GPU與CPU協(xié)同工作,更確切的說(shuō)是CPU控制GPU工作。同時(shí)CUDA采用了SIMT(單指令多線程)的執(zhí)行模型,即成千上萬(wàn)的線程執(zhí)行同一條指令[8]。
可編程內(nèi)存:
寄存器(Regiester):對(duì)線程私有,數(shù)量有限,線程運(yùn)行時(shí)動(dòng)態(tài)獲得。
局部存儲(chǔ)器(Local Memory)邏輯上等同于寄存器,但是物理存儲(chǔ)空間位于顯存中,其訪存延遲與全局存儲(chǔ)器相當(dāng)。
共享存儲(chǔ)器(Shared Memory)為線程公有內(nèi)存,一般總大小為64KB。
全局存儲(chǔ)器(global memory)可以在任何SM設(shè)備上訪問(wèn)到,是GPU中最大,延遲最高,最常使用的內(nèi)存。
常量?jī)?nèi)存(const memory)駐留在設(shè)備內(nèi)存中,并在每個(gè)SM專(zhuān)用的常量緩存中緩存。
紋理內(nèi)存,駐留在設(shè)備內(nèi)存中,并在每個(gè)SM的只讀緩存中緩存。
不可編程內(nèi)存:一級(jí)緩存。二級(jí)緩存,只讀常量緩存和只讀紋理緩存。
每個(gè)SM都有一個(gè)一級(jí)緩存,所有的SM共享一個(gè)二級(jí)緩存,一級(jí)和二級(jí)緩存都被用來(lái)存儲(chǔ)本地內(nèi)存和全局內(nèi)存中的數(shù)據(jù),也包括寄存器溢出的部分。每個(gè)SM也有一個(gè)只讀常量緩存和只讀紋理存緩存,它們用于在設(shè)備內(nèi)存中提高來(lái)自?xún)?nèi)存空間內(nèi)的讀取性能[9~10]。
CUDA編程模型,包含兩個(gè)并行邏輯層,分別是block層和thread層,在執(zhí)行時(shí)block映射到SM,thread映射到SP,如何在實(shí)際應(yīng)用程序中高效地開(kāi)發(fā)這兩個(gè)層次的并行是CUDA編程與優(yōu)化關(guān)鍵。
CUDA并行基于kernel實(shí)現(xiàn),Kernel函數(shù)是指在GPU上執(zhí)行的函數(shù)。在CPU端配置相應(yīng)的線程塊(維度),共享存儲(chǔ)容量和CUDA流等信息。
Kernel函數(shù)映射到GPU上執(zhí)行,kernel具有三維的線程網(wǎng)格(grid)-線程塊(block)-線程(thread)結(jié)構(gòu),在執(zhí)行kernel時(shí),一個(gè)kernel函數(shù)對(duì)應(yīng)一個(gè)grid,對(duì)應(yīng)的block映射到SM,thread映射到SP,GPU通過(guò)頻繁的線程切換來(lái)實(shí)現(xiàn)硬件資源的分時(shí)使用,切換開(kāi)銷(xiāo)極小[11]。
本部分根據(jù)GPU特點(diǎn)和CUDA編程模型設(shè)計(jì)頻域波束形成算法的GPU實(shí)現(xiàn)。
CUDA程序并行架構(gòu)分為三級(jí),分別是數(shù)據(jù)級(jí)并行,核間級(jí)并行和任務(wù)級(jí)并行。數(shù)據(jù)級(jí)并行是指通過(guò)線程分配在kernel內(nèi)部實(shí)現(xiàn)數(shù)據(jù)與數(shù)據(jù)間的并行。核間級(jí)并行是指利用流并發(fā)技術(shù)實(shí)現(xiàn)kernel間的并行。任務(wù)級(jí)并行是指利用CPU多線程機(jī)制實(shí)現(xiàn)多個(gè)信號(hào)處理任務(wù)的并行。
軟件工程中有自頂向下和自下向上兩種設(shè)計(jì)方法,根據(jù)并行架構(gòu)特點(diǎn),選擇自下向上的設(shè)計(jì)方式設(shè)計(jì)聲納信號(hào)處理算法。即首先根據(jù)信號(hào)處理任務(wù)相關(guān)性,對(duì)數(shù)據(jù)級(jí)并行進(jìn)行設(shè)計(jì)和優(yōu)化,再分別處理核間級(jí)和任務(wù)級(jí)并行。如對(duì)于頻域波束形成算法來(lái)說(shuō),每個(gè)通道的FFT可以設(shè)計(jì)為一個(gè)kernel。多個(gè)kernel并行設(shè)計(jì)為核間級(jí)并行。進(jìn)行優(yōu)化并單元測(cè)試后,多路通道的FFT運(yùn)行時(shí)間極短,因此將FFT與數(shù)據(jù)與預(yù)處理合并為同一任務(wù),在一個(gè)CPU線程中運(yùn)行。對(duì)于算法時(shí)延補(bǔ)償部分,數(shù)據(jù)級(jí)并行即為每個(gè)基元的通道時(shí)延補(bǔ)償,核間級(jí)并行為多個(gè)基元并行進(jìn)行時(shí)延補(bǔ)償。后置處理任務(wù)因?yàn)闀r(shí)間較短,且分支運(yùn)算較多,可以布置在CPU上運(yùn)行。
1)數(shù)據(jù)傳輸
Jetson agx xavier內(nèi)部137GB/s,可以滿(mǎn)足大部分工程要求。但是由于PCIE總線帶寬的限制,GPU與CPU,CPU與IO的交互速度都會(huì)受到限制,也是GPU延遲的主要因素。
PCIE2.0一般有16通道,每通道速度約為500MB/s,由于數(shù)據(jù)的額外開(kāi)銷(xiāo),8GB/s理論帶寬能達(dá)到6GB/s。如果軟件要求在CPU和GPU之間頻繁的進(jìn)行大規(guī)模數(shù)據(jù)交互,會(huì)嚴(yán)重影響性能。
2)線程束分化
CPU擁有復(fù)雜的硬件執(zhí)行分支預(yù)測(cè)以保證分支運(yùn)算只付出很小的性能代價(jià),但是GPU是相對(duì)簡(jiǎn)單的設(shè)備,沒(méi)有分支預(yù)測(cè)機(jī)制,一個(gè)線程束(32線程)中所有線程在同一周期中必須執(zhí)行相同的指令,因此分支運(yùn)算會(huì)在GPU中產(chǎn)生線程束分化,即一個(gè)線程束會(huì)執(zhí)行每一個(gè)分支路徑。線程束分化會(huì)導(dǎo)致性能明顯下降,因此在軟件編程過(guò)程中,需要盡量避免線程束分化[12~13]。
3)bank conflict
共享存儲(chǔ)由交替排列的存儲(chǔ)體(bank)構(gòu)成,每個(gè)bank大小為4B,如果線程束中多個(gè)線程同時(shí)訪問(wèn)同一存儲(chǔ)體的不同地址將會(huì)引發(fā)存儲(chǔ)體沖突。一般來(lái)說(shuō)共享存儲(chǔ)的bank數(shù)和線程束內(nèi)線程數(shù)量是一致的[12~13]。
存儲(chǔ)體沖突的后果是在GPU中,不同bank組可以同時(shí)訪存,若產(chǎn)生存儲(chǔ)體沖突,多個(gè)線程要求訪問(wèn)同一個(gè)bank,每次僅有一個(gè)線程能訪問(wèn)bank,多個(gè)線程間要串行訪存,因而導(dǎo)致性能損失。
1)頁(yè)鎖定與零拷貝
頁(yè)鎖定內(nèi)存在內(nèi)存分配和釋放過(guò)程中不可換頁(yè),因此不會(huì)被換除內(nèi)存空間,換出到虛擬內(nèi)存中。其傳輸速度是常規(guī)可分頁(yè)內(nèi)存的兩倍,可以有效提升CPU與GPU的數(shù)據(jù)交換速度。
利用頁(yè)鎖定原理,將該頁(yè)面映射到設(shè)備地址空間中,實(shí)現(xiàn)零拷貝CPU和GPU都可以直接訪問(wèn)內(nèi)存地址。
2)分支優(yōu)化
在kernel中,分支操作會(huì)產(chǎn)生分支優(yōu)化,浪費(fèi)GPU性能,因此采取合理的方式優(yōu)化分支操作,可以提升kernel性能。
3)高度并行架構(gòu)設(shè)計(jì)
一般來(lái)說(shuō)算法并行度越高,性能越好。但是由于CUDA自帶的加速庫(kù)不是針對(duì)信號(hào)處理算法所設(shè)計(jì),因此使用cufft,cublas等加速庫(kù)并不能有效提升性能。
針對(duì)信號(hào)處理算法特點(diǎn)自行設(shè)計(jì)高度并行架構(gòu)可以有效提升算法性能。
試驗(yàn)環(huán)境:
GPU平臺(tái):Jetson agx xavie,Ubuntu 18.04操作系統(tǒng)
CPU:Intel i7-9700k;
DSP平臺(tái):TMS320C6678
試驗(yàn)測(cè)試不同長(zhǎng)度數(shù)據(jù)的向量乘法,向量加法在CPU和GPU上的運(yùn)行時(shí)間。波束形成和一次積累分別在DSP和GPU上運(yùn)行時(shí)間。
表3 GPU和CPU性能對(duì)比
表4 GPU和DSP時(shí)間對(duì)比
Jetson agx xavie相比于DSP信號(hào)處理平臺(tái)在運(yùn)算速度上具有很大的優(yōu)勢(shì),一個(gè)Jetson agx xavie上可以實(shí)現(xiàn)多個(gè)信號(hào)處理板才能實(shí)現(xiàn)的信號(hào)處理算法。硬件上,在功耗、散熱、體積三個(gè)指標(biāo)上,Jetson agx xavie也明顯占優(yōu)。
更重要的是,Jetson agx xavie可內(nèi)置數(shù)據(jù)庫(kù)模塊和深度學(xué)習(xí)模塊,對(duì)新一代信號(hào)處理平臺(tái)的數(shù)據(jù)化,智能化具有重要意義,也是后續(xù)研究的重要方向。