c++ - 如何测量代码更改的电源效率增加或减少

标签 c++ c mobile embedded profiling

<分区>

在嵌入式/移动环境中,当我们为其开发软件时必须考虑电池功耗,因此节能软件编程在嵌入式/移动世界中很重要。

问题是,(关于 Assembly/C/C++)

认为当它在任意平台上运行时我们有稳定的软件版本 X 它消耗 Y 量的功率(以瓦特为单位),现在我们要执行一些代码变化,我们想衡量它在构建时对能源消耗及其效率的影响。

INT16U x = OXFFFF;
/... some code in stable release .../
for(;x<4096;++x)
{
   /... some code in stable release .../

   INT64U foo = x >> 256 ? x : 4096 ;  // point 1  sample code change;
   if(~foo & foo) foo %= 64 ;         // point 1  sample code change;

   /... some code in stable release .../
}

如果我们想测量此代码如何改变 @point1 对能源效率的影响(相对于稳定版本统计)而不是分析空间和时间(性能加内存),如果我们想用 C/C++ 构建一个简单的能量/功率分析和分析工具,

  • 是否有推荐的 C/C++ 库或源代码来构建功耗分析工具?
  • 如果我们必须通过每次代码更改的 CPU/GPU 指令级别变化来分析和确定功耗级别的变化,例如在 point1 中,我们如何确定每条指令的功耗各自平台上的任意 CPU 或 GPU?
  • 开发人员如何知道由于他在应用程序构建时而不是运行时更改代码而减少或增加了多少功耗?

最佳答案

TL;DR 你不能用软件来做,只能用物理仪表。

完善“@Some programmer dude”已经暗示的内容:

一个问题是,特定操作在硬件上的实际实现是未知的。您可能会得到带有循环/操作码的列表,但您不知道这些循环的作用。它们可以走很长的路,有些需要更多的部件通过一些更少的部件等等,因此不知道单个循环需要多少功率。

另一个问题是在具有大域(例如 16 位 ADC)和多个输入(例如:一次读取多个传感器)的复杂代码中几乎不确定的路径,尤其是当您使用浮点运算时。

有可能获得功耗的相对差异,但只是粗略的差异。像“相同代码的 100 次循环需要比 10 次更多的功率”中的粗略。或者:如果它运行得更快,它很可能需要更少的功率。

不,你必须吞下苦果,然后去下一家 Rhode&Schwarz(不是附属公司,在写这篇文章时刚刚在边栏上看到一则广告)商店买一个电源,一米(实际上是两米) )、频率发生器和必要的连接 Material 。将使您在中高五位数范围内做空(美元)。获得它后,您需要测量您获得的每批处理器的多个 MCU/CPU(大约 30 个以上才能假设均匀分布)的功耗。

如果您还没有工具,那将需要大量的工作和投资。测量本身也是一种艺术形式,您需要知道自己在做什么,很多事情都会出错。

如果你想与军方签订百万美元的契约(Contract)并且需要保证你的东西能够在一 block 电池上运行五年(军方所做的第一件事就是拍打耳光),那么花这笔钱可能是个好主意上面写着“每 6 个月更换一次电池!”的标签)否则:甚至不要开始,不值得头疼。

关于c++ - 如何测量代码更改的电源效率增加或减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50079531/

相关文章:

c++ - 使用 openxml 编辑 docx 返回无效的内存流

c++ - 2个不同的类如何指向同一个数据表名称

php - 如何从 MS Word (.DOC) 文件获取摘要信息?

jquery - 滑出移动/ipad 等的 html 菜单

javascript - jQuery闪烁效果按钮动画(提供fiddle)

android - 移动浏览器或应用程序中不显示 Unicode 粗体字符

C++ 对象指针问题

c++ - 将 const GCC 类型的标量初始值设定项括起来

c - 在 C 中使用 fscanf 将文本文档的内容扫描到数组中

c - Frama-c:将插件分析结果保存在c文件中