-6

我的目标是针对某些特殊情况开发和实施绿色算法。我为此开发了两种算法。

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

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

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

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

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

更新:

这很困难,但并非不可能。人们可以很好地计算出读取 DRAM 和 CPU 的 ALU 进行乘法的成本。唯一的问题是必须具备 DRAMS 和 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    

  {
4

5 回答 5

1

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

于 2012-06-13T09:08:22.497 回答
1

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

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


关于您的算法,实际的能效不仅取决于 C 代码,还取决于编译器的性能以及与周围系统交互的运行时行为。但是,这里有一些资源,作为开发人员,您可以做些什么来帮助解决这个问题:

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

  • 性能监视器
  • PwrTest/Windows 驱动工具包
  • Windows 事件查看器(计时器刻度更改事件、Microsoft-Windows-Kernel-PowerDiagnostic 日志)
  • 英特尔 PowerInformer
  • Windows ETW(性能监控框架)
  • 英特尔应用能源工具包
于 2012-06-13T09:17:04.920 回答
0

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

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

于 2012-06-13T09:12:33.600 回答
0

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

在这里,我假设主要的电力消耗者是 CPU,算法不需要大量的 I/O。

于 2012-06-13T09:16:20.573 回答
0

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

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

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

2- 由于时钟速率引起的功耗。功耗随频率的平方而变化。

在 Snippet a) 中,DRAM 和存储器几乎不消耗太多电流,因此每个过程中的功耗都非常小

  a[i]= b[i];

手术。上面的操作就是数据的读写。

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

在片段 b) 中,可以看出我正在做更多的计算。这将涉及更多的功耗,因为时钟频率要高几个数量级。

另一个因素是乘法本身将包含几个更高的阶数。与数据读写相比的周期数(假设内存已合并)。

此外,如果有一个选项来测量或大致了解某些代码的功耗(“代码能量”),如下所示(颜色代表您的代码的能源效率,红色非常差,绿色高能效):

在此处输入图像描述

简而言之,考虑到当今的技术,软件估计这样的功率并不是很困难(除了我上面描述的方法之外,还可能采用许多其他参数)。这将有助于更快地开发和评估绿色算法。

于 2012-06-16T06:57:19.827 回答