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.

[参考译文] 66AK2H12:L2和 MSMC SRAM 之间的数据复制延迟

Guru**** 2613765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/582441/66ak2h12-data-copy-latency-between-l2-and-msmc-sram

器件型号:66AK2H12

我针对  不同大小的数据测量了 L2和 MSMC SRAM 之间的数据复制延迟。

我使用 memcpy()复制数据并将 MSMCSRAM 设置为不可连接的区域。

L2->MSMCSRAM

 4KB:1.545us

 -128KB:50.340us

MSMCSRAM->L2:

 4KB:11.035us

 -128KB:351.993us

COPY (MSMCSRAM ->L2 )所需的时间比 COPY (L2 ->MSMCSRAM)长7倍。

此结果 是否合理? 是否有人解释原因?

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

    我已通知设计团队。 他们的反馈将在此处发布。

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

    一般来说、写操作比读操作快一点、因为一般来说、写操作不会阻塞操作。 也就是说、写入路径上有缓冲、即使在数据传输到存储器之前、内核也能继续处理。

    我有一个问题要问:如何将 MSMCSRAM 设置为不可连接的区域? 您使用了什么来实现它? 默认情况下、MSMC 存储器不是 L2缓存、而是 L1缓存。 如果我正确记住、则无法覆盖该区域的 MAR 寄存器。

    我建议首先禁用缓存(L2和 L1D)、然后重复该实验。

    请进行无缓存实验并返回论坛。

    此致

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

    我假设它符合 SPRABK5B (KeyStone II 的吞吐量性能指南):MCSM 配置为 L3存储器、单次读取时有25个 DSP 停止周期。

    一个简化的估计值可以是:(4KB/8 )*25=12800周期@ 1GHz =12.800us。 "div 8"是由于 memcopy 可能使用64位访问。

    另一方面、写入时、我假设 DSP 回写写缓冲器(128位、4个入口深度)隐藏了该 STALL。
    写入时、同样在 DDR3上、启用或不启用高速缓存时、性能差异不大。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、ran35366、感谢您的回复。

    我 制作了如下代码来重新映射 MSMCSRAM 区域并禁用该区域的高速缓存。

    我参考 了 https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/164833

    #define MSMC_LOGICAL_ADDR  (0x24000000)

    struct CSL_XMC_XMPAXL 低结构体;
    struct CSL_XMC_XMPAXH higherStructure;

    lowerStructure.rAddr = 0x00C000;  
    lowerStructure.SR = 1; //主管读取
    lowerStructure.sw= 1; //管理员写入
    lowersStructure.sx = 0; //主管执行
    lowerStructure.ur = 1; //主管读取
    lowerStructure.UW= 1; //主管写入
    lowerStructure.UX = 0; //主管执行

    higherStructure.bAddr = 0x24000;  
    higherStructure.segSize= 0x15; //4MB

    CSL_XMC_setXMPAXH (3,&higherStructure);
    CSL_XMC_setXMPAXL (3,低结构体);  


    cache_disablecaching((MSMC_logical_ADDR)>>24);

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

    那么、考虑一下 Alberto 所写的内容、让我们尝试其他一些东西
    让我们不更改 MSMC 存储器的逻辑地址、而是禁用所有高速缓存。 您可以找到 CSL 函数或 BIOS 函数来将 L1D 的大小(这是您唯一关心的)设置为零、将 L1P 缓存的大小设置为零、并将代码加载到 L1P、 然后测量周期(如果您不想同时使用这两个函数、在 CSL 或 BIOS 中、您可以找到控制寄存器并禁用那里的缓存)

    请报告您的测量值。 我对你的观察非常感兴趣

    此致

    已运行