核心概念
一、计算性能基础
-
响应时间与吞吐量的区别
- 响应时间:系统完成一个任务所需的时间(用户关心的)
- 吞吐量:系统在单位时间内完成的任务数量(管理员关心的)
-
性能评估公式
CPU执行时间 = 指令数 × CPI × 时钟周期时间- CPI(Cycles Per Instruction):每条指令的平均时钟周期数
- 时钟周期时间 = 1 / 主频
-
Amdahl定律
- 加速比 = 1 / ((1 - f) + f/s)
- f: 可加速部分的比例
- s: 加速因子
- 结论:整体性能受限于最慢的部分
二、指令集架构(ISA)
-
RISC vs CISC
- RISC(精简指令集):指令固定长度、单周期执行、大量寄存器
- CISC(复杂指令集):可变长度指令、多周期执行、复杂寻址模式
- 现代趋势:x86内部也采用RISC-like微架构
-
ARM架构特点
- load/store架构
- 条件执行
- 32/64位双模式
- 广泛应用在手机和嵌入式领域
-
x86-64扩展
- 从32位到64位的平滑过渡
- 新增16个通用寄存器
- 保持了与x86的兼容性
三、流水线技术
-
五级流水线
- IF(取指)→ ID(译码)→ EX(执行)→ MEM(访存)→ WB(写回)
- 理想情况下,每个时钟周期完成一条指令
-
流水线冒险
- 结构冒险:硬件资源冲突
- 数据冒险:依赖关系导致
- RAW(读后写):真依赖
- WAR(写后读):反依赖
- WAW(写后写):输出依赖
- 控制冒险:分支指令
- 解决方案:分支预测、延迟分支、推测执行
-
超标量与VLIW
- 超标量:每个周期发射多条指令(动态调度)
- VLIW:编译器静态调度,处理器动态执行
四、存储层次结构
-
局部性原理
- 时间局部性:最近访问的内存位置可能被再次访问
- 空间局部性:附近内存位置可能被访问
-
缓存结构
- 直接映射缓存
- 组相联缓存
- 全相联缓存
- L1/L2/L3多级缓存
-
缓存替换策略
- FIFO(先进先出)
- LRU(最近最少使用)
- Random(随机)
-
虚拟内存
- 页表:虚拟地址到物理地址的映射
- TLB:转换后备缓冲区,加速地址转换
- 缺页中断:页面不在内存时的处理
- 页面置换算法:FIFO、LRU、Optimal
五、并行处理
-
SIMD(单指令多数据)
- SSE/AVX指令集
- GPU并行计算
-
多核处理器
- 多线程(Thread-level parallelism)
- 多核(Core-level parallelism)
- 共享内存 vs 分布式内存
-
GPU计算
- CUDA编程模型
- 数千个核心并行处理
- 适合数据并行任务
六、输入输出系统
-
I/O接口标准
- USB(通用串行总线)
- PCIe(高速总线)
- NVMe(固态硬盘协议)
-
DMA(直接内存访问)
- 允许外设直接访问内存,无需CPU干预
- 减少CPU负担
-
中断与轮询
- 中断:外设主动通知CPU
- 轮询:CPU主动检查外设状态
- 中断方式效率更高
关键公式汇总
- 响应时间 = CPU时间 / 进程数
- 吞吐量 = 进程数 / CPU时间
- CPU时间 = 指令数 × CPI × 时钟周期
- 加速比 = 旧系统性能 / 新系统性能
- Amdahl定律:Speedup = 1 / ((1-f) + f/s)
实践要点
- 代码优化要考虑指令级并行性
- 选择合适的数据结构以利用缓存局部性
- 理解编译器生成的汇编代码
- 测量实际性能,不要仅凭直觉优化
- 关注瓶颈:CPU、内存、I/O哪个是限制因素