全部博文(436)
分类: C/C++
2012-11-25 23:55:00
仔细地阅读了《深入理解计算机系统》第五章优化程序性能,大概介绍了程序性能的度量标准和一些优化程序性能的方法以及一些原理。
程序性能的度量标准为每元素的周期数(CPE)。
编译技术与机器无关的优化:
避免限制优化的因素。
程序合并操作:将过程相似的程序写成一个程序,如不同数据类型的加减法。
消除循环的低效率:尽量减少循环中的计算、调用等。
减少过程调用:通过分析,损害一些模块性和抽象性来达到减少过程调用。
消除不必要的存储器引用:利用临时变量存放循环中的计算结果。
编译技术与机器有关的优化:
降低循环开销:减少循环次数。
转换到指针代码:将数组转换为指针,但要看情况而定。
提高并行性:将一个循环变成多个循环,如乘法的积等于偶数之积乘以奇数之积,注意寄存器溢出。
通过书上的例子,对这些优化方法有了一定的了解和理解。
整章内容中,对第7、10、11、12、13节的内容不是很理解,第7节主要是将一些数据、程序在计算机内部的调用、执行过程,对这些过程不是很明白,对后面几章的理解也造成了一定的困难。第10节的寄存器溢出和第11节中的浮点性能异常也不是很明白。第12节中描述的是程序遇到分支时的处理方法,主要讲了分支预测和处理方法以及存在的问题。第13节中对执行时间的计算看不懂,不知道是怎么计算的。
书中每元素的周期数(CPE)的计算方法不知道,也没找到相关的资料。
书中第6章中combine3和combine4的运行结果不同,经过和刘迅羽讨论,知道了原因,但是不是很理解为什么代码优化到最后会改变程序的运行结果。
书中的汇编语句也不是很懂。
在下周,我想将这周看得不是很理解的地方在深入的阅读一下,对这周遇到的问题,通过讨论,查资料尽量进行解决,尽量理解汇编语句,试着用一下Unix剖析程序GPROF,还有继续这周没有完成的任务,《深入理解Linux内核》第2章内容的阅读,因为是英文版,阅读起来有点困难。