法则
80/20 Rule
即Pareto Principle, 80%的CPU时间被20%的程序占用,要想提高性能需要关注这20%
Amdahl’s Law
阿姆达尔法则:系统优化某部件获得的总提升率取决于该部件使用的频率(占总执行时间的比例)
举例:
| 如左图,并行处理的5核心CPU中一个核心处理速度提高了10%,求整体加速比例.
解:
升级加速比=20/18=10/9
1/[80%+20%/(10/9)]=1/0.98≈102%,整体提高了2% | |
| —- | :—-: |
计时器
衡量性能的两种常用方法:timer(计时器) & profiler(探查器) tools
Time in CS
CS中的时间分为两种: wall time和cpu time
**
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 函数: |
性能探查器
定义 | 对代码的执行进行基准测试(benchmark)的程序,帮助用户了解在代码执行花费的时间 |
---|---|
提供信息 | - 源码运行时间 - 范围分析 - (函数)执行记录 - 执行次数 |
意义 | - 找到程序的瓶颈 - 找到最高频执行的代码 |
统计抽样
Statistical Sampling(统计抽样)是profiler的一种工作模式:通过在程序运行过程中暂停程序,记录堆栈中的信息,然后恢复程序来分析程序.暂停、记录、恢复的速度是非常迅速的,相对于程序的执行时间可以忽略不计
- 优点:①代码可自动执行; ②性能探测的影响可被最小化
选择题知识点
- 阿姆达尔定律用于程序优化意味着:连续(successive)的优化带来的回报是递减的(diminishing)
- 可以有效探查程序性能的方法:
①使用C/C++中的stopwatch类
②Statistical Sampling(统计抽样)
③使用系统监控工具(System Monitors)
- 进行优化的最合理阶段是:函数written&debug结束
- 优化的第一步是:找到Hotspots
- 80/20原则程序运行中指:80%的运行时间被20%的代码占用
- 关于探查器,下列正确说法是: 全部
①GPROF是Linux下的探查器②探查器可估计程序花费时间③探查器可获得不同部分执行时间