首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测量代码更改时电源效率的增减

如何测量代码更改时电源效率的增减
EN

Stack Overflow用户
提问于 2018-04-28 17:57:55
回答 1查看 501关注 0票数 5

在嵌入式/移动环境下,在开发软件时必须考虑电池功耗的问题,因此,嵌入式/移动环境下的节能软件编程就显得尤为重要。

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

我们认为在任意平台X上运行的软件都是稳定的,它消耗了Y的能量(以瓦茨为单位),现在我们要进行一些代码修改,我们想要测量它在构建时对能源消耗和效率的影响。

代码语言:javascript
复制
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的每条指令的功耗呢?
  • 开发人员如何认识到,在应用程序构建时而不是运行时,他的代码更改减少或增加了多少功耗?
EN

回答 1

Stack Overflow用户

发布于 2018-04-28 19:12:06

博士,你不能用软件,只用物理计量器。

要细化“@某个程序员老兄”已经暗示的内容:

一个问题是,硬件上某个操作的实际实现是未知的。您可能会得到带有周期/操作代码的列表,但是您不知道这些循环会做什么。它可以走很长的路,有些需要更多的部件来传递,有些更少,因此不知道个人周期需要多少能量。

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

这是有可能得到相对不同的功耗,但只有粗的。粗的,如在"100循环相同的代码需要更多的功率比10“粗。或者:如果它运行得更快,它很可能需要更少的动力。

不,你必须吞下苦涩的药丸,去下一个Rhode&Schwarz (不是附属的,只是在写这篇文章的时候在侧边栏上看到一个广告),得到一个电源,一个电表(实际上是两米),一个频率发生器和必要的连接材料。将使您在中至上五位数范围内短线(美元)。一旦您有了它,您需要测量每个处理器的每一批处理器的几个MCU/CPU的功耗(大约是30+,以便能够假定均匀分布)。

如果你还没有这些工具,那就是大量的工作和投资。测量本身也是一种艺术形式,你需要知道你在做什么,很多事情都可能出错。

如果你想与军方签订一份价值一百万美元的合同,并且需要保证你的物品能够在一个电池上运行五年,那么花这笔钱也许是个好主意(而且说军方做的第一件事就是在上面贴上一张贴纸,上面写着“每6个月换一次电池!”)否则:甚至不要开始,不值得头痛。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50079531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档