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
combine2eliminating loop inefficiencies消除低效循环在这里插入图片描述代码移动code motion
combine3reducing procedure calls 减少过程调用在这里插入图片描述
combine4eliminating unneeded memory references消除不需要的内存引用(内存读写花费高)在这里插入图片描述

5 General optimization techniques [self study]

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

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


版权声明:本文为wowhahaha原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。