0%

深入理解计算机系统-优化程序性能

1 导读

程序优化涉及的范围实在是太广了,几乎每个层面都可以进行优化,比如撰写<编译器友好型>以及<缓存友好型>的程序,针对不同的目标硬件平台还可能进行特定的优化,等等,优化的难点在于你需要对系统有充分理解,当然了在你做优化之前首先要保证原始程序功能正确(并且有回归测试),否则一切都是徒劳。

首先需要理解,哪些因素会影响程序的性能

2 优化思想

  • 不要在循环做重复的操作,即可在循环外的准备操作就不要在循环内使用
  • 位运算<加减<乘<除
  • 优化存取操作,尽量少从内存取数据,在循环中能够从寄存器取就从寄存器取
  • 从以上方面优化程序的书写结构

文章来源CSAPP重点解读

3 分支预测

分支预测和预测错误处罚 对于分支指令,处理器为了保持流水线的满载,会进行分支预测,一般是称为投机执行的技术。如果预测正确,程序继续执行,投机技术把执行结果提交到程序寄存器或内存;如果预测错误,那么必须清空所有投机执行的结果,然后重新填充流水线,保证流水线的尽可能满载。 GCC会编译出使用条件传送的指令,而不是更传统的基于控制的条件转移的实现。 对于预测错误,不需要很恐慌,正常对待即可,因为:

  • 现代处理器中的分支预测逻辑非常善于辨别不同的分支指令的有规律的模式和长期的趋势。所以不要过分关心分支预测
  • 分支预测只对于有规律的模式可行,因此尽可能书写适合条件传送的代码,因为这可以让GCC自己识别并把代码转换成条件传送。