This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TMS320C6678:EDMA3不会缓慢复制和运行

Guru**** 2611705 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/652956/rtos-tms320c6678-edma3-does-not-copy-and-runs-slowly

器件型号:TMS320C6678

工具/软件:TI-RTOS

我使用 EDMA3_LLD 制作了一个小项目。 该项目将数据从 DDR3内存复制到 L2RAM 内存。 但是,不执行复制-内存 L2SRAM 中的阵列为空。 此外、该测试显示复制一个包含128个元素的数组的时间大约为2000个周期!  我使用 CCS 7.3和 EDMA LLD v.2.12.5。

问题可能出在哪呢?

为什么复印速度这么低?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../EDMA3.c

    e2e.ti.com/.../EDMA_5F00_WS.rar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请发布您正在使用的 Processor SDK RTOS 版本。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    EDMA LLD 中存在现有示例、请访问 processors.wiki.ti.com/.../II_devices

    问:什么是软件构建块:EDMA LLD、EDMA CSL 和 StarterWare?
    请尝试通过将数据从 A 移动到 B、然后添加 TSCL/TSCH 分析代码来确保该示例有效。

    此外、一些 RTOS 驱动程序示例使用 EDMA、例如 PCIe 和超链接、它们都使用 PCIe LLD。 您可以检查它们是如何移动数据的。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我将 CCS v7.3与 Processor SDK RTOS v04.02.00搭配使用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试过01/02帖子中提到的任何 EDMA 示例?

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Eric。
    感谢您的回复!
    是的、我尝试了 EDMA 示例。 但这些示例使用 A 同步、但我使用 AB 同步。 我的项目基于这些示例、但出于某种原因、它不起作用。 我的问题正是为什么不进行复印? 我的第二个问题是、为什么复印如此慢(每个计数大约15个时钟周期)? 是的、我通过在代码中添加 TSCL/TSCH 分析来进行测量。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    如果示例是 A-SYNC、则可以将 OPT 字段更改为 AB-SYNC。 首先、现有示例是否按预期移动数据? 然后、如何移动数据? 在芯片内部或两个器件之间通过接口链路 PCIe 或超链接? 如果地址是 L2、您是否将其设为全局地址? 对于 TSCL/TSCH 缓慢、您是否对 DSP 主 PLL 进行编程以获得每个 CPU 周期的正确时间?

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1. 是的、通过移动数据、现有示例按预期工作。
    2. 我将数据移动到芯片内部。
    3. 是的、我忘记了将 L2中的地址设为全局地址。 现在数据已正确复制。 谢谢, 谢谢!
    4. 我通过以下方式测量 CPU 周期中的时间:
    //初始化硬件计时器
    TSCL = 0;TSCH = 0;
    
    //计算两次调用时钟的开销以获取时序信息
    T_start =_itoll (TSCH、TSCL);
    T_stop =_itoll (TSCH、TSCL);
    T_开销= t_stop - t_start;
    
    T_start =_itoll (TSCH、TSCL);
    EDMA_RESULT = EDMA3_DRV_enableTransfer (hEDMA、EDMA_Chid、EDMA3_DRV_TRIG_MODE_MANUAL);
    EDMA_RESULT = EDMA3_DRV_waitAndClearTcc (hEDMA、EDMA_TCC);
    T_stop =_itoll (TSCH、TSCL);
    T_opt =(t_stop - t_start)- t_开销; 

    此时、在1300个周期内复制256个浮点数据样本、每个样本大约5个周期。

    总复制速度为4 (字节)/5 (周期)* 1GHz = 800Mb/s  在表15中的文档" C66x KeyStone 器件的吞吐量性能指南"中、声明了速度10664 Mb/s。

    为什么我获得如此低的 EDMA 速度?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我制作了一个项目、将浮点格式的2x4096个样本从一个内存区域复制到另一个内存区域、并测量复制速度。  我使用评估板 TMDSEVM6678LE 上的 Blackhawk XDS560v2仿真器运行代码。
    通过不同的组合、我得到了以下结果:

    目的

    测得的速度、Mb/s

    文档中的速度、Mb/s

    DDR3

    MSMSRAM

    8000

    10664

    MSMSRAM

    DDR3

    9000

    10664

    DDR3

    L2 SRAM

    4985.

    10664

    L2 SRAM

    DDR3

    5033

    10664

    我估计复印速度如下:speed[MB/s]=2*4096*sizeof (float)*1000[MHz]/t_opt

    我的项目是 e2e.ti.com/.../EDMA3.zip

    为什么结果与文档《C66x KeyStone 器件吞吐量性能指南》中的结果有很大不同?

    为什么速度取决于复印的方向?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您的测试中有多少个并行 EDMA 传输? 使用一个 EDMA 通道是不够的、您至少需要3个 EDMA 传输并行以实现文档中的速度。

    您在这里的目标是什么? 尝试复制文档中的基准测试、还是只尝试为您的单 EDMA 通道应用获得最佳吞吐量? 您还可以对代码进行"-O3"优化。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    使用"-O3"优化获得结果。

    是的、我的目标是在使用一个 EDMA 通道时获得最大带宽。

    • 我得到的结果是最好的?
    • 为什么内存 L2SRAM 和 MSMSRAM 从 DDR3复制的速度不同?
    • 如何在多个通道上执行并行传输?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我认为您引用的数字来自 www.ti.com/.../sprabk5b.pdf。 这些数字通过并行使用多个通道来进行训练。 如果仅使用一个通道、则典型吞吐量约为5000-6000 Mbps。 您的结果看起来不错。

    要使多个通道并行、您可以先设置多个通道、然后仅使用一个内核按顺序启用传输。 只要上一个传输未完成、您就有多个 EDMA 传输重叠。 或者、您可以使用多个内核、每个内核启动传输并持续执行该操作。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我是否理解正确、为了并行使用两个通道、我应该:将数据分配给2个块;第一个通道从第一个块复制数据、第二个通道从第二个块复制数据?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、没错。

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Eric!