【问题标题】:Can we optimize code to reduce power consumption?我们可以优化代码以降低功耗吗?
【发布时间】:2010-05-25 15:13:25
【问题描述】:

是否有任何技术可以优化代码以确保更低的功耗。架构是 ARM。语言是 C

【问题讨论】:

  • 使用// 优化运算符。 :)
  • 程序未使用的循环仍将用作空闲进程。我想如果你的 CPU 被调整为在它需要更少的周期时给它更少的功率,那么你只需要让你的代码更快。否则,您唯一的选择是#include "gogreen.h"
  • @Slaks 优化仅适用于 C++(并且比 ANSI C 变体更新),因此最好使用 /**/ 运算符:-p
  • @Brian,我们是程序员,不是优化电池的化学家,也不是优化 CPU 架构的工程师。我们只是通过另一种方式解决这个问题——修复我们的软件。
  • @Pavel,购买更小的硬件。实际上,我们中的一些人是工程师。

标签: c optimization arm


【解决方案1】:

来自 ARM 技术参考网站:

ARM11 MPCore 的特点 提高能源的处理器 效率包括:

  • 准确的分支和子程序返回预测,减少次数 不正确的指令获取和 解码操作
  • 使用物理寻址的缓存,这减少了缓存的数量 冲洗和补充,节省能源 系统
  • 使用 MicroTLB 可降低转换和 每个周期的保护查找
  • 缓存使用顺序访问信息来减少 访问标签 RAM 和 不需要的数据 RAM。

在 ARM11 MPCore 处理器中 门控也被广泛使用 时钟和门禁用输入 未使用的功能块。只有 逻辑积极用于执行 计算消耗任何动态 力量。

根据这些信息,我会说处理器为您做了很多工作以节省电力。任何电力浪费都来自编写不佳的代码,这些代码执行的处理超出了必要的程度,无论如何您都不希望这样做。如果您希望节省电力,那么您的应用程序的整体设计将会产生更大的影响。网络访问、屏幕渲染和其他耗电操作将更加关注功耗。

【讨论】:

    【解决方案2】:

    优化代码以降低功耗实际上就是优化代码。无论您的动机是金钱、社会、政治还是类似的,更少的 CPU 周期 = 更少的能源使用。我想说的是,我认为您可能可以将“功耗”替换为“执行时间”,因为它们本质上是成正比的 - 因此,当您不“吓跑”人们时,您可能会取得更大的成功与权力有关的问题。但是,我可能会得到纠正:)

    【讨论】:

    • 我没有 -1 你,但是如果 cpu 运行速度较慢,我的笔记本电脑会消耗更少的电量,因此执行时间与功耗成反比。
    • 您不能声称执行时间与功耗成反比。这意味着我可以编写一个长达 10 年的脚本,并期望它消耗一焦耳的能量。我承认以前的模棱两可-“功率使用量与 CPU 操作的数量成正比怎么样,请记住,每个操作所需的功率与执行所述操作的连续速度成反比(以及一百万个其他因素)由于我试图写一个一般的经验法则而不是在法庭上站起来所需的重言式,因此仍未提及)”? :P
    • ++ 我认为您和其他响应者是正确的。假设大多数代码定期运行,目标是尽可能多地处于空闲状态。
    【解决方案3】:

    是的。使用profiler 并查看哪些例程占用了大部分 CPU。在 ARM 上,您可以使用一些 JTAG 连接器(如果可用)(我使用 Lauterbach 进行调试和分析)。主要问题通常是让您的处理器在空闲时处于低消耗状态(深度睡眠)。如果您不能大幅降低 CPU 使用率(例如从 80% 降低到 50%),那么差别不会很大。根据您运行的操作系统,选项可能会有所不同。

    【讨论】:

    • 我可能会补充一点:不要让外围设备处于“打开”状态,除非您真的在使用它们(例如,保持蓝牙/wi-fi 打开会减少 很多移动设备的电池寿命。
    【解决方案4】:

    ACM 通讯 2010 年 7 月版有一篇关于节能算法的文章,您可能会感兴趣。我还没有读过它,所以无法传授它的任何智慧。

    【讨论】:

    • 总的来说,很遗憾,我对这篇文章感到非常失望。
    【解决方案5】:

    尝试将空闲循环留在片上内存(缓存)中,将 I/O 保持在最低限度,将总线上的位翻转保持在最低限度。像 proms 和闪存这样的 NV 内存在存储零时消耗更多的能量(这就是为什么它们会擦除为 1,它实际上是一个零,但是传输器在您看到它之前反转该位,零存储为 1,存储为零,这也是为什么它们在失败时会降级的原因),我不知道易失性存储器,DRAM 使用的晶体管数量是 SRAM 的一半,但必须刷新。

    尽管您需要从较低功率的系统开始,因为上述情况可能并不明显,但所有这一切都很重要。例如,不要使用英特尔的任何东西。

    【讨论】:

      【解决方案6】:

      如果您运行的不是 Windows XP+ 或更新版本的 Linux,您可以运行一个除了 HLT 之外什么都不做的后台线程。

      这就是像CPUIdle 这样的程序如何降低功耗/热量。

      【讨论】:

      • 对于较新的操作系统,这应该不是必需的。
      【解决方案7】:

      如果处理器被调整为在需要更少周期时使用更少的功率,那么只需让您的代码更高效地运行就是解决方案。否则,除非操作系统公开某种电源管理功能,否则您无能为力。

      【讨论】:

        【解决方案8】:

        将 IO 保持在最低限度。

        【讨论】:

          【解决方案9】:

          在某些 ARM 处理器上,可以通过将稳压器置于待机模式来降低功耗。

          【讨论】:

            猜你喜欢
            • 2017-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多