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

写在前面:

这部分主要是对于怎样优化程序部分的笔记和理解。

优化 的主要的方式:

  1. 选择合适的算法和数据结构
  2. 编写编译器能够有效优化的代码
  3. 对于运算量特别大的任务可以分成多个部分,多核多处理器的并行计算。线程并行计算。

    就是实现代码的简单性和速度的权衡。

具体的步骤:
1. 消除程序内不必要的内容
2. 利用处理器提供的指令级并行能力

代码剖析程序:测量程序各个部分性能的工具,分析代码证=中低效的地方。
大多数的编译器都提供优化控制:gcc而言 -o1,-o2,-o3 让编译更全面优化

存储器别名使用:编译器必须考虑假设不同的指针可能指向存储器的同一个位置。
看似相同的过程会产生不同的结果。

编译器:可以采用叫做内联函数替换的方式进行优化
先转换为内联代码 再对这样的代码做整体的优化。

Java所使用的数组表示法采用边界检查,边界检查大大降低了程序出错的概率,但是也会减缓程序的执行。
消除循环的低效率:每次循环迭代都必须对测试条件进行条件求值,如果这个值不会随着循环的变化而变化,就没有必要每次都求一次,求一次然后每次使用就好。
这叫做代码移动的优化:识别代码中执行多次但是计算结果不会改变的计算,将计算移动到代码前面不会被多次执行的位置。

代码级上:看上去像是一次执行一条指令
实际的处理器:是同时对于多条指令求值,这个现象就是指令级并行,采用一些精密的机制老确保这种并行执行的行为正好获得机器级程序要求的顺序语义模型的效果。

猜你喜欢

转载自blog.csdn.net/zhc_24/article/details/78955514