1.6 性能 (con’d)
$响应时间=CPU时间+等待时间$
$CPU时间=用户CPU时间+系统CPU时间$
测算CPU性能一般是通过计算用户CPU时间来进行
CPU 性能公式
常用 CPU 时间 来评价 CPU 性能
$\bigstar$ $\text{CPU Time} = 程序包含指令数量 \times \text{CPI} \times 时钟周期$
CPU 时间:包括用户 CPU 时间+系统 CPU 时间
时钟周期:硬件时钟产生的离散时间间隔
时钟频率 / 主频:时钟周期的倒数。主频越大,时钟周期越小。$$时钟周期 = \frac{1}{主频}$$
$\bigstar$ CPI (Clock Cycles Per Instruction):平均每条指令所需的时钟周期数 $$\text{CPI} = \sum_i \text{CPI}_i \times f_i$$,是所有类型指令按频率的加权平均值。
影响以上三因素:

- 算法不同:相同任务的指令数不同
- 编程语言不同:编译器生成的指令模式不同,影响 CPI
- 编程程序:优化好的话,总指令数就少;生成的指令类型不同,会影响平均 CPI
- 指令集体系结构 (ISA):决定任务要用多少指令,还会影响 CPI,还影响电路实现
- 计算机组成:流水线等 → 降低 CPI。数据通路设计、并行度、寄存器数目 → 决定能否提高主频(缩短时钟周期时间)。
- 实现技术:半导体工艺能让晶体管更快,缩短时钟周期
计算机设计包括指令集设计与计算机硬件设计。
(关系很复杂,指令数、CPI,时钟周期会相互影响,不是独立的)
MIPS:每秒执行的指令数($10^6$) $$\text{MIPS} = \frac{指令总数}{执行时间 \times 10^6}$$ 单凭MIPS判断性能不可靠,因为没有关注不同指令是否简单/复杂,所需的时钟数不同
MFLOPS:每秒执行的浮点指令数($10^6$)
总执行时间:所有程序所需时间按照频率的加权平均 (SPEC CPU Benchmark)
1.7 功耗
计算机功耗分为动态功耗、静态功耗
$动态功耗 \propto \frac{1}{2}CU^2 \times f$
$C$:负载电容、$U$ 工作电压、$f$ 开关频率
$静态功耗 \propto UI$
$U$ 工作电压、$I$ 泄漏电流
1.8 计算机的发展
摩尔定律:芯片上晶体管数量大约每 18–24 个月翻一番,硬件性能指数级提升。 → 强调硬件快速发展趋势。
安迪–比尔定律(Andy–Bill’s Law) 安迪给的(硬件性能红利),比尔拿走(软件膨胀消耗)。”→ 强调软件往往吃掉硬件的进步。
内存墙定律:CPU 性能提升远快于内存速度提升,最终程序性能受限于内存访问延迟。 → 强调存储瓶颈。
$\bigstar$ Amdahl定律:并行计算的加速比受限于程序中的串行部分:假设有 $P$ 部分可并行加速,有 $N$ 个处理器,那么加速比 $S(N) = \dfrac{1}{(1 - P) + \dfrac{P}{N}}$
- 即使处理器无限多,加速比最多也只有 $\frac{1}{1-P}$。
- 启示:再多处理器也无法突破串行部分的限制,优化串行部分比加处理器更重要
Gustafson定律:任何足够大的任务均可被有效的并行化。很多程序随着应用规模的扩大,程序中不能被并行化部分的执行时间基本保持不变
- 推论:只要问题规模可扩展,并行所带来的加速比就可扩展
2.1 指令系统概述
机器指令:计算机实现某操作的命令
指令系统(Instruction System):一台计算机所有指令的集合,是软件和硬件的接口和界面
指令系统的设计原则:完备性、有效性、规整性、兼容性
指令系统计算机 (Instruction Set Computer) 的分类:
- 复杂指令集计算机 (CISC):出现早,大而全
- 特点:系统复杂、指令周期很长、各种指令都能访问存储器、有专用寄存器、使用微程序控制、难以编译优化
- 存在的问题:研制周期长、难以调试和维护、时钟周期长、性能低
- 精简指令集计算机 (RISC):Jock Cocke 提出、小而精
- 特点:系统简化、寄存器-寄存器方式工作、指令周期短、使用大量通用寄存器、组合逻辑电路控制、采用优化的编译系统
- 常用 RISC 指令集:ARM, MIPS, RISC-V
2.2 指令格式
指令格式:操作码 +地址码(操作对象+寻址方式)
设计原则 有很多!:
- 规整性:指令长度(指令的二进制代码位数)
- 定长指令字 (RISC) :所有指令长度相同,向最长指令看齐。取指译码简单,浪费内存空间
- 变长指令字 (CISC):不同指令长度不同,灵活性更强,取指译码复杂。
- 有效性:每条指令的操作码只有一个,代表一个指令
操作码设计:操作码一般不等长
- 编码方式:定长操作码法 (Fixed Length Opcodes)、变长/扩展操作码法 (Expanding Opcodes)
- 操作码长度和指令长度没有绝对关系
- 当前 RISC 常用定长指令字、变长操作码
地址码设计:地址码子段可以是 0 到多个,按需求而定
