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.

[参考译文] AM62P:AM62P ->DDR 性能测试

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1631451/am62p-am62p---ddr-perf-test

部件号: AM62P

尊敬的团队:

 

我参考的是此示例-> https://software-dl.ti.com/mcu-plus-sdk/esd/AM62AX/latest/exports/docs/api_guide_am62ax/EXAMPLES_DRIVERS_DDR_PERF.html

据我的理解、它使用“memcpy"来“来加载 BW。 从示例中可以看出、PERF 计数器在 memcpy 操作之前和之后启动。 但我怀疑、计数器是否在 memcpy 操作过程中运行?  它如何测量 BW 在这里? 我想知道 DDR 中性能计数器对于任何应用测量 BW 的作用。  

理解 — 启动计数器+运行应用+停止计数器、但从上面的代码来看、我不会观察到这种行为。 在这里有人帮我。

 

此致、

Shriya

 

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

    计数器位于 DDR 子系统中并执行计数读取/写入操作。  计数器不会启动/停止、它们可以自由运行。  因此、只需在测试前后对计数器进行快照操作。

    此致、

    James

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

    您好、James:  

    感谢您的快速响应和澄清。 在这种情况下,我有一个疑问。 假设我正在运行工作负载、例如 GPU 三角。 我需要在工作负载期间监视 DDR 计数器。 所以根据解释-

    1.读取计数器值。

    2.运行 GPU 工作负载。

    3.读取计数器值。

    获取获得获得获得 BW 所需读数和时间的差异。  这是正确的吗?

    参考 DDR 性能示例后、我感到困惑、因为它没有这样计算 BW。

    代码片段

    //重置计数器、在快照窗口中获取 BW 值、此处为 2 秒。

    ddr_statsResetDdrLoadCalcAll();
    ddr_perfStatsAccumate();

    //工作负载

    memcpy (gDdrTestRxBuf、gDdrTestTxBulkBuf、DDR_perf_APP_10MB_SIZE);

    // 在快照窗口中获取 BW 值、此处为 2 秒。

    ddr_perfStatsAccumate();
    DdrPerfApp_performanceStatusPrint();

    在上述情况下,我们不会测量前后的差异。 那么我们如何进行测量 WORKFLOAD 期间的 BW ? 这是我的怀疑。

    请在这里帮助我。

    谢谢你。

    Shriya

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

    选中 DDR_perfStatsAccumulate 内部。  它获取当前时间的快照、然后读取上面提到的性能计数器、并根据经过的时间计算 BW(以 Mb/s 为单位)。  ddr_statsReadCounter() 读取 DDRSS 中的计数器并确定自上次读取以来的差异。

    此致、

    James

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

    感谢信息,是的,我已经研究了->DDR_perfStatsAccumulate 它获得了 totaltime、totalread.totalwrite 值和复制到结构(这是在工作负载之前),并 在工作负载后再次读取 DDR_perfStatsAccumulate 。

    查询 -

    1.我清楚的时间,它如何计算出两个快照之间的差异。 但从反面角度来看、这是代码的一部分并不明确-  

    对于 (ddrInst = 0ddrInst < DDR_NUM_InstancesddrInst++)
        {
          /* cnt0 用于计数读取、cnt1 用于计数写入、cnt2、cnt3 未使用*/
          *cntSel[ddrInst]=(DDR_STATS_CTRL0_VAL <<  0U)|
                (DDR_STATS_CTRL1_VAL <<  8U)|
                (DDR_STATS_CTRL2_VAL << 16U)|
                (DDR_STATS_CTRL3_VAL << 24U);

          lastcnt0 +=*cnt0[ddrInst]
          lastCnt1 +=*cnt1[ddrInst]
          lastCnt2 +=*cnt2[ddrInst]
          lastCnt3 +=*cnt3[ddrInst]
        }

    在第二个快照窗口中、当计数器正在运行时、它如何记录 lastcnt 值(第一个快照的值)来计算差值?

    2.我目前正在使用 DDR perf 来测量 GPU 工作负载以获得 GPU 带宽。 我使用的是 GPU Workload、而不是 memcpy。 这会有帮助吗? 如果我的进度有误、请指导我。

    谢谢、

    Shriya

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

    1. 函数只是返回上一次计数与当前计数之间的差值。  差异以 diffCnt 为单位、它通过电流计数 (curCnt) 和最后计数 (lastCnt) 计算得出

    2.我不知道 GPU 工作负载是什么,但您应该能够使用 DDR Pert 来测量任何应用的 bw。

    此致、

    James

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

    您好、James:

    感谢您提供信息。

    信息 — GPU 工作负载: 用于渲染 GPU 三角的现有 TI 示例。  

    您的意见有助于更好地理解 DDR 性能测试。 我们可以关闭这个。

    谢谢、

    Shriya