在嵌入式/移动环境下,在开发软件时必须考虑电池功耗的问题,因此,嵌入式/移动环境下的节能软件编程就显得尤为重要。
问题是,(关于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++中构建一个简单的能量/功率分析和分析工具,
point1中)的功耗变化,那么如何在相应的平台上确定任意CPU或GPU的每条指令的功耗呢?发布于 2018-04-28 19:12:06
博士,你不能用软件,只用物理计量器。
要细化“@某个程序员老兄”已经暗示的内容:
一个问题是,硬件上某个操作的实际实现是未知的。您可能会得到带有周期/操作代码的列表,但是您不知道这些循环会做什么。它可以走很长的路,有些需要更多的部件来传递,有些更少,因此不知道个人周期需要多少能量。
另一个问题是在具有大域(例如16位ADC)和多个输入(例如:一次读取多个传感器)的复杂代码中,几乎不确定的路径,特别是当您使用浮点算法时。
这是有可能得到相对不同的功耗,但只有粗的。粗的,如在"100循环相同的代码需要更多的功率比10“粗。或者:如果它运行得更快,它很可能需要更少的动力。
不,你必须吞下苦涩的药丸,去下一个Rhode&Schwarz (不是附属的,只是在写这篇文章的时候在侧边栏上看到一个广告),得到一个电源,一个电表(实际上是两米),一个频率发生器和必要的连接材料。将使您在中至上五位数范围内短线(美元)。一旦您有了它,您需要测量每个处理器的每一批处理器的几个MCU/CPU的功耗(大约是30+,以便能够假定均匀分布)。
如果你还没有这些工具,那就是大量的工作和投资。测量本身也是一种艺术形式,你需要知道你在做什么,很多事情都可能出错。
如果你想与军方签订一份价值一百万美元的合同,并且需要保证你的物品能够在一个电池上运行五年,那么花这笔钱也许是个好主意(而且说军方做的第一件事就是在上面贴上一张贴纸,上面写着“每6个月换一次电池!”)否则:甚至不要开始,不值得头痛。
https://stackoverflow.com/questions/50079531
复制相似问题