我有在熊金属上运行的c代码(没有操作系统)。该代码接收一些传感器数据,执行计算,形成数据包并进行传输。主板由电池供电。
我有兴趣了解朱尔斯每次操作所消耗的能量。这可能吗?怎么做呢?
每条指令使用的焦耳数取决于您使用的处理器和您正在查看的指令。我相信ARM和Atmel AVR处理器没有真正的硬件电源管理,这使得事情变得更简单。
指令使用多少能量与它使用多少和哪种类型的硅上电路有关。这意味着试图从理论上计算焦耳数将很复杂,因为它不仅仅与指令使用的周期数有关。
所以你必须通过实验来做。这就是我要做的。
- 删除所有编译器优化
- 进行频率分析以找到您的热门操作并挑选出最常用的操作。(我假设我们不是在谈论ASM指令,而是在谈论"C"指令。
- 编写一个重复指令的循环,例如 20 次,并让循环至少运行几秒钟
- 用电源更换电池。
- 如注释中所述,使用串联电阻来测量功率,但(当然)要适当地调整电压。
- 运行循环程序并获取电源的统计样本。
- 对所有热操作执行此操作。
- 程序的计算功耗
- 根据程序执行的实际功率测量值验证功耗
- 根据需要调整(即规范化)您的计算
您还必须考虑内存层次结构。访问片外存储器需要能量。当操作或数据被缓存时,它将改变你的能量方程。
我想这应该有效,但不知道。祝你好运。