張偉達
(中國電子科技集團公司第十研究所,四川成都 610036)
合成孔徑雷達(SAR)因其高分辨的成像能力和穿透性強,具有全天時全天候的特點,被廣泛應用于海洋、陸地、航空航天等領域[1-5]。而隨著SAR 成像實時性、分辨率等要求越來越高,成像處理中的數(shù)據(jù)量和運算量也越來越大,此時多節(jié)點、多內核的并行處理架構常常被用來提高系統(tǒng)性能,以解決上述問題[6-7]。
SAR 成像功能中需要處理的復數(shù)點數(shù)據(jù)以二維數(shù)據(jù)矩陣的形式存儲,且數(shù)據(jù)量規(guī)模龐大,而傳統(tǒng)用于存儲處理數(shù)據(jù)的DSP 芯片可使用的存儲空間有限,同時若直接以線性方式存儲二維數(shù)據(jù)(在存儲介質中某一維度數(shù)據(jù)連續(xù)存儲,另一維度跨越式存儲),則會造成數(shù)據(jù)讀寫性能失衡,某一維度存取速率很高而另一維度卻非常低。
該文基于某國產類TMS320C6678 芯片[8-13],針對大規(guī)模數(shù)據(jù)的存儲和矩陣的二維高效傳輸,設計了一種將單片DSP 不足以容納的數(shù)據(jù)存儲于多片DSP中,并且DSP 間通過Serial RapidIO[14-16](SRIO)網絡互聯(lián)的系統(tǒng)方案,系統(tǒng)網絡中的每一片DSP 都可以通過SRIO 接口訪問到其他DSP 中的數(shù)據(jù),同時制定數(shù)據(jù)矩陣在DSP 中的存儲策略來替換線性存儲方式,以達到網絡中的DSP 都可以以任意維度高效訪問完整矩陣空間數(shù)據(jù)的目的,為系統(tǒng)中多DSP 并行高效地完成成像運算提供支持。
單片DSP 不足以存儲完整的二維復數(shù)點數(shù)據(jù)矩陣,可以將數(shù)據(jù)矩陣分布式的存儲在多片DSP存儲介質中,多片DSP 通過SRIO 網絡協(xié)同實現(xiàn)對完整數(shù)據(jù)矩陣的訪問,該文設計的雷達信號數(shù)據(jù)處理板根據(jù)待處理的數(shù)據(jù)量,采用四片類6678 DSP并行工作的方式,提高運算效率的同時擴展了存儲容量。
方案中使用的國產類TMS320C6678 DSP 芯片具有8 個內核,每個內核最高主頻為1 GHz;具有兩組SRIO 控制器,且全部接入SRIO 網絡中,速率均使用4×3.125 Gbps 配置,在接入交換芯片的情況下,實際讀寫吞吐量分別可達到5.9 Gbps、8.6 Gbps;DSP 外部配有8 GB 容量的DDR(雙倍速率同步動態(tài)隨機存儲器),內部配有4 MB 的MSMC(共享內存空間),其他存儲能力與TMS320C6678 完全相同。
系統(tǒng)構成圖如圖1 所示,四片類6678 DSP 芯片通過1848 交換芯片接入共同的SRIO 網絡,每片DSP與交換芯片間都有兩組SRIO 相連接,傳輸數(shù)據(jù)時可獨立并行傳輸。
圖1 系統(tǒng)構成圖
在該文方案中,可以處理的復數(shù)點(4 字節(jié)實部+4 字節(jié)虛部)上限為64k×64k 的二維矩陣(共32 GB數(shù)據(jù)),完整的待處理數(shù)據(jù)矩陣將被分成2×2個子矩陣(對應4 個DSP 組成的2×2 DSP 矩陣)分布式地保存在四片DSP 的DDR 中,(1,1)子矩陣被保存在(1,1)號DSP 中,(1,2)子矩陣被保存在(1,2)號DSP中,以此類推,數(shù)據(jù)矩陣分塊方法如圖2 所示。
圖2 數(shù)據(jù)矩陣分塊方法
考慮到可擴展性的需要,在其他應用場景中,可根據(jù)待處理矩陣數(shù)據(jù)量靈活地選擇SRIO 網絡中參與存取處理數(shù)據(jù)的DSP 矩陣規(guī)模,若選擇的DSP 矩陣模型為m×n(共m×n片DSP),則數(shù)據(jù)矩陣也要相應的被分割成m×n個子矩陣,并依據(jù)編號對應的保存在相應的DSP 中,如圖3 所示。
圖3 規(guī)模為m×n的DSP矩陣架構圖
雷達成像數(shù)據(jù)一般以二維復數(shù)點矩陣形式排列,矩陣的行、列兩個維度分別對應著方位向和距離向兩類數(shù)據(jù),在存儲時,若單獨地以某一個維度為單位將整個數(shù)據(jù)矩陣存入DDR 中,那么由于存儲單位使用的維度對應的數(shù)據(jù)在DDR 中連續(xù)存儲,其讀寫速度非??欤硪痪S度的數(shù)據(jù)在DDR 中會以不連續(xù)的方式排列,且隨著數(shù)據(jù)體量的增大間隔也越大,同時會頻繁發(fā)生跨頁(DDR 中的存儲單位)讀寫數(shù)據(jù)的情況,此時,其對應的讀寫效率非常差。所以在DDR 中存寫數(shù)據(jù)矩陣時,都應依據(jù)一定的存寫策略平衡兩個維度的速率,以提高整體效率。
該文方案中使用如下存儲方法,以2×2 的DSP模型(共4 片)和64k×64k 的二維數(shù)據(jù)矩陣為例:
64k×64k 的二維數(shù)據(jù)矩陣會被分為2×2 個32k×32k 的子矩陣分別存儲在每片DSP 的DDR 中,為均衡行數(shù)據(jù)和列數(shù)據(jù)在DDR 中的讀寫速率,將數(shù)據(jù)矩陣分解為兩種規(guī)模的數(shù)據(jù)塊Rank 和Block,劃分規(guī)則如下:
原始數(shù)據(jù)矩陣(32k×32k)如圖4 所示,每一個數(shù)據(jù)點由其在矩陣中的行序號和列序號表示,表示形式為(0,0)~(32k-1,32k-1):
圖4 原始數(shù)據(jù)矩陣
Rank:每一列中以h(以h為512 為例,可根據(jù)DDR 的具體類型選擇最優(yōu)的h值)個點為一組,定義為一個Rank,Rank 為存入ddr 中的基本單元,每一個Rank 中的數(shù)據(jù)按順序寫入ddr 的一段連續(xù)空間,如圖5 所示。
圖5 Rank在數(shù)據(jù)矩陣中的定義
Block:每一行Rank(以Rank為單位,包括Rank0~32k-1)為一個Block,如圖6 所示,32k×32k 數(shù)據(jù)矩陣中存在64 個Block,同一個Block 內的不同Rank 之間依照序號順序先后寫入連續(xù)的DDR 空間,該例中寫入Block0 數(shù)據(jù)塊時,先寫入Rank0,再寫入Rank1,依次寫入Block0 中的全部Rank。
圖6 Block在數(shù)據(jù)矩陣中的定義
Block 之間同樣依照序號順序依次寫入連續(xù)的DDR 空間,在DDR 中,用于存儲數(shù)據(jù)矩陣的起始地址開始存寫B(tài)lock0 數(shù)據(jù)塊,在Block0 數(shù)據(jù)塊的下一個連續(xù)地址寫入Block1 數(shù)據(jù)塊,依次寫入全部Block數(shù)據(jù)塊。
由于圖像處理的高效性要求,往往采用并行處理的方式,既包括8 核的并行數(shù)據(jù)處理,也包括同步進行的數(shù)據(jù)傳輸與數(shù)據(jù)處理。
利用芯片的集成外設DMA(Direct Memory Access)控制器[17],可以實現(xiàn)DMA 控制器進行數(shù)據(jù)搬移的同時使用CPU 并行執(zhí)行數(shù)據(jù)處理;使用ping-pong 模式,CPU 處理ping 區(qū)數(shù)據(jù)時DMA 搬移數(shù)據(jù)至pong區(qū),CPU 處理完ping 區(qū)數(shù)據(jù)后開始處理pong 區(qū)數(shù)據(jù),此時DMA 開始搬移并更新ping 區(qū)數(shù)據(jù)。
數(shù)據(jù)傳輸部分包括兩個環(huán)節(jié):1)通過DMA 完成DDR 和本地MSMC 間的傳輸;2)通過SRIO 完成源DSP 與目標DSP 的MSMC 間傳輸。由于存儲方案并沒有線性地將數(shù)組數(shù)據(jù)存入DDR 中,需要使用DMA的多維傳輸和鏈式傳輸模式完成數(shù)據(jù)由DDR 到MSMC 的搬移,流程如下:
行讀寫時,DDR 中數(shù)據(jù)矩陣同一行數(shù)據(jù)的相鄰兩個數(shù)據(jù)點間隔h(即一個Rank 中的點數(shù))個數(shù)據(jù)點(每個復數(shù)點占8 字節(jié)),行讀寫時,使用二維DMA 讀寫,即讀取一個點后間隔h個點讀取下一個點,為提高效率,在多行(設為g行,根據(jù)需要)讀寫中,一次讀取g個數(shù)據(jù)點(g行數(shù)據(jù)中相同序號的數(shù)據(jù)點相鄰,即存在于同一個Rank 中),間隔h個點后再讀取下一組的g個點。
圖7 以512 個點為一個Rank(h=512)、讀寫4 行數(shù)據(jù)(g=4)、以每行32k 個點為例,使用DMA 的二維傳輸模式(以固定間隔跨越式地多次傳輸),以4k Byte 為間隔每次搬移32 Byte,共搬移32k 次,陰影部分為待傳輸數(shù)據(jù)。
圖7 行數(shù)據(jù)在DDR中分布及讀寫示例
列讀寫時,列數(shù)據(jù)在DDR 中被分為數(shù)個Rank 存儲,Rank 中數(shù)據(jù)連續(xù)存儲,同一列數(shù)據(jù)所屬的兩個Rank 間隔h(本例中h為512)×32k(32k×32k 矩陣中)個數(shù)據(jù)點,使用鏈式DMA 進行傳輸,每一個節(jié)點傳輸一個Rank,為提高效率,在多列(g列)傳輸中,一次節(jié)點傳輸g個Rank(同一個Block 內,相鄰列數(shù)據(jù)的Rank 連續(xù))。
圖8 以512 個點為一個Rank(h=512)、讀寫4 列數(shù)據(jù)(g=4)、以每列32k 個點為例,使用DMA 的鏈式傳輸模式,每個DMA 節(jié)點傳輸2 048(512×4 列)個復數(shù)點,一次DMA 傳輸鏈包括64 個節(jié)點(32×1 024/512),陰影部分為待傳輸數(shù)據(jù),每一段陰影部分都為一次DMA 傳輸節(jié)點待傳輸?shù)臄?shù)據(jù)。
圖8 列數(shù)據(jù)在DDR中分布及讀寫示例
為了進一步提高數(shù)據(jù)傳輸?shù)男?,同樣使用ping-pong模式,使DDR 和本地MSMC間的DMA 傳輸、源DSP 與目標DSP 間的SRIO 傳輸兩個環(huán)節(jié)同步執(zhí)行,DMA 向ping 區(qū)搬移數(shù)據(jù)完成后,啟動ping 區(qū)數(shù)據(jù)SRIO 傳輸,同時DMA 開始向pong 區(qū)搬移數(shù)據(jù),通過并行運行減少數(shù)據(jù)讀出DDR 的損耗。
實驗采用圖1 所示的4 片DSP 模型,國產類6678 DSP 主頻時鐘使用1 GHz,DDR 工作時鐘使用667 MHz,兩組SRIO 設備都使用4 路3.125 Gbps 的配置(在通過交換芯片互連的情況下,實測SRIO 讀模式可達2×8.503 Gbps,寫模式可達2×5.915 Gbps)。
每次測試以讀寫4 條數(shù)據(jù)線為例,每條數(shù)據(jù)線分別訪問64k 個復數(shù)點(共4(線數(shù))×64×1 024(點數(shù))×8(點字節(jié)數(shù))=2 MB 數(shù)據(jù))和32k 個復數(shù)點(共4(線數(shù))×32×1 024(點數(shù))×8(點字節(jié)數(shù))=1 MB 數(shù)據(jù)),存儲策略中Rank的h參數(shù)使用512。
該文方案實際傳輸帶寬及與傳統(tǒng)線性存儲方案(以行為單位逐字節(jié)存入DDR 中)對比如表1 和表2。
表1 訪問4線64k個復數(shù)點實驗性能對比表
表2 訪問4線32k個復數(shù)點實驗性能對比表
由實驗結果可以看出,由于采用了DMA 和SRIO并行工作的ping-pong 模式,完整流程的傳輸帶寬會受到二者中速率較慢一方的限制。
傳統(tǒng)線性存儲方式中,若以行為單位逐字節(jié)地將數(shù)據(jù)存入DDR 中,由于行數(shù)據(jù)在DDR 中連續(xù),DMA 對DDR 中行數(shù)據(jù)的寫入、讀出非??焖伲藭r數(shù)據(jù)傳輸?shù)膸拑H受SRIO 帶寬上限制約;但由于列數(shù)據(jù)在DDR 中不連續(xù),且同一列中連續(xù)的兩點之間間隔較大,實驗中間隔32k 個復數(shù)點(即256 kB,一片DSP 中存有32k×32k 數(shù)據(jù)矩陣),DMA 對DDR 中列數(shù)據(jù)的寫入讀出效率非常低(由于DDR 中頁屬性的限制,兩點間間隔越大,跨頁越多,耗時越久),此時數(shù)據(jù)傳輸?shù)膸捠蹹MA 對DDR 中數(shù)據(jù)讀寫速率的限制。
通過對比可以看出,使用該文方案后,列數(shù)據(jù)在DDR 中以Rank 的形式存儲,Rank 內部連續(xù)存儲,Rank 間離散分布,此時使用DMA 的鏈式傳輸模式,可以使列數(shù)據(jù)傳輸帶寬得到大幅提高;同時,雖然行數(shù)據(jù)由連續(xù)分布變?yōu)榱穗x散分布,但連續(xù)兩點之間的存儲間隔可控,且會被設置為較小值,以便增加單個DDR 頁(DDR 中的存儲單位)中的存儲行點數(shù),此時行數(shù)據(jù)讀寫時跨頁的消耗會被大大減少,最后達到在提高列數(shù)據(jù)傳輸速率的同時有限地降低行數(shù)據(jù)獲取性能的目的。
此方案中的讀寫性能同時也受訪問數(shù)據(jù)線數(shù)的影響,訪問的數(shù)據(jù)線數(shù)目越多,待操作的數(shù)據(jù)分布在同一個DDR 頁中的部分就越多,性能便越高,反之性能則會有所下降,實驗結果如表3 所示。
表3 訪問線數(shù)不同時實驗性能對比表
實驗數(shù)據(jù)可以看出,幾種訪問方式下,隨著訪問數(shù)據(jù)線數(shù)的降低,數(shù)據(jù)存寫效率也隨之降低,常用的2 線和4 線存寫和8 線相比性能分別下降了20%和10%,當只進行單線讀寫時速率達到最低,僅能達到8 線訪問性能的60%,實際應用中可根據(jù)具體需求選擇最合適的訪問模式來完成二維矩陣的傳輸。
該文提出的基于SRIO 網絡的多DSP 架構模式簡單靈活易擴展,有效解決了存儲數(shù)據(jù)量龐大及系統(tǒng)芯片間數(shù)據(jù)矩陣傳輸效率的問題,搭配文中闡述的二維矩陣存儲方案,相較于線性存儲,顯著地提高了兩個維度中較慢維度的傳輸速率,同時對另一維度數(shù)據(jù)的存取影響有限,使系統(tǒng)的綜合效率得以提高。