文章

性能优化PPT1

性能优化PPT1

🧠 课程笔记:Session 1 - Performance Optimisation Overview

📘 教学主题概览

  • 课程分为两部分:
    • 前 4 周:性能优化
    • 后 4 周:GPU 编程
  • 课程目标:让代码跑得更快,理解和应用性能建模、测量与优化

❓ 核心问题:代码怎么才能跑更快?

答案是:像科学实验一样对待你的程序!

  1. 测量(Measure):运行程序并收集性能数据
  2. 建模(Model):解释程序运行中的性能瓶颈
  3. 优化(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 进行授权