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.
您好!
我们使用的是 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 值太大)
...
结果)
[MCU2_1] 78.562996s:elapsed_time: 46、RD: 1470464、WR: 992896、RD 峰值: 31966、WR 峰值: 21584
您好!
您是否可以在每次读取后使用 API appPerfStatsDdrStatsResetAll()进行重置?
此致、
Nikhil
您好!
[报价 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的第一个日志、如下所示
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
只是为了确认相同、您能否共享相同的日志 没有做 复位到 DDR 统计信息、会发生什么情况呢? 即请勿调用 appPerfStatsDdrStatsResetAll()
此致、
Nikhil
虽然我们现在无法共享日志、但我们可以看到异常峰值仅在调用后立即出现 appPerfStatsDdrStatsResetAll()。
但是、您知道、如果不调用复位、我们就无法测量特定时间段内的平均值和峰值。
您好!
GTC 似乎是一个问题。 您是否能够按照如下所述修改读取 GTC 计时器的 API
(54) PROCESSOR-SDK-J721S2:GTC 读取异常-处理器论坛-处理器- TI E2E 支持论坛
此致、
Nikhil
您好!
请告诉我应该修改与 GTC 计时器相关的 API。
您好!
逻辑必须在 appLogGetGlobalTimeInUsec() API 中实现。
这个逻辑确保 GTC 的高位和低位同步。
请在最后尝试相同的方法
此致、
Nikhil
您好!
我按如下方式修改了代码、但结果是相同的。
峰值带宽值仍然过大。
#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; cur_ts = gtc_value64 / mhzFreq; #else cur_ts = GET_GTC_VALUE64 / mhzFreq; #endif } return cur_ts; }
您好!
我相信 DDR B/W 的平均值在指定范围内。
下面的主题讨论了相同的内容
(+) TDA4VL-Q1:峰值 DDR 带宽计算-处理器论坛-处理器- TI E2E 支持论坛
请参阅该主题中的上述建议。
此致、
Nikhil
您好、 Nikhil:
我阅读了您指出的主题、但我仍然不明白峰值带宽值为什么会大于 h/w 规格。
我是否应该将该峰值带宽值视为无效并将其忽略?
您好!
您是否有办法在我结束时重现此问题?
只有在短时间间隔内连续调用 API 时才能看到此情况、还是即使在两者之间以很长的间隔调用时也能看到此情况?
同时、我建议采用平均值。 并考虑电阻值
此致、
Nikhil