性能优化PPT1
性能优化PPT1
🧠 课程笔记:Session 1 - Performance Optimisation Overview
📘 教学主题概览
- 课程分为两部分:
- 前 4 周:性能优化
- 后 4 周:GPU 编程
- 课程目标:让代码跑得更快,理解和应用性能建模、测量与优化
❓ 核心问题:代码怎么才能跑更快?
答案是:像科学实验一样对待你的程序!
- 测量(Measure):运行程序并收集性能数据
- 建模(Model):解释程序运行中的性能瓶颈
- 优化(Optimise):根据模型选择合适的优化手段
🧰 工具与知识点概览
- CPU 架构基础
- 性能分析工具:
- CPU 拓扑、亲和性(affinity)
- 性能计数器(performance counters)
- Roofline 模型
- 数据布局变换
- 实验环境:Hamilton8 超算集群(128 核 × 多节点)
🖥️ 存储程序计算机架构(Stored-program Architecture)
- 指令与数据都存储在内存中
- 本质结构自 1945 年起没有变化,但现代 CPU 更复杂
- 主要组成:
- CU:控制单元(control unit)
- ALU:算术逻辑单元
- Cache / 内存 / 寄存器
🔧 性能瓶颈分析(一):指令执行(Instruction Execution)
- 衡量指标:吞吐量(throughput),单位为指令/秒
- 关键:看 CPU 如何“退休指令(retired instruction)”
📌 示例:
1
2
3
for (int i = 0; i < N; i++) {
a[i] = a[i] + b[i];
}
用户视角:只做 N 次加法 处理器视角:需要执行 6N 条汇编指令(加载、加法、存储、跳转)
🚪 性能瓶颈分析(二):数据传输(Memory Bandwidth)
衡量指标:带宽(bandwidth),单位为 bytes/s 加法循环中每次迭代涉及: 读取 a[i](8B) 读取 b[i](8B) 写回 a[i](8B) 合计:24 字节/次
🔍 如何判断瓶颈在哪?
两类瓶颈: 指令瓶颈:执行速度跟不上(低 IPC) 数据瓶颈:带宽不足 工具方法: 用测量工具(如 likwid)获取性能数据 对照性能模型(如 roofline)判断限制因素
🧠 SIMD & 向量化(Single Instruction, Multiple Data)
核心思想:一条指令处理多个数据 加法示例向量化前后: scalar:1 条 ADD = 1 次加法 SIMD:1 条 AVX ADD = 8 次加法(8 个 float)
📌 SIMD 对单核性能至关重要!
⛓️ 指令级并行(ILP)机制:
流水线(Pipelining):将指令分阶段执行(取/译/执行/写) 超标量(Superscalar):多条无依赖指令可同时执行 乱序执行(Out-of-Order):按数据可用性而不是顺序执行
关键定义
Cycle | 时钟周期 | CPU 执行的基本“滴答”,是最小的时间单位 |
Frequency | 频率 | 每秒钟的时钟周期数(单位:赫兹 Hz),表示 CPU 的速度 |
Latency | 延迟 | 一条指令从开始到完成所需的时钟周期数(越小越好) |
Throughput | 吞吐量 | 单位时间内 CPU 能执行的指令数量(越大越好) |
📊 不同 SIMD 指令集比较表
行号 | 使用的指令集 | 每条指令处理的数据量 | 指令数量说明 |
---|---|---|---|
1️⃣ | Scalar(标量) | 每条指令处理 1 个元素 | 最慢,需要最多指令 |
2️⃣ | SSE(Streaming SIMD Extensions) | 每条指令处理 2 个元素 | 比标量快一倍 |
3️⃣ | AVX(Advanced Vector Extensions) | 每条指令处理 4 个元素 | 比 SSE 快一倍 |
4️⃣ | AVX512 | 每条指令处理 8 个元素(或更多) | 最快,性能最佳(图中是例子,有的平台可到 16) |
本文由作者按照 CC BY 4.0 进行授权