《深入理解计算机系统》优化程序性能
2013-12-22 16:05
197 查看
优化程序性能的几点:
1)高级设计。选择恰当的数据结构和算法;
2)基本编码原则:消除连续的函数调用;消除不必要的存储器引用;
3)低级优化。循环展开;提高并行性,如多个累积变量,重新结合技术,条件传送代替条件选择。
1,编译器能针对代码做一些安全性的优化;所以请遵循基本编码原则。
2,程序性能的表示:每元素的周期数(CPE)
3,实际的处理器中,是同时执行多条指令的(因为一条指令有多个阶段),即指令级并行,是乱序的。
一个现代处理器框图,主要包括,指令控制单元和执行单元。
延迟和发射(吞吐量)影响程序性能。低级优化,主要是做到见笑延迟界限,是程序性能只受发射界限的影响。
如何分析程序性能?——数据流图,关键路径
循环展开:设k表示循环展开的步数,k>2时,内部展开最好也用循环。循环展开的好处:减少循环索引计算和条件分支;进一步变化代码,减少关键路径上的操作数量。
但是,循环展开后,编译器只能对整型计算做自动优化,来减少关键路径上的计算,(现代gcc能自动进行循环展开,要加编译参数 "-funroll-loops");浮点数计算,需要进行进一步优化,多个累加变量和重新结合变换。
4,上述一些低级优化,虽然有效,但是也有一些限制因素,如,寄存器一处,cpu寄存器数量有限,如果并行度p超过了寄存器数量,编译器就会把某些值放到栈中,引起性能下降;分支预测引起的性能下降。
5,存储器引发的程序性能。分为:加载和存储两方面。加载会直接影响程序性能 ; 存储不会直接影响,如果加载操作受存储影响,存储才会影响程序性能。
6,以上只是小型程序的分析方法,如何在大型程序中优化程序性能呢?需要进行程序剖析。unix系统提供了一个剖析工具GPROF。
使用GPROF的方法:第一步,使用gcc时,加上运行时标志“-pg” ; eg,gcc -O1 -pg prog.c -o prog
第二步,执行那个程序prog,后面加参数file.txt ; eg,./prog file.txt
第三步,调用GPROF分析程序产生文件gmon.out的数据 ; eg,gprof prog ;会显示几个表格。
分析原则:Amdahl定律。一个公式。。。其主要思想是,当我们加快系统一个部分的速度时,对系统整体性能的影响依赖于这个部分有多重要和速度提高了多少。所以,一个部分越重要(可以通过分析这个部分所用时间占从时间的百分比来看),速度提高的越多,系统总的效率提高的越多。
1)高级设计。选择恰当的数据结构和算法;
2)基本编码原则:消除连续的函数调用;消除不必要的存储器引用;
3)低级优化。循环展开;提高并行性,如多个累积变量,重新结合技术,条件传送代替条件选择。
1,编译器能针对代码做一些安全性的优化;所以请遵循基本编码原则。
2,程序性能的表示:每元素的周期数(CPE)
3,实际的处理器中,是同时执行多条指令的(因为一条指令有多个阶段),即指令级并行,是乱序的。
一个现代处理器框图,主要包括,指令控制单元和执行单元。
延迟和发射(吞吐量)影响程序性能。低级优化,主要是做到见笑延迟界限,是程序性能只受发射界限的影响。
如何分析程序性能?——数据流图,关键路径
循环展开:设k表示循环展开的步数,k>2时,内部展开最好也用循环。循环展开的好处:减少循环索引计算和条件分支;进一步变化代码,减少关键路径上的操作数量。
但是,循环展开后,编译器只能对整型计算做自动优化,来减少关键路径上的计算,(现代gcc能自动进行循环展开,要加编译参数 "-funroll-loops");浮点数计算,需要进行进一步优化,多个累加变量和重新结合变换。
4,上述一些低级优化,虽然有效,但是也有一些限制因素,如,寄存器一处,cpu寄存器数量有限,如果并行度p超过了寄存器数量,编译器就会把某些值放到栈中,引起性能下降;分支预测引起的性能下降。
5,存储器引发的程序性能。分为:加载和存储两方面。加载会直接影响程序性能 ; 存储不会直接影响,如果加载操作受存储影响,存储才会影响程序性能。
6,以上只是小型程序的分析方法,如何在大型程序中优化程序性能呢?需要进行程序剖析。unix系统提供了一个剖析工具GPROF。
使用GPROF的方法:第一步,使用gcc时,加上运行时标志“-pg” ; eg,gcc -O1 -pg prog.c -o prog
第二步,执行那个程序prog,后面加参数file.txt ; eg,./prog file.txt
第三步,调用GPROF分析程序产生文件gmon.out的数据 ; eg,gprof prog ;会显示几个表格。
分析原则:Amdahl定律。一个公式。。。其主要思想是,当我们加快系统一个部分的速度时,对系统整体性能的影响依赖于这个部分有多重要和速度提高了多少。所以,一个部分越重要(可以通过分析这个部分所用时间占从时间的百分比来看),速度提高的越多,系统总的效率提高的越多。
相关文章推荐
- 优化程序性能(《深入理解计算机系统》)
- 优化程序性能的几个方法(来自于《深入理解计算机系统》)总结
- 优化程序性能的几个方法(来自于《深入理解计算机系统》)
- 优化程序性能的几个方法(来自于《深入理解计算机系统》)
- 优化程序性能—《深入理解计算机系统》
- 《深入理解计算机系统》—优化程序性能
- c++程序性能的初步优化与分析
- 深入理解计算机系统:优化程序性能
- Asp.net程序性能优化的七个方面之三(程序改进)
- gprof使用介绍-优化程序性能
- asp.net程序性能优化的七个方面
- Java 程序性能优化《第一章》Java性能调优概述 1.2性能调优的层次
- Hibernate程序性能优化的考虑要点
- Hibernate程序性能优化的考虑要点
- 【设计优化】-使用缓冲(Buffer)提高程序性能
- iOS 程序性能优化
- J2EE程序的性能优化技巧
- 数据库性能优化三:程序操作优化
- Java程序性能优化
- Java程序性能优化