全部博文(436)
分类: LINUX
2012-12-03 18:07:54
1.gprof
使用gprof查看了一下程序中各个函数的运行时间,了解了一下各个数字的意义。
%time:该函数花费的时间占整个函数所花费的时间的百分比。
cumulative seconds:到这一函数包括这一函数为止所花费的时间总和。
self seconds:该函数所花费的市价。
calls:该函数调用的次数。
2.《低功耗高可靠低延时嵌入式软件编写技术的研究》
降低系统功耗,提高程序效率
变量:变量的定义:要考虑到存储器布局、存储器空间
将局部变量放在多用途寄存器中,使用register
适当使用宏:用宏代替较短而传递参数较多的函数
数组:数组寻址中,尽量使用2的幂次方
条件语句:将发生的相对频率最高的语句放在第一
循环:尽量使用自减计数
用do……while代替while
内嵌汇编:汇编语句比C语言的速度快
利用硬件特性:访问速度:CPU内部RAM>外部同步RAM>外部异步RAM>FLASH,ROM
运算:多使用自加、自减
用位操作代替乘除运算,不同循环条件比较
用乘法运算代替平方运算
查表
浮点运算:将浮点运算转换为乘除运算。
优先使用浮点处理器
对于计算密集型的算法,可以通过转化为查表来进行优化。
在保证计算精度的前提下,确定浮点型变量和表达式是float型。
文件:读写文件,缓冲区的buffer为4096 2048时最快。
利用mmap,读写文件
mmap函数主要用途有三个:
1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;
2、将特殊文件进行匿名内存映射,可以为关联进程提供共享内存空间;
3、为无关联的进程提供共享内存空间,一般也是将一个普通文件映射到内存中。
问题:
数组寻址中,尽量使用2的幂次方是如何提高程序效率的?
如何实现用位操作代替不同循环条件的比较?
线程这一块不是很明白,不知道如何能提高程序效率。
运算查表是如何实现的?
如何将浮点运算转化为乘除运算?
3.《软件能耗优化技术研究进展》
低能耗软件优化技术
指令级优化
软件算法优化
软件体系结构优化
现有的软件能耗评估方法主要有实测方法和基于能耗模型的方法。
面向处理器的软件能耗估算
其核心问题是建立程序在微处理器上执行及其访存操作的能耗模型
基于指令级模型的能耗估算:指令级能耗模型把一个程序的能耗看作是该程序所有指令能耗之和。关键问题是建立相应体系结构指令集对应的指令能耗数据库。
基于处理器体系结构的能耗估算:处理器的单时钟周期能耗是在该周期中所有活动单元能耗的总和。基于处理器体系结构的软件能耗估算精确到时钟周期。
基于宏模型的能耗估算:研究软件能耗宏模型的目的是建立易于获取的软件高层特征参数与软件能耗间的关系,用来评估软件能耗和软件能耗优化策略。面临的主要问题是找到适当的特征参数和宏模型。
面向全系统的软件能耗估算
基于系统模拟器的软件能耗估算:在系统功能模拟器上增加系统部件的能耗模型,估算包括OS在内的软件能耗。如何对系统外围部件建立适当的能耗模型并与处理器能耗集成是需要解决的问题。
问题:
看得不是很仔细,总体上也不是很明白。
4.《深入理解Linux内核》
逻辑地址:在机器语言指令中用来指定一个操作数或一条指令的地址。
线性地址:即虚拟地址。
物理地址:用于内存芯片级内存单元寻址。
逻辑地址可通过分段转换成线性地址,线性地址可通过分页转化成物理地址
硬件中的分段:如果有非编程的寄存器,则可以直接引用存放段描述符的CPU寄存器得到段描述符中的Base字段,如果没有,或是寄存器的内容发生改变,则先需要通过段选择符中的TI确定段描述符保存在那个描述符表中,然后通过段选择符的index字段计算段描述符的地址,段描述符的字段=描述符表的线性基地址+index*8,通过计算得到的地址找到段描述符,线性地址=逻辑地址的偏移量+段描述符的Base字段。
Linux中的分段:逻辑地址与线性地址是一致的。
问题:
大概看了一下硬件中的分页,但是总体上不是很理解,在常规分页中,线性地址的转化采用二级模式(第一种转化为页目录表,第二种转化为页表)时,可以减少内存使用量,但在扩展分页中,不使用中间页表进行地址转化可以节省内存,为什么?