Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2179117
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: LINUX

2012-12-03 20:14:33

一、软件能耗优化技术的发展

    在计算机系统中,以CMOS数字集成电路为基础的微处理器、存储器等器件的能耗是器件在一段时间里消耗的电能。

    目前的能耗优化技术逐渐从硬件方面的研究转向了软件方面的研究:

    在我看来,虽然从软件的角度进行能耗优化有很多优势,但是要找到一套优化方法是可移植的、通用的,还是很困难的,我们常常要被很多条件所限制。

 

    首先说说怎么进行软件能耗估算

    这里有一个能耗评估公式:E(software) = Σ(icomponents)(Ti×Pi)。

    如果这个问题由我来回答,那我觉得最简单的方法就是用控制单一变量的方法做测量。简单点说,某计算机仅由电池供电,把计算机中其余进程全部关闭,只留下视频播放,然后用外部的物理方法测量x分钟后电池的耗电量。这个耗电量即可视为它的E(software)

    然而文章提到了从不同级别的角度去看待能耗估算,从不同角度提出能耗模型:

    指令级模型:E =Σ(Bi×Ni)+Σ(Qi,j×Ni,j)+Σ(Sk).其实我觉得这个级别的模型意义不是很大啊,似乎把问题看的太微观了。既然我们的最终目的是评估能耗,那么我们应该直接从代码对外界(比如电能消耗)的影响着手,而不是拘泥于代码的本质(比如代码的内容,代码的顺序)。程序千变万化,代码顺序也可以多种多样,Ni和Ni,j本身就是个很大的数,而且Qi,j与Ni,j之间的关系并不能很好表达。另外,在一些程序中,某一行代码执行与否也会受它前面代码的影响。所以建立所谓的“指令能耗数据库”很困难也不一定准确。

    相比起上一种模型,处理器体系结构级模型和宏模型可能更为直观一些。这就好比电路原理中的二端模型,把源代码用框框起来,不考虑内部如何复杂,只通过分析输入输出,即对外界的影响,去衡量它的能耗量。

   

    然后是能耗优化,重点来看一下“面向开发阶段的软件能耗技术”:

指令级

算法级

体系结构级

减少指令时间、删除冗余操作指令等

选用低能耗的任务间通信方式、改进虚拟内存管理等

优化体系结构风格

 

二、为实现能耗优化的软件编写的技术

(针对第一部分的“面向开发阶段的软件能耗技术”指令级来说)

 

1.使用全局变量比向函数传递参数更加有效。

2.在声明变量时,需要考虑怎样最佳地控制存储器布局。

3.编译器会把局部变量分配给内部寄存器

     (这时要避免产生冗余变量吧)

4.在声明局部变量的时候可以使用register关键字(?)。

5.宏代替函数实现类似函数功能而又不具函数调用和返回开销。

6.在数组寻址中,尽量使用2的幂次方尽量使用一维数组。

7.使用switch/case语句是,按照它们发生的相对频率排序

     (这种排序可以用最小二叉树来解决吧)。

8.If语句将计算速度最快的表达式放在左边。

9.将不变的代码移到循环之外,将分支语句提到循环的外面。

10.尽量使用自减计数。

11.在C程序中直接插入_asm{}内嵌汇编语句。

12.使用C语言的位操作可以减少除法和取模的运算。

13.乘法运算比求平方运算快。

 

阅读(425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~