优化程序性能
优化编译器的能力和局限性
GCC编译的时候,包含了编译参数,-O1 -O2 -O3可以对生成的汇编代码进行优化(例如:一些常量直接用内存地址,优化部分加减乘除方法)
消除循环的低效率
减少针对不变量计算的循环例如:for(int i=0;i<str.length;i++),可以在循环前求出值,然后循环中直接用不变量即可
减少过程调用
消除不必要的内存引用
尽量减少重复赋值(会导致重复引用该内存),可以在全部计算完毕后再赋值
理解现代处理器
在代码级上看,似乎是一次执行一条指令,每条指令都包括从寄存器或内存取值,执行一个操作,并把结果返回到一个寄存器或内存位置 在世纪处理器中,是同时对多条指令求值,同时又呈现出一种简单的顺序执行指令的表象(预测代码执行的分支,同时执行))
程序性能的限制:
- 延迟界限:指令依赖,下一条指令开始前,这条指令必须结束
- 吞吐量界限:处理器单元的原始计算能力
循环展开
- 减少迭代次数,有助于减少条件分支的判断
- 编译器可以进一步优化代码,减少整个计算中关键路径上的操作数量
编译器可以很容易地执行循环展开,用优化级别3或者更高等级调用GCC,它就会执行循环展开
提高并行性
将计算步骤拆开,填充整个流水线,使其可以同时执行
优化合并代码的结果小结
处理器的每个单元,可以主要处理不同的操作
--EOF--
若无特别说明,本站文章均为原创,转载请保留链接,谢谢