法则

80/20 Rule

即Pareto Principle, 80%的CPU时间被20%的程序占用,要想提高性能需要关注这20%

Amdahl’s Law

阿姆达尔法则:系统优化某部件获得的总提升率取决于该部件使用的频率(占总执行时间的比例)
Ch9 性能度量 - 图1
举例:

| 如左图,并行处理的5核心CPU中一个核心处理速度提高了10%,求整体加速比例.

解:
升级加速比=20/18=10/9
1/[80%+20%/(10/9)]=1/0.98≈102%,整体提高了2% | image.png | | —- | :—-: |


计时器

衡量性能的两种常用方法:timer(计时器) & profiler(探查器) tools

Time in CS

CS中的时间分为两种: wall time和cpu time

Ch9 性能度量 - 图3**

wall time
程序执行的总持续(duration)时间
(包括等待用户IO等)
用户时间 在user process中执行相关指令的时间
系统时间 在kernel中代表user process执行指令的时间
其他时间 执行其余和user process无关指令的时间
CPU time
程序执行指令花费的时间
用户CPU时间 CPU直接执行代码的时间
系统CPU时间 OS代表程序使用CPU执行指令的用时

Timer

要使用time,需要借助timer

定义 timer是CS(Computer System)中的组件,可作为硬件/软件,可在某种程度上衡量时间
硬件中 x86有专门的时间戳计数器(TSC, time stamp counter),可通过特殊指令使用
OS中
- Linux
- 内部实现:始于启动时读取RTC(时钟芯片),进行转换; 1970.1.1 0:00 AM
- 系统调用: times(), gettimeofday()等
- 时间片: OS Scheduler
- Windows
- 内部实现:始于启动时读取RTC(时钟芯片),进行转换; 1970.1.1 12:00 PM
- 系统调用: GetLocalTime(),GetSystemTime()
- 时间片: OS Scheduler
C/C++中 数据类型: clock_t, time_t
宏: CLOCKS_PER_SEC
函数:中的 Clock(), Time()

性能探查器

定义 对代码的执行进行基准测试(benchmark)的程序,帮助用户了解在代码执行花费的时间
提供信息
- 源码运行时间
- 范围分析
- (函数)执行记录
- 执行次数
意义
- 找到程序的瓶颈
- 找到最高频执行的代码

统计抽样

Statistical Sampling(统计抽样)是profiler的一种工作模式:通过在程序运行过程中暂停程序,记录堆栈中的信息,然后恢复程序来分析程序.暂停、记录、恢复的速度是非常迅速的,相对于程序的执行时间可以忽略不计

  • 优点:①代码可自动执行; ②性能探测的影响可被最小化



选择题知识点

  1. 阿姆达尔定律用于程序优化意味着:连续(successive)的优化带来的回报是递减的(diminishing)
  2. 可以有效探查程序性能的方法:

①使用C/C++中的stopwatch类
②Statistical Sampling(统计抽样)
③使用系统监控工具(System Monitors)

  1. 进行优化的最合理阶段是:函数written&debug结束
  2. 优化的第一步是:找到Hotspots
  3. 80/20原则程序运行中指:80%的运行时间被20%的代码占用
  4. 关于探查器,下列正确说法是: 全部

①GPROF是Linux下的探查器②探查器可估计程序花费时间③探查器可获得不同部分执行时间