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.

[参考译文] TDA4VM:峰值 DDR 带宽计算和 DDR 性能计数器。

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1364487/tda4vm-peak-ddr-bandwidth-calculation-and-ddr-performance-counter

器件型号:TDA4VM

您好!

我们使用的是 PSDK 08.06.00.11。

appPerfStatsDdrStatsPrintAll ()( vision_apps/utils/perf_stats/psp_perf_stats_api.c )显示峰值带宽过大,超过 src 硬件规格(14.9Gb/s )。

DDR 性能统计信息、
================
DDR:读取 BW:平均值=7555MB/s、峰值=29782MB/s
DDR:写入 BW:平均值= 8623MB/s、峰值= 33800MB/s
DDR:总 BW:平均值=16178MB/s、峰值=63582MB/s

计算带宽的 appPerfStatsDddrStatsUpdate()函数如下所示

===

...

appPerfStatsDdrStatsReadCounters (&val0、&val1、&val2、&val3、false);

uint64_t write_bytes = val0 * app_perf_DDR_BURST_SIZE_BYTES;
uint64_t read_Bytes = val1 * APP_PERF_DDR_BURST_SIZE_BYTES;
.

uint32_t read_bw_peak = read_Bytes/elapsed_time;/*以 Mb/s 为单位*/
uint32_t write_bw_peak = write_bytes/elapsed_time;/*以 Mb/s 为单位*/

===

如果在峰值带宽过大时打印上述变量、
elapsed_time 很小、并且 DDR 性能计数器值太大、因此计算出的带宽过大。

示例)
elapsed_time : 49 us , read_bytes : 3302400
Read_bw_peak = 67395Mb/s

在这种情况下、DDR 性能计数器和峰值是否应被视为正常?

根据 TDA4VM EVM 硬件规范(14.9GB/s)、在49us 内峰值应高达735KB、对吗?

是否有任何想法表明报告的峰值会超出器件的理论限制?

