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