总结文献资料,对嵌入式软件能耗的影响因素进行了分析,参考的文献和资料在文章末尾
对一个嵌入式系统而言,除了完成基本的功能,要在市场上提高自身的产品竞争力,有很多优化的方向,其中,能耗就是一个重要的设计因素,一些典型的例子包括手机、蓝牙耳机、蓝牙音箱等,它们的续航能力常常是顾客选购的一个参考因素,也影响了顾客的满意程度。
低能耗的设计是指在不影响系统运行的前提下, 将系统运行时的能耗降到最低,一个完整的嵌入式系统包括物理硬件系统和对应操作的软件系统,对一名软件工程师来说,在硬件选型之外,对于能耗因素更多关注在软件相关的能耗。
-
计算机产生能耗的基本原因
计算机产生的能耗是指:系统运行时,电脑CPU、Cache以及I/O设备等硬件产生的能量消耗。
软件不会直接产生能耗,只有当软件在操作系统中,通过软件内部的每一条指令代码驱动对应的硬件模块进行任务工作, 从而由硬件模块产生系统能耗。
计算机系统的能耗是由硬件系统所直接决定, 而软件系统则是驱动硬件系统产生能耗的主要原因。
-
抽象的软件能耗分析
根据文献1所述,可以从三个层面进行能耗分析,分别是指令层、算法层、软件体系结构层,概述如下:
-
指令层
- 数据存取是一个相当大的工作量,减少指令对存储器的存储操作, 如果选择优化后的编译器, 则可能会实现系统的低能耗
- 高级程序语言转码为低级语言,指令的执行次数和执行时间会影响能耗
- 对指令的执行顺序进行再次排序, 降低指令间电路交换的频率, 系统能耗就会减少
- 对于处理器的特定优化技术可降低能耗
-
算法层
在算法层次下, 软件的能耗由算法和算法中数据结构所决定:对程序代码中的语句进行调度、对算法和数据结构进行合适的选择与设计, 从而找出设计低能耗软件的方法
- 算法执行次数:算法的执行产生对应能耗, 算法执行次数决定软件能耗大小
- 时间复杂度:时间复杂度决定着算法运行时间的长短, 运行时间的长短影响着算法执行次数, 从而影响着软件能耗
- 空间复杂度:空间复杂度表示着算法运行中所需的存储空间大小, 减少存储空间大小可以实现降低软件能耗
-
体系结构层
好的软件应该具备一个好的软件体系结构, 同时软件体系结构还对软件能耗产生影响。 相比于指令级和算法级, 这一级别的能耗研究分析才刚刚起步
因为嵌入式软件一般是在嵌入式实时操作系统下运行, 资源受限, 所以必须高效的设计嵌入式软件, 去除冗余, 优化构件:
- 程序模块复杂性:减少程序平均复杂性,可提高软件简单性,进而实现软件的能耗优化
- 程序模块耦合度:耦合度越高,软件越复杂
- 构建间通信接口:减少数据传输时的通信能耗
以上分类比较抽象,下面举两个更具体例子
-
-
一些更具体的例子
-
内核对任务的调度策略
-
减少不必要的进程切换:
进程切换会导致CPU的唤醒和功耗,因此选用合适的调度策略可以减少不必要的上下文切换,从而降低能耗
-
优化任务分配
避免高耗能任务连续执行,可降低整体能耗
-
-
利用硬件特性
- 如C/C++中struct的对齐,结构体对齐可以提高访问速度和提高内存利用率
-
-
参考