全部博文(436)
分类: LINUX
2012-12-03 18:21:42
软件能耗优化技术研究进展pdf:
文章主要阐述了在各类优化技术研究中面临的问题和当前的研究工作进展,深入讨论软件能耗估算,展望了进一步研究的主要问题和发展趋势。
1、软件能耗估算:把软件执行过程中涉及到的硬件部件能耗之和映射到软件组成部分(指令、例程、服务、构件等)上。
软件能耗=硬件部件能耗之和
=程序在硬件部件上的执行时间*该硬件部件的平均功耗
2、软件能耗评估:在软件能耗估算的基础上,研究软件特征对系统能耗的影响。
3、低能耗编译优化:(降低硬件功耗、降低处理器动态功耗)
关注软件的基本构成元素———指令。
在与机器无关的优化阶段或者代码生成阶段进行。
挑战:性能优化使处理器功耗增加导致软件能耗增加,因此要满足一定的性能约束,又要使软件能耗最低,需要在性能和能耗之间进行权衡。
4、与硬件相比软件低能耗技术的特点:系统性、抽象性、灵活性、互补性。
5、低能耗软件优化技术:指令级优化(利用编译器优化指令序列,指令级优化主要在编译 器层面展开,如代码优化,代码调度,寄存器选择等对处理器体系结构部件的功耗有显著影响)、软件算法优化(不同的算法直接影响软件的代码量、内存访问量和外设访问量,进而影响处理器和系统的能耗。因而在权衡性能与能耗的基础上,在源代码级优化软件算法和代码设计,也能达到降级能耗的目的)、软件体系结构优化(首先要评估不同的软件体系结构风格对系统能耗的影响,需同时考虑硬件平台和应用的相关特性。其次,可以利用提取的软件体系结构图,通过替换,合并软件构件,合并任务,调整任务间通信模式来降低系统能耗)。
6、多任务并发嵌入式操作系统降低系统能耗:选用低能耗的任务间通信方式,改进虚拟内存管理策略。
7、Java执行环境中两个重要组成部分:JIT(减少指令数)和垃圾收集器(降低访存量)(算法、存储体系结构以及功耗管理策略之间协调——综合优化软件内存管理和存储体系结构设计)。
8、软件体系结构优化:关键特征参数—>映射关系—>软件能耗模型—>软件体系结构图(SAG),通过替换构件,合并任务,调整通信模式来降低系统能耗。
9、软件能耗评估方法:实测方法(利用专用测量分析仪器获得程序运行时系统或者某些部件的能耗)(对测量仪器精度要求高,分析范围、精度、准确度有限,但对实际系统的动态功耗管理策略和软件能耗评估有直接的实用价值。)和基于能耗模型的方法(在模拟运行软件的基础上加入能耗模型来估算软件能耗)。(可在开发早期研究软件能耗优化问题,不影响原有软件的执行过程,可分析软件的范围大、精度高,其核心问题是建立高效准确的软件能耗模型)。
10、面向处理器的软件能耗估算技术:基于指令级模型(一个程序的能耗=所有指令能耗之和=基本指令能耗*指令数+指令间能耗*指令对数+其他k类型指令间影响造成的能耗)、基于体系结构级模型(Wattch模型,准确度高,速度慢)、更高抽象层次脱离硬件能耗的宏模型(找不到适当的特征参数和宏模型)(基于软件特征的宏模型:能耗=n维指标与宏模型参数关联的线性公式;基于系统运行参数的宏模型:性能计数器和事件计数器反馈参数)(受限于处理器提供的硬件支持能力)。抽象层次越低精度越高,但模拟运行开销越大;抽象层次越高估算速度越快,与软件特征关系越密切,但精度越低。
11、待解决问题:如何对系统外围部件建立适当的能耗模型并与处理器能耗集成?如何将系统能耗与软件组成部分建立细粒度的映射?如何提高低能耗软件优化的系统化和自动化程度?如何提高运行时系统的“能耗感知”和“自适应管理”系统能耗的能力?如何与硬件低能耗技术的快速发展同步,更好地发挥硬件特性?
问题:
1、软件能耗评估是怎样实际降低能耗的?
2、现在的软件性能和能耗的最佳平衡达到了什么样的程度?还能通过什么方面去提高?
3、动态功耗和静态功耗分别主要由什么造成?
4、软件粒度指的是什么?
5、软件低能耗系统除了在新的硬件平台上研究,还能通过什么方面来提高硬件的低能耗技术?
低功耗高可靠低延时嵌入式软件编写技术研究word:
主要内容与第五章优化程序性能的主要内容一致,通过使用全局变量、寄存器变量、宏、一维数组、减少循环次数、按发生频率排序等方法提高程序效率。
1、速度:CPU内部RAM>外部同步RAM>外部异步RAM>FLASH,ROM。
2、乘法比乘方运算快。
3、glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。 在系统不支持浮点处理器时,可用glibc提供软浮点。
4、临时变量:不要对临时变量做取地址操作,不要返回变量地址(堆栈中的内容是不确定的),不要申请大的临时变量数组。
5、动态内存:检查分配是否成功->引用指针->分配空间使用sizeof->分配内存宁滥勿缺(+1)->free由malloc()返回指针->错误处理时释放其他分配空间。
6、坏指针:操作没有初始化的指针,越界操作内存,代码逻辑上的错误,指针强制转换越界。
问题:
1、不同类型变量转换时中间的pad是什么意思?为什么同种类型变量就没有这种情况?
2、降低循环次数与程序简洁度有没有一个平衡点?
3、自减计数比自加计数速度快的原因?(没看懂)
4、移位运算是怎样实现数学运算的?