表示计算机性能的参数主要有两种
- 执行时间 Execution time $[s]$: 一个给定的程序需要多长时间执行完
- 吞吐量 Throughput $[s^{-1}]$: 在单位时间内可以处理多少任务
而评估处理器最佳的指标, 是执行时间的倒数
$Performance_x \sim \frac{1}{ExTime_x}$
所以相对性能:
$\frac{ExTime_A}{ExTime_B}=\frac{Performance_B}{Performance_A}$
时间测量
Elapsed time
Elapsed time: elapsed real time (or simply real time, or wall-clock time) is the time taken from the start of a computer program until the end as measured by an ordinary clock. Elapsed real time includes I/O time, any multitasking delays, and all other types of waits incurred by the program. (Wikipedia)
说白了就是, 真的去测量一个程序运行时间. 所以包含IO, 多任务造成的延迟阻塞等等.
CPU time [Prozessorausführungszeit]
不包含IO和在别的程序上花费的时间,阻塞等等.
可以再简单分为:
- user CPU time 在程序上花费的时间(用户空间)
- system CPU time 这个程序在系统调用花费的时间(内核空间)
CPU time = usr+sys
执行时间计算
$T_{exe}=I_c \times CPI \times T$
- $T_{exe}$: 一个程序的 CPU time
- $I_c$: 执行时处理的机器指令数量
- $CPI$: Cycle per instruction 平均处理每个指令需要多少周期
- $T$: 处理器时钟频率, 主频
这是一张关系图. 来自某个大学讲义.
下面这张图来自南大lecture03.pdf
clock rate和Instr. Set Arch. 可能有关系, 不知道这个课件是否出现错误.
考虑一下单循环处理器(CPI=1) 命令最小命令周期取决与耗时最长的指令. 所以指令对clock rate会有影响.
关于CPI
不同类型的指令有不同的CPI, 我们通常使用平均CPI.
$CPI=\sum^{n}_{i=1}(CPI_i\cdot F_i)$
比如:
数学逻辑运算占50%, CPI=1
Load占20%, CPI=2
Store占10%,CPI=2
分支跳转占20, CPI=2
CPI=1.5
MIPS-Rate (million instructions per second)
MIPS-Rate常用作产品指标.(某大学课件: (很可惜)被经常作为常用指标)
$MIPS-Rate \sim \frac{I_c}{ T_{exe} \times 10^6 }$
因为MIPS-Rate并没有覆盖$I_c$,$CPI$和$T$(指令总数, CPI和时钟频率). 所以MIPS-Rate并不可靠.
首先CPI是不同的, 每条指令耗时不同,所以MIPS是平均值.
Peak-MIPS 则选择CPI最小的一组指令, 实际应用参考价值不高. 就像考试出的题都是找你会的出的. 这样的考试除了图一乐没有意义.
有些时候来自于软件的优化可能在性能提升的同时MIPS-Rate不升反降. 比如把MIPS-Rate喜闻乐见的小CPI指令优化掉后, 留下的都是更耗时的指令. 所以MIPS-Rate变低, 但是整个任务耗时却缩短了. 这就是因为这个指标并不考虑$I_c$(指令总数).
MFLOPS通常是高性能机器的指标.
Benchmarks
计算机是需要进入生产环境的. 所以性能测试最好比较接近实际生产环境. 于是最好的测试方法就是给一些实际的应用来模拟一些场景.
然后对其得到的各个Benchmark的结果进行一些简单的处理.
比如简单的直接累加, 算术平均, 几何平均, 加权平均.
Benchmarks之于机器也有缺陷, 就像凯氏定氮法之于奶粉一样…
最后提一句 Standard Performance Evaluation Corporation
Amdahls定律
[=========|==part F==|============]
首先, 优化系数(加速比):
$S=\frac{F}{F_{opt}}$
当F只是整体中的一部分时: (这是一个Amdahls的变用)
$SpeedUp=\frac{1}{(1-F)+\frac{F}{S}}$
Comments
ai:
"\"这个符号应该是除号吧?
Replyrestkhz:(admin)
restkhz:(admin)