SLP(Chapter 10 part 2):性能优化

1 介绍

通常,使用一个逻辑简单但比较慢的程序比较好。
因为一个快的程序通常:1. 编写时间长;2. 提速不高,难以察觉;3.可以通过硬件升级达到

不同层次优化:

  • 建模 - 算法
  • 编码 - 程序/过程
  • 编译 - 底层 Low-level
  • 执行 - 硬件
  • ……

2 The Golden Rules of optimization 黄金准则(优化建模——算法)

良好的算法规则:优化程序的最佳和最重要的方法是使用良好的算法

时间复杂度Asymptotic complexity:衡量算法优劣
(但并不总是效率的适当指标,如底层优化)
在这里插入图片描述

3 Optimizing compilers 有优化功能的编译器

在这里插入图片描述
提高程序到汇编的映射
- 编译器对代码重排序
- 消除轻微效率低下

不足(妨碍优化的因素)

  • 内存别名 memory aliasing
    • 不同的指针可能会指向存储器的同一位置
      在这里插入图片描述
  • 函数副作用
    • 编译器不会判断一个函数是否有副作用,它会假设最糟的情况,并保持所有的函数调用不变
      在这里插入图片描述

4 Example of optimizing program

表达性能:每元素的周期数(CPE,cycle per element),在这里元素指的是代码块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

名字 情况 代码 备注
combine1 未优化 在这里插入图片描述 将v的所有元素求和,存到dest
combine2 eliminating loop inefficiencies消除低效循环 在这里插入图片描述 代码移动code motion
combine3 reducing procedure calls 减少过程调用 在这里插入图片描述
combine4 eliminating unneeded memory references消除不需要的内存引用(内存读写花费高) 在这里插入图片描述

5 General optimization techniques [self study]

  1. 编译时,选择优化选项
  2. 编码时

单击优化
更快的数学
更快的循环
避免表达式重复
使用汇编
使用寄存器
整数
指针取消引用
避免临时变量
字符串比较
++/–放在前面比放在后面块
按值调用 VS 按引用调用
重用代替重新分配
使用 switch()代替if-else
循环中尽早break

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章