摘 要: 為充分挖掘多核DSP能力,結合TI的TMS320C6678 DSP的存儲器架構,分析了各個關鍵節(jié)點的理論數據傳輸帶寬,展開了對多核DSP主設備(CPU內核、EDMA控制器)并行訪問存儲器(共享SL2、外部DDR3)的性能研究,并采用數據拷貝測試實驗進行驗證,最后討論了影響帶寬的因素,對多核軟件設計具有一定的指導意義。
關鍵詞: 多核DSP;存儲器性能;TMS320C6678
嵌入式領域的處理器設計已向多核處理器迅速發(fā)展,TI最新的8核DSP處理器TMS320C6678(以下簡稱C6678),每個內核頻率為1.25 GHz,提供高達40 GB/s MAC定點運算和20 GB/s FLOP浮點運算能力[1],在信號處理、圖像處理等對定浮點運算能力及實時性要求較高的領域得到了廣泛應用。
多核環(huán)境下并行訪問存儲器的性能是多核系統(tǒng)設計和應用開發(fā)的難點之一。郝朋朋[2]研究了多核處理器的體系結構,但沒有對帶寬進行實驗測試和結果分析;吳灝[3]分析了多核DSP的核間通信方法。而本文基于TMS320C6678 DSP,詳細闡述了多核DSP并行訪問存儲器的性能,分析了影響帶寬的因素以及瓶頸所在,對多核軟件設計具有一定的指導意義。
1 C6678多核DSP存儲器架構
存儲器訪問性能對于DSP的軟件運行是至關重要的。C6678 DSP所有的存儲器都可以被DSP內核和多個DMA主設備訪問。圖1顯示了C6678的存儲器系統(tǒng)架構框圖,總線上的數字代表總線寬度,大部分模塊運行在1/2或1/3 DSP內核頻率[1]。
1.1 C66x內核
C6678集成了8個C66x核,每個內核具有以下性能。(1)32 KB L1D(Level 1 Data)SRAM,運行在DSP內核頻率,可用于數據存儲或緩存;(2)32 KB L1P(Level 1 Program)SRAM,運行在DSP內核頻率,可用于程序存儲或緩存;(3)512 KB LL2(Local Level2)SRAM,運行在1/2 DSP內核頻率,可用于程序或數據的存儲RAM或緩存[4]。
所有的DSP內核共享4 MB SL2(Shared Level 2)SRAM,運行在1/2 DSP內核頻率,有4個bank區(qū),可用于數據或代碼存儲[5]。C6678提供了64位1 333 MHz DDR3 SDRAM接口,最高支持8 GB的外部存儲,可用于數據或程序存儲。
C6678運行在1 GHz的時鐘頻率下,每個C66x內核可以執(zhí)行每周期128位的加載和存儲操作。當訪問L1D時,DSP內核的訪問速度高達16 GB/s(如表1所示)。當訪問L2存儲空間時,速率依賴于存儲器訪問模式和緩存配置。C6678提供了內部DMA(IMDA)引擎用于數據搬移,運行在1/2 DSP內核頻率,處理速度高達8 GB/s。IDMA只能用于L1、LL2和外設端口之間的數據搬移,不能訪問外部存儲器[1,4]。
1.2 EDMA傳輸控制器
C6678 DSP提供了10個EDMA傳輸控制器TC,可以同時用于器件任意存儲節(jié)點(L1、L2、外部存儲和片上外設)之間的數據移動[1]。其中兩個EDMA傳輸控制器連接著256 bit高速TeraNet交換橋,運行在1/2 DSP內核頻率,理論上可以支持高達16 GB/s的數據帶寬;其余8個EDMA傳輸控制器連接著128 bit低速TeraNet交換橋,運行在1/3 DSP內核頻率,理論上可以支持高達5.333 GB/s的數據帶寬(如表1所示)。EDMA結構設計了許多特性,專門用于同時進行多個高速數據傳輸。了解這些結構和數據傳輸、交互的方式,才可以建立有效的系統(tǒng),并最大化EDMA傳輸帶寬。
1.3 多核DSP的理論帶寬
從以上的存儲器結構可以分析C6678 DSP的主設備(C66x核和EDMA)訪問不同存儲器(L1D、L1P、LL2、SL2、DDR3)的理論帶寬,它是由該節(jié)點的數據寬度和時鐘頻率計算而得,如表1所示。
C6678包括8個內核和10個EDMA主設備,它們可以并行地訪問存儲器。每個DSP內核集成了各自的L1D、L1P、LL2存儲器,而共享存儲器(SL2、DDR3)在多個主設備(DSP內核、EDMA控制器)并行訪問時的性能,對系統(tǒng)資源的安排、軟件結構的設計有著指導性的意義。接下來通過數據拷貝測試實驗對C6678并行訪問存儲器性能進行說明。
2 并行訪問SL2的性能
所有的主設備可以通過MSMC(Multicore Shared Memory Controller)訪問4個SL2 Bank。多個主設備可以并行地訪問不同的Bank;如果多個主設備訪問同一個Bank,是基于優(yōu)先級仲裁的[4]。
2.1 多個DSP內核共享SL2的情況
圖2給出了1 GHz C6678的多個DSP內核同時訪問SL2的性能測試數據。每個DSP內核分別訪問它在SL2上的數據緩沖區(qū),帶寬是用拷貝的總字節(jié)數除以消耗的總時間。每個內核L1D緩存是32 KB,沒有使用L2緩存。圖2右側圖例的每一行代表一次測試,不同測試中使用不同數目的DSP內核同時訪問存儲器,空表示當前DSP內核沒有參與,柱狀圖表示了相應DSP內核的帶寬,最后給出了所有DSP內核的總體帶寬。
圖2(a)是DSP內核從SL2向LL2拷貝數據,每個內核的帶寬穩(wěn)定在2 GB/s左右;圖2(b)是從DSP內核從LL2向SL2拷貝數據,每個內核的帶寬將近3.6 GB/s。總體帶寬隨著參與核數的增加幾乎成線性增長。以上測試結果表明,SL2不是多個內核同時訪問SL2的瓶頸,SL2有足夠的帶寬(理論64 GB/s)來支持多個內核同時訪問,吞吐量限制是在于DSP內核本身。由于SL2帶寬完全可以滿足多個處理器同時訪問,內核的優(yōu)先級對于這些情況就不重要了。
2.2 多個EDMA共享SL2的情況
圖3給出了1 GHz C6678的多個EDMA同時訪問SL2的性能測試數據。每個EDMA分別訪問它在SL2上的數據緩沖區(qū),帶寬是用拷貝的總字節(jié)數除以消耗的總時間。圖3右側圖例的每一行代表一次測試,不同測試中使用不同數目的EDMA同時訪問存儲器,空表示當前EDMA沒有參與,柱狀圖表示了相應EDMA的帶寬,最后給出了所有EDMA的總體帶寬。
因為C6678有10 TCs,但只有8個DSP內核,在測試中,8個TC(DMA1 TC0~TC3, DMA2 TC0~TC3)用于SL2和每個內核LL2之間的數據搬移,其他兩個TC(DMA0 TC0~~TC1)用于SL2和DDR3之間的數據搬移。圖3(a)和圖3(b)是在10個TC的優(yōu)先級相同、SL2分別作為目的地址和源地址的測試。可以看出總體帶寬不超過16 GB/s,另外性能表現(xiàn):EDMA0>EDMA1>EDMA2,這是因為C6678的EDMA0專門為DDR3和SL2之間的數據傳輸進行了優(yōu)化[1]。圖3(c)和圖3(d)是在10個TC的優(yōu)先級不一樣、SL2分別作為目的地址和源地址的測試??梢钥闯隹傮w帶寬同樣不超過16 GB/s,低優(yōu)先級的EDMA分得較少的帶寬,對于那些數據負載非常嚴重的情況,一些低優(yōu)先級的EDMA可能會帶寬為0。
由測試結果表明,雖然SL2有非常高的帶寬,但是所有的EDMA是通過TeraNet交換橋的同一個端口訪問SL2的,因此TeraNet總線是多個EDMA并行訪問SL2的瓶頸,它只有理論16 GB/s(500 MHz×32 B)的帶寬來支持多個EDMA同時訪問。如果EDMA的優(yōu)先級是一樣的,帶寬基本上平均分配,略有差異??梢宰⒁獾?,即使優(yōu)先級相同的情況,DMA1 TC1和TC3,DMA2 TC1和TC2的帶寬比其他少。這是因為C6678的EDMA TC的FIFO大小和總線寬度不一樣(如表2所示)[1],TC的數據搬移能力存在一定的差異。
3 并行訪問DDR3的性能
如果幾個主設備同時訪問DDR3,則基于主設備的優(yōu)先級進行仲裁。實驗用的C6678板的DDR有8個Bank,盡管DDR3有多個Bank,但是不像SL2有多個總線連接到每個Bank,因此,Bank數目不會直接提高吞吐量。
3.1 多個DSP內核共享DDR3的情況
圖4給出了不同應用場景下多個DSP內核共享 1 GHz C6678處理板的64 bit 1 333 MHz DDR3的性能。每個DSP內核分別訪問DDR3上對應的數據緩沖區(qū)。用拷貝的數據量除以消耗的總時間就得到了每個主設備的帶寬。圖4右側圖例的每一行代表一次測試,不同測試中使用不同數目的DSP內核同時訪問DDR3,空表示當前DSP內核沒有參與,柱狀圖表示了相應DSP內核的帶寬,最后給出了所有DSP內核的總體帶寬。
在該測試中,DDR3支持緩存、支持預取,L1D緩存為32 KB,L2緩存為256 KB。非緩存的情況沒有測試,因為它的數據傳輸帶寬要小得多。多個內核訪問相同Bank的性能較差;而多個內核訪問不同Bank的性能較好,原因在于DDR3的行切換負載。
圖4(a)~圖4(d)是在DSP內核優(yōu)先級相同的情況下,DDR3(不同Bank/相同Bank)與LL2之間相互拷貝數據的帶寬性能。訪問DDR3不同Bank的性能較好,每個內核的帶寬穩(wěn)定在1.4 GB/s左右,總體帶寬隨著參與核數的增加幾乎成線性增長,但不超過10.6 GB/s;而訪問DDR3相同bank的性能較差,在實際應用中需要避免出現(xiàn)這樣的情況。圖4(e)和圖4(f)是在DSP內核優(yōu)先級不一樣的情況下,DDR3(不同Bank)與LL2之間相互拷貝數據的帶寬性能。優(yōu)先級高的DSP內核分得的帶寬較多,但優(yōu)先級對DSP內核帶寬的影響沒有那么明顯;總體帶寬同樣隨著參與核數的增加幾乎成線性增長,但不超過10.6 GB/s。
以上測試結果表明,DDR3帶寬(10 666 MB/s)對于所有的DSP內核同時訪問是不夠的,不同內核的優(yōu)先級會影響它們之間的帶寬分配。當優(yōu)先級相同時,帶寬基本上平均分配;當優(yōu)先級不一樣時,較低優(yōu)先級的分得較少的帶寬。
3.2 多個EDMA共享DDR3的情況
圖5給出了不同應用場景下多個EDMA共享DDR3的性能。每個EDMA分別訪問DDR3上對應的數據緩沖區(qū),帶寬是用拷貝的數據量除以消耗的總時間。圖5右側圖例的每一行代表一次測試,不同測試中使用不同數目的EDMA同時訪問DDR3,空表示當前EDMA沒有參與,柱狀圖表示了相應EDMA的帶寬,最后給出了總體帶寬。
因為C6678有10個TC,但是只有8個DSP內核,以上測試中,8個TC(DMA1 TC0~TC3,DMA2 TC0~TC3)用于傳輸DDR3和內核的LL2之間的數據,其余兩個TC(DMA0 TC0~TC1)用于傳輸DDR3與SL2之間的數據。EDMA TC訪問DDR相同Bank的性能較差;而EDMA TC訪問DDR不同Bank的性能較好。原因是由于DDR的行切換負載。
圖5(a)~圖5(d)是在10個TC的優(yōu)先級相同、DDR3(不同Bank/相同Bank)分別作為目的地址和源地址的測試??梢钥闯隹傮w帶寬不超過10.6 GB/s,另外性能表現(xiàn):EDMA0>EDMA1>EDMA2。圖5(e)和圖5(f)是在10個TC的優(yōu)先級不同、DDR3(不同Bank/相同Bank)分別作為目的地址和源地址的測試。可以看出總體帶寬同樣不超過10.6 GB/s,低優(yōu)先級的EDMA分得較少的帶寬,甚至為0。
結果表明了DDR3沒有足夠的帶寬來支持EDMA TC同時訪問。優(yōu)先級影響著EDMA的帶寬分配,當優(yōu)先級相同時,帶寬基本上平均分配,略有差異;當優(yōu)先級不同時,較低優(yōu)先級的分得較少的帶寬。
C6678的存儲器結構決定了每個關鍵節(jié)點(CPU內核、EDMA、TeraNet總線、SL2、DDR3等)的帶寬能力。在兩個節(jié)點之間進行數據傳輸,帶寬會受到總線帶寬、源地址的吞吐量和目標地址的吞吐量3個因素的限制本文以數據拷貝測試實驗,詳細闡述了m個DSP內核或者n個EDMA控制器(1≤m≤8,1≤n≤10)并行訪問SL2或DDR3存儲器的帶寬性能結果??梢钥偨Y為以下幾點:(1)優(yōu)先級會顯著影響EDMA的帶寬分配,但對DSP內核表現(xiàn)得并不明顯。優(yōu)先級相同時,帶寬幾乎平均分配;優(yōu)先級不同時,低優(yōu)先級的分得較少的帶寬,甚至為0。(2)SL2有足夠大的帶寬支持多個主設備訪問,總體帶寬隨著主設備數目的增加而幾乎線性增加;但由于EDMA控制器都通過TeraNet總線傳輸數據,因此,總線吞吐量成為了多個EDMA控制器訪問SL2的瓶頸。(3)DDR3的帶寬有限(10.6 GB/s),它是多個主設備并行訪問的瓶頸,特別要避免訪問相同Bank。這對于C6678 DSP應用程序存儲器資源的安排、軟件結構的設計有一定的指導價值。
參考文獻
[1] Texas Instruments. TMS320C6678 multicore fixed and floating-point digital signal processor data manual[Z]. 2011.
[2] 郝朋朋,周煦林,唐藝菁,等.基于TMS320C6678多核處理器體系結構的研究[J].微電子學與計算機,2012,29(12):171-175.
[3] 吳灝,肖吉陽,范紅旗,等.TMS320C6678多核DSP的核間通信方法[J].電子技術應用,2012,38(9):11-13.
[4] Texas Instruments. TMS320C66x DSP CorePac user guide[Z]. 2011.
[5] Texas Instruments. KeyStone architecture multicore shared memory controller(MSMC) user guide[Z]. 2011.