代码优化:
- 代码移动,将计算结果不会变化的计算移动到代码前面,不会被多次求值
- 减少多次重复的内存读写
- 编写程序尽量满足处理器流水线的设计
- 条件数据转移比条件控制转移性能更好
- 在if条件判断的时候,更容易判断出结果的条件放在前面,使其更符合预测正确,减少预测错误开销,以及一些不必要的管道计算时间
- 重复引用相同变量的程序有很好的时间局部性
- 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
- 消除不必要的内存引用。引入临时变量来保存中间结果。只有在最后的值计算出来时,才将结果存放到数组或全局变量中。
- 用功能性的风格重写条件操作,使得编译采用条件数据传送。
- 双重嵌套循环按照“行优先”来读取数组的元素,也就是,内层循环读第一行的元素,然后读第二行。
- 消除连续的函数调用,考虑有选择地妥协程序的模块性
- 消除不必要的内存引用。引入临时变量来保存中间结果。只有在最后的值计算出来时,才将结果存放到数组或全局变量中。
- 展开循环,降低开销,并且使得进一步优化成为可能。
- 用功能性的风格重写条件操作,使得编译采用条件数据传送。
- 对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。
- 步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的快(空间局部性)。