TMS320C6678多核DSP并行访问存储器性能的研究
摘 要: 为充分挖掘多核DSP能力,结合TI的TMS320C6678 DSP的存储器架构,分析了各个关键节点的理论数据传输带宽,展开了对多核DSP主设备(CPU内核、EDMA控制器)并行访问存储器(共享SL2、外部DDR3)的性能研究,并采用数据拷贝测试实验进行验证,最后讨论了影响带宽的因素,对多核软件设计具有一定的指导意义。 关键词: 多核DSP;存储器性能;TMS320C6678
嵌入式领域的处理器设计已向多核处理器迅速发展,TI最新的8核DSP处理器TMS320C6678(以下简称C6678),每个内核频率为1.25 GHz,提供高达40 GB/s MAC定点运算和20 GB/s FLOP浮点运算能力[1],在信号处理、图像处理等对定浮点运算能力及实时性要求较高的领域得到了广泛应用。
多核环境下并行访问存储器的性能是多核系统设计和应用开发的难点之一。郝朋朋[2]研究了多核处理器的体系结构,但没有对带宽进行实验测试和结果分析;吴灏[3]分析了多核DSP的核间通信方法。而本文基于TMS320C6678 DSP,详细阐述了多核DSP并行访问存储器的性能,分析了影响带宽的因素以及瓶颈所在,对多核软件设计具有一定的指导意义。 1 C6678多核DSP存储器架构
存储器访问性能对于DSP的软件运行是至关重要的。C6678 DSP所有的存储器都可以被DSP内核和多个DMA主设备访问。图1显示了C6678的存储器系统架构框图,总线上的数字代表总线宽度,大部分模块运行在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区,可用于数据或代码存储[5]。C6678提供了64位1 333 MHz DDR3 SDRAM接口,最高支持8 GB的外部存储,可用于数据或程序存储。 C6678运行在1 GHz的时钟频率下,每个C66x内核可以执行每周期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,可以同时用于器件任意存储节点(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结构设计了许多特性,专门用于同时进行多个高速数据传输。了解这些结构和数据传输、交互的方式,才可以建立有效的系统,并最大化EDMA传输带宽。 1.3 多核DSP的理论带宽
从以上的存储器结构可以分析C6678 DSP的主设备(C66x核和EDMA)访问不同存储器(L1D、L1P、LL2、SL2、DDR3)的理论带宽,它是由该节点的数据宽度和时钟频率计算而得,如表1
所示。
C6678包括8个内核和10个EDMA主设备,它们可以并行地访问存储器。每个DSP内核集成了各自的L1D、L1P、LL2存储器,而共享存储器(SL2、DDR3)在多个主设备(DSP内核、EDMA控制器)并行访问时的性能,对系统资源的安排、软件结构的设计有着指导性的意义。接下来通过数据拷贝测试实验对C6678并行访问存储器性能进行说明。 2 并行访问SL2的性能 所有的主设备可以通过MSMC(Multicore Shared Memory Controller)访问4个SL2 Bank。多个主设备可以并行地访问不同的Bank;如果多个主设备访问同一个Bank,是基于优先级仲裁的[4]。
2.1 多个DSP内核共享SL2的情况
图2给出了1 GHz C6678的多个DSP内核同时访问SL2的性能测试数据。每个DSP内核分别访问它在SL2上的数据缓冲区,带宽是用拷贝的总字节数除以消耗的总时间。每个内核L1D缓存是32 KB,没有使用L2缓存。图2右侧图例的每一行代表一次测试,不同测试中使用不同数目的DSP内核同时访问存储器,空表示当前DSP内核没有参与,柱状图表示了相应DSP内核的带宽,最后给出了所有DSP内核的总体带宽。
图2(a)是DSP内核从SL2向LL2拷贝数据,每个内核的带宽稳定在2 GB/s左右;图2(b)是从DSP内核从LL2向SL2拷贝数据,每个内核的带宽将近3.6 GB/s。总体带宽随着参与核数的增加几乎成线性增长。以上测试结果表明,SL2不是多个内核同时访问SL2的瓶颈,SL2有足够的带宽(理论64 GB/s)来支持多个内核同时访问,吞吐量限制是在于DSP内核本身。由于SL2带宽完全可以满足多个处理器同时访问,内核的优先级对于这些情况就不重要了。
2.2 多个EDMA共享SL2的情况
图3给出了1 GHz C6678的多个EDMA同时访问SL2的性能测试数据。每个EDMA分别访问它在SL2上的数据缓冲区,带宽是用拷贝的总字节数除以消耗的总时间。图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的优先级相同、SL2分别作为目的地址和源地址的测试。可以看出总体带宽不超过16 GB/s,另外性能表现:EDMA0>EDMA1>EDMA2,这是因为C6678的EDMA0专门为DDR3和SL2之间的数据传输进行了优化[1]。图3(c)和图3(d)是在10个TC的优先级不一样、SL2分别作为目的地址和源地址的测试。可以看出总体带宽同样不超过16 GB/s,低优先级的EDMA分得较少的带宽,对于那些数据负载非常严重的情况,一些低优先级的EDMA可能会带宽为0。 由测试结果表明,虽然SL2有非常高的带宽,但是所有的EDMA是通过TeraNet交换桥的同一个端口访问SL2的,因此TeraNet总线是多个EDMA并行访问SL2的瓶颈,它只有理论16 GB/s(500 MHz×32 B)的带宽来支持多个EDMA同时访问。如果EDMA的优先级是一样的,带宽基本上平均分配,略有差异。可以注意到,即使优先级相同的情况,DMA1 TC1和TC3,DMA2 TC1和TC2的带宽比其他少。这是因为C6678的EDMA TC的FIFO大小和总线宽度不一样(如表2所示)[1],TC的数据搬移能力存在一定的差异。 3 并行访问DDR3的性能
如果几个主设备同时访问DDR3,则基于主设备的优先级进行仲裁。实验用的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上对应的数据缓冲区。用拷贝的数据量除以消耗的总时间就得到了每个主设备的带宽。图4右侧图例的每一行代表一次测试,不同测试中使用不同数目的DSP内核同时访问DDR3,空表示当前DSP内核没有参与,柱状图表示了相应DSP内核的带宽,最后给出了所有DSP内核的总体带宽。
在该测试中,DDR3支持缓存、支持预取,L1D缓存为32 KB,L2缓存为256 KB。非缓存的情况没有测试,因为它的数据传输带宽要小得多。多个内核访问相同Bank的性能较差;而多个内核访问不同Bank的性能较好,原因在于DDR3的行切换负载。
图4(a)~图4(d)是在DSP内核优先级相同的情况下,DDR3(不同Bank/相同Bank)与LL2之间相互拷贝数据的带宽性能。访问DDR3不同Bank的性能较好,每个内核的带宽稳定在1.4 GB/s左右,总体带宽随着参与核数的增加几乎成线性增长,但不超过10.6 GB/s;而访问DDR3相同bank的性能较差,在实际应用中需要避免出现这样的情况。图4(e)和图4(f)是在DSP内核优先级不一样的情况下,DDR3(不同Bank)与LL2之间相互拷贝数据的带宽性能。优先级高的DSP内核分得的带宽较多,但优先级对DSP内核带宽的影响没有那么明显;总体带宽同样随着参与核数的增加几乎成线性增长,但不超过10.6 GB/s。 以上测试结果表明,DDR3带宽(10 666 MB/s)对于所有的DSP内核同时访问是不够的,不同内核的优先级会影响它们之间的带宽分配。当优先级相同时,带宽基本上平均分配;当优先级不一样时,较低优先级的分得较少的带宽。 3.2 多个EDMA共享DDR3的情况
图5给出了不同应用场景下多个EDMA共享DDR3的性能。每个EDMA分别访问DDR3上对应的数据缓冲区,带宽是用拷贝的数据量除以消耗的总时间。图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的优先级相同、DDR3(不同Bank/相同Bank)分别作为目的地址和源地址的测试。可以看出总体带宽不超过10.6 GB/s,另外性能表现:EDMA0>EDMA1>EDMA2。图5(e)和图5(f)是在10个TC的优先级不同、DDR3(不同Bank/相同Bank)分别作为目的地址和源地址的测试。可以看出总体带宽同样不超过10.6 GB/s,低优先级的EDMA分得较少的带宽,甚至为0。
结果表明了DDR3没有足够的带宽来支持EDMA TC同时访问。优先级影响着EDMA的带宽分配,当优先级相同时,带宽基本上平均分配,略有差异;当优先级不同时,较低优先级的分得较少的带宽。
C6678的存储器结构决定了每个关键节点(CPU内核、EDMA、TeraNet总线、SL2、DDR3等)的带宽能力。在两个节点之间进行数据传输,带宽会受到总线带宽、源地址的吞吐量和目标地址的吞吐量3个因素的限制本文以数据拷贝测试实验,详细阐述了m个DSP内核或者
n个EDMA控制器(1≤m≤8,1≤n≤10)并行访问SL2或DDR3存储器的带宽性能结果。可以总结为以下几点:(1)优先级会显著影响EDMA的带宽分配,但对DSP内核表现得并不明显。优先级相同时,带宽几乎平均分配;优先级不同时,低优先级的分得较少的带宽,甚至为0。(2)SL2有足够大的带宽支持多个主设备访问,总体带宽随着主设备数目的增加而几乎线性增加;但由于EDMA控制器都通过TeraNet总线传输数据,因此,总线吞吐量成为了多个EDMA控制器访问SL2的瓶颈。(3)DDR3的带宽有限(10.6 GB/s),它是多个主设备并行访问的瓶颈,特别要避免访问相同Bank。这对于C6678 DSP应用程序存储器资源的安排、软件结构的设计有一定的指导价值。