优化程序性能

优化编译器的能力和局限性

GCC编译的时候,包含了编译参数,-O1 -O2 -O3可以对生成的汇编代码进行优化(例如:一些常量直接用内存地址,优化部分加减乘除方法)

消除循环的低效率

减少针对不变量计算的循环例如:for(int i=0;i<str.length;i++),可以在循环前求出值,然后循环中直接用不变量即可

减少过程调用

消除不必要的内存引用

尽量减少重复赋值(会导致重复引用该内存),可以在全部计算完毕后再赋值

理解现代处理器

在代码级上看,似乎是一次执行一条指令,每条指令都包括从寄存器或内存取值,执行一个操作,并把结果返回到一个寄存器或内存位置 在世纪处理器中,是同时对多条指令求值,同时又呈现出一种简单的顺序执行指令的表象(预测代码执行的分支,同时执行))

程序性能的限制:

  1. 延迟界限:指令依赖,下一条指令开始前,这条指令必须结束
  2. 吞吐量界限:处理器单元的原始计算能力

循环展开

  1. 减少迭代次数,有助于减少条件分支的判断
  2. 编译器可以进一步优化代码,减少整个计算中关键路径上的操作数量

编译器可以很容易地执行循环展开,用优化级别3或者更高等级调用GCC,它就会执行循环展开

提高并行性

将计算步骤拆开,填充整个流水线,使其可以同时执行

优化合并代码的结果小结

处理器的每个单元,可以主要处理不同的操作


--EOF--

若无特别说明,本站文章均为原创,转载请保留链接,谢谢