是否有办法精确测量峰值 DDR 带宽?

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

    您好!

    我想知道您在什么情况下看到此问题吗?  

    运行任何 SDK 开箱即用演示时是这样吗?

    此致、

    Nikhil

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

    我们在 ARM 上与 TIDL 同时运行 ADAS 应用、TIDL 也使用 DSP/MMA 运行。

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

    您好!

    让我在内部检查一下、然后再给您答复

    此致、

    Nikhil

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

    您好!

    您能把这里涉及的每个变量写成这样吗 uint64_t?  

    例如、 elapsed_time、 read_bw_peak、write_bw_peak 等?

    此致、

    Nikhil

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

    我已尝试将涉及的所有变量设为 uint64_t、但结果是相似的。
    elapsed_time 很小、write_bytes 值太大)

    uint64_t elapsed_time;
    ...
    uint64_t Read_bw_peak = Read_Bytes/elapsed_time;/*以 Mb/s 为单位*/
    uint64_t write_bw_peak = write_bytes/elapsed_time;/*以 Mb/s 为单位*/

    ...

    printf ("elapsed_time:%4lld、RD:%8lld、WR:%8lld、RD peak:%6lld、WR peak:%6lld\n"、elapsed_time、read_bytes、write_bytes、read_bw_peak、write_bw_peak);



    结果)

    [MCU2_1]   78.562996s:elapsed_time: 46、RD: 1470464、WR:  992896、RD 峰值: 31966、WR 峰值: 21584

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

    您好!

    您是否可以在每次读取后使用 API appPerfStatsDdrStatsResetAll()进行重置?

    此致、

    Nikhil

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

    以上结果是调用 appPerfStatsDdrStatsPrintAll()的结果、该调用已在末尾调用 appPerfStatsDdrStatsResetAll()

    appPerfStatsDdrStatsPrintAll ()( vision_apps/utils/perf_stats/perf_stats/app_perf_stats_api.c src )  

    int32_t
    appPerfStatsPrintAll ()
      appPerfStatsCpuLoadPrintAll();
      appPerfStatsHwaLoadPrintAll();
      appPerfStatsDdrStatsPrintAll();
      appPerfStatsCpuStatsPrintAll();
      appPerfStatsResetAll();
      返回0;
    }

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

    您好!

    [报价 userid="524892" url="~/support/processors-group/processors/f/processors-forum/1364487/tda4vm-peak-ddr-bandwidth-calculation-and-ddr-performance-counter/5218212 #5218212"][MCU2_1]   78.562996 s:elapsed_time: 46、RD: 1470464、WR:  992896、RD 峰值: 31966、WR 峰值: 21584

    我是否可以知道调用它的间隔速率是多少?

    您能否发送完整日志(即此日志上方和下方的正确日志)  

    我还可以介绍一下您正在运行的应用程序(即图形中使用的节点和内核)吗?

    此致、

    Nikhil

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

    您好!

    感谢您分享日志。

    我在这里看到问题中的一种模式。

    每次从 A72读取数据时、峰值都会增加、即从 A72读取数据之后 MCU2_1的第一个日志、如下所示

    Fullscreen
    1
    2
    DDR: READ BW: AVG = 4018 MB/s, PEAK = 77793 MB/s WRITE BW: AVG = 2363 MB/s, PEAK = 20317 MB/s TOTAL BW: AVG = 6381 MB/s, PEAK = 98110 MB/s
    [MCU2_1] 536.241273 s: elapsed_time:52, RD: 1858432, WR: 1427072,, RD PEAK: 35739, WR PEAK: 27443
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    只是为了确认相同、您能否共享相同的日志 没有做 复位到 DDR 统计信息、会发生什么情况呢? 即请勿调用  appPerfStatsDdrStatsResetAll()

    此致、

    Nikhil

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

    虽然我们现在无法共享日志、但我们可以看到异常峰值仅在调用后立即出现  appPerfStatsDdrStatsResetAll()。
    但是、您知道、如果不调用复位、我们就无法测量特定时间段内的平均值和峰值。

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

    您好!

    GTC 似乎是一个问题。 您是否能够按照如下所述修改读取 GTC 计时器的 API  

    (54) PROCESSOR-SDK-J721S2:GTC 读取异常-处理器论坛-处理器- TI E2E 支持论坛

    此致、

    Nikhil

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

    您好!

    请告诉我应该修改与 GTC 计时器相关的 API。

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

    您好!

    逻辑必须在 appLogGetGlobalTimeInUsec() API 中实现。

    这个逻辑确保 GTC 的高位和低位同步。

    请在最后尝试相同的方法

    此致、

    Nikhil

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

    您好!

    我按如下方式修改了代码、但结果是相同的。
    峰值带宽值仍然过大。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define GET_GTC_VALUE_LO32 (*(volatile uint32_t*)(GTC_BASE_ADDR + 0x8U))
    #define GET_GTC_VALUE_HI32 (*(volatile uint32_t*)(GTC_BASE_ADDR + 0xCU))
    uint64_t appLogGetGlobalTimeInUsec()
    {
    uint64_t cur_ts = 0; /* Returning ts in usecs */
    if (((uintptr_t)NULL != GTC_BASE_ADDR) &&
    (0 != mhzFreq) )
    {
    #if 1 // modified
    uint32_t vct_lo, vct_hi, tmp_hi;
    uint64_t gtc_value64;
    do {
    vct_hi = GET_GTC_VALUE_HI32;
    vct_lo = GET_GTC_VALUE_LO32;
    tmp_hi = GET_GTC_VALUE_HI32;
    } while (vct_hi != tmp_hi);
    gtc_value64 = ((uint64_t) vct_hi << 32) | vct_lo;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您好!

    我相信 DDR B/W 的平均值在指定范围内。

    下面的主题讨论了相同的内容

    (+) TDA4VL-Q1:峰值 DDR 带宽计算-处理器论坛-处理器- TI E2E 支持论坛

    请参阅该主题中的上述建议。

    此致、

    Nikhil

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

    您好、 Nikhil:
    我阅读了您指出的主题、但我仍然不明白峰值带宽值为什么会大于 h/w 规格。
    我是否应该将该峰值带宽值视为无效并将其忽略?

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

    您好!

    您是否有办法在我结束时重现此问题?  

    只有在短时间间隔内连续调用 API 时才能看到此情况、还是即使在两者之间以很长的间隔调用时也能看到此情况?

    同时、我建议采用平均值。 并考虑电阻值

    此致、

    Nikhil