《深入理解计算机系统》第五章复习总结

程序优化的第一步就是消除不必要的内容,让代码尽可能有效地执行他期望的工作。消除不必要的函数调用、条件测试和存储器引用。
 
程序优化的第二步利用处理器提供的指令级并行能力,同时执行多条指令,降低一个计算不同部分之间的数据相关,增加并行度。
 
当一系列操作必须按照严格的顺序执行时,就会遇到延迟界限,因为在下一条指令开始之前,这条指令必须结束。当代码中的数据相关限制令处理器利用指令级并行的能力时,延迟界限能够限定程序性能。吞吐量界限刻画了处理器功能单元的原始计算能力。这个界限是程序性能的终极限制。
 
循环展开能够从两个方面改进程序性能。首先,它减少了不直接有助于程序结果的操作的数量,例如循环索引计算和条件分支。其次,它提供了一些方法,可以进一步变化代码,减少整个计算中关键路径上的操作数量。用命令行选项‘-funroll-loops’调用GCC,会执行循环展开。
 
程序优化常用方法:1.减少连续的函数调用,在可能时,将计算移到循环外。2.消除不必要的存储器引用。用临时变量保存中间结果。3.展开循环,降低开销。4.通过使用例如多个累计变量和重新结合等技术,找到方法提高指令级并行。5.用功能的风格重写条件操作,使编译器采用条件数据传送,避免预测错误惩罚。
 
Amdahl定律的主要思想是,当我们加快系统一个部分的速度时,对系统整体性能的影响依赖于这个部分有多重要和速度提高了多少。要想大幅度提高整个系统的速度,我们必须提高整个系统很大一部分的速度。当处理大型程序时,将注意力集中在最耗时的部分变得很重要,而GPRO(Unix剖析工具)可以帮助我们进行程序剖析。
posted @ 2012-03-04 15:36  o0慢节奏0o  阅读(787)  评论(0编辑  收藏  举报