c - 哪个代码消耗的电量更少?

标签 c memory cpu energy

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

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

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

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

平台:我将在 Intel 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    

  {

最佳答案

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

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

<小时/>

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

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

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

关于c - 哪个代码消耗的电量更少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011260/

相关文章:

memory - Web服务器容量规划: more cores versus more memory

python - 如何在pytorch中从gpu返回cpu?

html - 随机文章按钮

c - x86汇编中全局变量的地址

java - 算法简单但内存不足

android - 为什么我的 Android 应用程序会在我的手机上持续崩溃,但不会在我的模拟器上崩溃的原因

c - POSIX API 调用以列出进程中运行的所有 pthreads

c - c中的二进制到十进制转换

c - 测量矩阵乘法参数的程序错误

c - 为什么这个CPU运行速度更快?