You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Raspberry Pi 4使用std::chrono::steady_clock基准测试结果异常问询

问题背景

在Raspberry Pi 4上使用std::chrono::steady_clock对一段DSP代码进行基准测试时,结果出现异常。由于GNU性能分析工具无法在树莓派上正常工作,基准测试是评估代码优化效果的唯一手段,因此该异常问题十分关键。

异常表现

单次程序执行内连续三次基准测试结果的误差保持在±1%以内,但不同程序执行之间的测试结果差异可达约10%,且该差异在单次执行中具有稳定性。示例如下:

Run 1:
9:21:37. Performance: 0.0912333 x realtime
9:21:42. Performance: 0.0910667 x realtime
9:21:47. Performance: 0.0910667 x realtime

Run 2:
9:20:15. Performance: 0.106667 x realtime
9:20:21. Performance: 0.1062 x realtime
9:20:28. Performance: 0.106117 x realtime
被测代码情况

被测代码是用于生成实时音频的机器学习算法(LSTM->Dense),采用手工优化的NEON intrinsics实现,约90%的执行时间用于矩阵和向量运算。数据占用约13kb,可完全放入L1数据缓存;代码占用量未知,但可能无法放入L1指令缓存。目前已将性能从约0.18倍实时优化至0.093倍实时,预计仍有15%的优化空间,但测试结果的不准确性阻碍了后续优化工作。

已排查项
  • 不存在NEON对齐问题:所有矩阵、矩阵行和向量均为16字节对齐,已通过Debug编译的断言验证
  • CPU调速器已设置为performance模式,所有CPU稳定运行在1.8GHz,排除CPU频率波动问题
  • 排除进程间缓存竞争:闲置时CPU占用率约6%(VNC连接)或0.3%(SSH连接)
  • 排除CPU核心差异影响:测试基本在单个核心上完成
  • 排除热节流:CPU温度仅47℃,树莓派4通常在80℃才会触发热节流
  • 向量操作依赖GCC自动向量化,已正确标注restrict声明,且生成了最优NEON向量化代码
  • 排除定时器分辨率问题:std::chrono::steady_clock::now()连续调用的增量为37-56ns
  • 排除时钟选择问题:steady_clock、system_clock和high_resolution_clock均表现出相同异常
CPU频率验证

执行以下命令验证CPU频率:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
performance
performance
performance
performance

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq 
1800000
1800000
1800000
1800000
待解答问题
  • Raspberry Pi上std::chrono::steady_clock的实现细节,是否基于CPU时钟计数器?
  • 热节流是否会反映在/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq中?
  • 导致跨程序执行基准测试结果差异达10%的原因是什么?

内容的提问来源于stack exchange,提问作者Robin Davies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:50:31