第0讲:课程介绍及软件优化概述
- 课程介绍
- 软件优化的概念及目标
第1讲 专用计算系统及优化
- 专用计算系统的例子
- 专用计算系统的一种理想模型——专用图灵机
- 专用图灵机模型上的性能优化概念
- 专用图灵机的实现及优化
- 有限状态机及优化
- 状态数目最小化 -> 减少延时,减少状态存储单元的数目
- 布尔函数及优化
- 逻辑开关的材料演化 -> 提高逻辑的开关速度
- 减少布尔函数的级联层次 -> 减少级联延时
- 布尔函数表达式化简 -> 减少逻辑门的数目
第2讲 通用计算系统-CPU
- 通用图灵机模型——专用图灵机作为输入的一部分
- 通用图灵机的实现——CPU
- 专用计算系统的编码:指令序列
- CPU的状态机:取指-解码-执行-访存-写回
- 状态机的组成与实现
- Adder、ALU、Register、Memory、指令
- 指令的实现
- 算术逻辑指令的实现 -> 基本逻辑函数库
- 数据转移指令的实现 -> 数据输入输出
- 控制转移指令的实现 —> 状态转移
- CPU的优化
第3讲 计算优化
pdf: lec3
pdf: lec3.1
- 指令内并行
- 8位 -> 64位机器
- 向量指令
- CPU、GPU、TPU、NPU的指令集扩展
- 多媒体、图形图像、统计机器学习计算需求
- 指令内并行与软件优化
- 软件优化举例
- 指令级并行1: 流水
- 流水线CPU及其加速比
- 流水线CPU的加速限制
- 结构依赖
- 数据依赖
- 控制依赖
- 软件优化与流水
- 编程优化
- 指令级并行2: 多发射
- 静态多发射
- 动态多发射
- 软件优化与多发射
- VLIW及指令选择
- 指令调度
- 循环展开与软件流水
- 例子
- 编程优化
- 面向指令级并行的高性能编程
- 线程级并行
- 多处理器并行
第4讲:访存优化1: 寄存器访问
- 存储技术分类介绍
- 寄存器、SRAM、DRAM、Disk、Flash、PCM
- 各存储技术的基本特点:组成结构、访问性能、成本、应用场合
- memory wall:CPU与内存之间的速度差异越来越大
- 存储层次:访问性能越好的存储技术,成本越高
- 局部性
- 预测不久的未来即将访问的数据或代码对象
- 时间局部性、空间局部性、数据引用局部性、代码引用局部性
- 访存优化原理
- memory wall:内存性能成为日益严重的瓶颈
- 存储层次:有机会局部改善存储性能
- 局部性:数据的访问不平衡,且可预测
- 结论:根据预测数据访问模式,将有限的高性能存储分配给急需的数据,以改善性能
- 寄存器访问
- 原则:尽可能多地将近期最热的数据分配给稀缺的寄存器
- 寄存器使用约定:参数、返回值、局部变量对寄存器的使用
- 程序员提示
- 寄存器分配算法举例:图着色算法
- 最热:spill冷数据
- 共享:最少着色
- 近期最热数据:生命期划分?
第5讲:访存优化2: 缓存
- 缓存的组织结构和操作
- 缓存的性能度量——memory mountain
- 缓存访问优化:改善空间局部性
- block size
- loop interchange (or loop reordering)
- 缓存访问优化:改善时间局部性
- cache size
- cache blocking (or loop tiling)
- 缓存访问优化:cache prefetching
- to hidden cache miss & exploit spatial locality
- hardware cache prefetching
- software cache prefetching
- 软件管理存储——Scratchpad memory (SPM)
第6讲:访存优化3: 栈与堆
第7讲:访存优化4: 虚拟存储
- 虚拟存储的概念
- 基于虚拟存储的映射机制
- 页表结构、虚拟内存区域VMA(区分已分配未映射)、访问权限
- 虚拟存储优化
- 改善空间局部性:page size、prefetching
- 改善时间局部性:memory size、全相联映射、
- 页面替换算法、工作集大小识别
- demand-paging, copy-on-write, 内存压缩
- page cache及例子
- 页表优化
- 虚拟地址空间布局及其形成过程
- 物理内存分配和管理
- 绩效指标:分配性能和内存利用率
- 伙伴系统分配器
- SLAB分配器
- 空闲列表分配器
第8讲:编译过程及编译优化
- 编译流程
- C语言到汇编的翻译
- 面向对象到C的翻译
- 编译优化概述
- 机器无关优化
- 机器相关优化
- 编译优化实例
- 函数调用性能问题 -> inline优化
- heap分配性能问题 -> heap对象转栈存储
- stack空间压缩问题 -> stack slot coloring
- link阶段优化
- load阶段优化
可选1:虚拟机优化
- 解释执行
- JIT优化
- GC优化
- Python性能优化实例
- 静态类型化
- heap分配优化
- 原生代码数据结构优化