哪些代码耗电量较少?

时间:2012-06-13 08:47:46

标签: c memory cpu energy

我的目标是针对某些特殊情况开发和实现绿色算法。我已经开发了两种相同的算法。

一个是大号没有。内存访问(加载和存储)。该模式是一段时间合并的,有些时间是非合并的。我假设一个最糟糕的情况,大多数访问将导致缓存失败。请参阅示例代码段a)。

另一个是大号没有。计算,大致相当于下面的代码片段b)。

如何估算每种情况下的功耗。哪一个更节能,为什么?

平台:我将在英特尔I3处理器上运行这些代码,Windows 7,4 GB DRAM,3 MB缓存。

注意:我不想使用任何外部功率计。如果您发现代码没有做任何建设性工作,请忽略。这是因为它只是完整算法的一小部分。

更新

这很困难,但并非不可能。人们可以很好地计算读取DRAM并通过CPU的ALU进行乘法所产生的成本。唯一需要的是必须具备DRAM和CPU的电子学知识,我在这个时间点缺乏。至少在最坏的情况下,我认为可以很好地建立起来。最坏的情况意味着没有合并访问,没有编译器优化。

如果您可以估算访问DRAM和进行浮点乘法的成本,那么为什么估算电流是不可能的,因此在这些操作期间大致了解功率?另见我的帖子,我不是在问有多少功耗,而是我在问哪个代码消耗更少/更多功率或者哪个代码更节能?

a) for(i=0; i<1000000; i++)

  {

  a[i]= b[i]; //a, b floats in RAM.  

  {




 b) for(i=1; i<1000000; i++)

  {

   float j= j * i;  //j has some value. which is used later in the program , not  
                    // shown here    

  {

5 个答案:

答案 0 :(得分:1)

像评论者指出的那样,尝试使用功率计。即使不是不可能,在现代超标量体系结构中,即使从原始汇编代码估算功率使用也很困难。

答案 1 :(得分:1)

要测量实际功耗,您应该使用electricity meter添加电源(如果使用笔记本电脑,请取出电池)。

请注意,您将测量整个系统的功耗,因此请务必避免滋扰参数(任何其他系统活动,即防病毒更新,图形桌面环境,索引服务,(内部)硬件设备),执行重复测量,无论您的算法运行与否,都可以取消“背景”消耗。 如果可能,请使用嵌入式系统。


关于算法,实际能效不仅取决于C代码,还取决于编译器的性能以及与周围系统交互时的运行时行为。但是,以下是一些资源,您可以作为开发人员为此提供帮助:

特别要看一下上面“清单”中的工具段落,因为它列出了一些可以帮助您进行粗略估算的工具(基于应用程序分析)。它列出(除了其他人):

  • 性能监视器
  • PwrTest / Windows驱动程序工具包
  • Windows事件查看器(计时器刻度更改事件,Microsoft-Windows-Kernel-PowerDiagnostic日志)
  • Intel PowerInformer
  • Windows ETW(性能监控框架)
  • 英特尔应用能源工具包

答案 2 :(得分:0)

只要涉及CPU和内存,就可以假设功耗与运行时成正比。

这可能不是100%准确,但在没有实际测量的情况下尽可能接近。

答案 3 :(得分:0)

您可以尝试使用一些CPU监控工具来查看哪种算法可以为您的CPU带来更多热量。它不会为您提供可靠的数据,但会显示这两种算法在功耗方面是否存在显着差异。

这里我假设主要功耗消耗者是CPU,算法不需要繁重的I / O.

答案 4 :(得分:0)

好吧,我已经完成了与电子专业的初步研究和讨论。

通过考虑两个因素可以得到一个粗略的想法:

1-电流涉及:更多电流,更多功耗。

2-由于时钟频率导致的功耗。功耗随频率的平方而变化。

在Snippet中a)DRAM和存储器几乎不需要太多电流,所以每次的功耗都非常小

  a[i]= b[i];

操作。上述操作只是数据读写。

与CPU相比,存储器的时钟通常也非常小。虽然CPU的时钟频率为3 GHz,但内存的时钟频率约为133 MHz左右。 (并非所有组件都以额定时钟运行)。因此,由于时钟较低,功耗较低。

在摘录b)中,可以看出我正在做更多的计算。由于几个更高的时钟频率,这将涉及更多的功耗。

另一个因素是乘法本身将包含几个更高的数量。与数据读写相比的周期(提供的存储器被合并)。

另外,对于某些代码,可以选择测量或大致了解功耗(“代码能量”),如下所示(颜色代表代码的节能效果,Red非常差) ,绿色高效节能):

enter image description here

简而言之,鉴于今天的技术,软件估算这样的功率并不是很困难(除了我上面描述的内容之外,还可能采用许多其他参数)。这对于更快地开发和评估绿色算法非常有用。