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