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

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: IT业界

2012-11-26 01:40:35

《深入理解计算机系统》第5 读书报告

第五章主要讲的是优化程序性能,讲了程序编译遇到的问题以及优化方法

所读收获:

1.编写高效程序需要两类活动:第一,我们必须选择一组最好的算法和数据结构;第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。

2.妨碍优化的因素:程序行为中那些严重依赖于执行环境的方面。

3.编译技术被分为“与机器有关”和“与机器无关”两类。

4.代码剖析程序:测量程序各个部分性能的工具。能够帮助找到代码中低效率的地方,确定应该着重优化的部分。

5.Amdahl定论:量化了对系统某个部分进行优化所带来的整体效果。

6.编译器优化程序的能力受几个因素限制:要求它们绝不能改变正确的程序行为;它们对程序行为、对使用他们的环境了解有限;需要很快地完成编译工作。

7.每元素的周期数(简称CPE)是对程序的度量标准,表示程序性能。对于程序优化,我们将精力集中在减小计算的CPE上。

8.代码移动:(书P330为实例)这类优化识别出要执行多次但计算结果不会改变的计算,我们可以将计算移动到代码前面的、不会被多次求值的部分。这样可以减少计算次数,提高程序速度,从而达到优化目的。(消除循环低效率)

9.程序过程调用会带来相当大的开销(以combine25.6为例),而且妨碍大多数形式的程序优化。所以要避免一些浪费的引用(以combine3 5.9为例),得到的代码会比较快,但是以损害一些程序的模块性为代价的。

10.多余的存储器引用是一种浪费,所以应消除不必要的存储器引用。例如在循环中,我们只需要最后的结果,就可以引入一个临时变量存放循环变量的值,循环完成后,临时变量的结果存入存储器。

11. 降低循环开销,使用循环展开,就是减少循环次数,增加循环执行操作。

12.转换到指针代码:有时我们通过使用指针而不是数组改进一个程序的性能。

 

 

不懂:

  1. 理解现代化处理器(部分理论)
  2. 提高并行性
  3. 转换到指针代码
  4. 每元素周期数是怎么算的

 

 

 

 

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