01
GPU内存全景概览
为什么GPU需要复杂的内存层次?从冯·诺依曼瓶颈到GPU的解决方案。
全景基础
02
全局内存 (Global Memory)
显存的基础,容量最大但延迟最高,所有线程均可访问。
显存高延迟
03
全局内存合并访问
如何让128字节的缓存线被充分利用?连续线程访问连续地址是关键。
合并带宽
04
全局内存Bank冲突
虽然全局内存没有Bank,但理解其与共享内存的协同至关重要。
协同概念
05
L2缓存
芯片上的统一缓存,为全局内存访问提供加速,所有SM共享。
缓存统一
06
L1缓存/共享内存 (Shared Memory)
同一SM内线程共享,延迟极低,可编程控制。
低延迟可编程
07
共享内存Bank冲突
地址映射到32个Bank,多线程访问同一Bank导致串行化。
Bank串行化
08
共享内存无冲突访问模式
利用广播、掩码和填充技术避免Bank冲突。
广播填充
09
寄存器 (Register)
最快的存储,每个线程私有,容量极小(通常255个/线程)。
最快私有
10
寄存器溢出 (Register Spill)
寄存器不够用时的无奈之举,数据被压入局部内存。
溢出局部内存
11
局部内存 (Local Memory)
寄存器溢出的归宿,物理上位于显存,但享有L1/L2缓存。
溢出缓存
12
常量内存 (Constant Memory)
只读,带缓存,适合所有线程访问同一数据。
只读广播
13
纹理内存 (Texture Memory)
专为空间局部性优化,支持硬件插值和边界处理。
空间局部插值
14
表面内存 (Surface Memory)
类似纹理,但支持读写操作,用于2D数据访问。
读写2D
15
统一内存 (Unified Memory)
简化编程模型,自动在CPU和GPU间迁移数据。
自动迁移简化
16
页错误与迁移策略
统一内存的核心机制,按需分页,隐藏数据传输。
分页按需
17
内存带宽计算
理论带宽 vs 有效带宽,如何用CUDA带宽测试工具测量。
带宽测量
18
内存延迟隐藏
通过大量线程切换来掩盖访存延迟,GPU的并行哲学。
延迟隐藏并行
19
Occupancy与内存延迟
高Occupancy不一定最优,寄存器压力与延迟隐藏的平衡。
Occupancy平衡
20
内存合并访问实战
结构体数组 (SoA) vs 数组结构体 (AoS) 的访存模式对比。
SoAAoS
21
共享内存优化案例
矩阵转置中的Bank冲突消除,从60GB/s到120GB/s的跃升。
优化转置
22
常量内存最佳实践
系数查找表、三角函数近似,如何利用广播特性。
查找表广播
23
纹理内存应用
图像卷积、随机数生成,利用硬件缓存加速。
图像硬件加速
24
统一内存性能调优
prefetch、advise接口的使用,避免页错误风暴。
prefetch调优
25
内存层次协同设计
如何同时利用共享内存、常量内存和纹理内存解决复杂问题。
协同混合
26
NVIDIA GPU架构演进
从Fermi到Hopper,内存层次的变化与不变。
架构演进
27
AMD GPU内存架构
Infinity Cache、显存控制器与NVIDIA的异同。
AMDInfinity Cache
28
Intel GPU内存架构
Xe架构中的全局/共享内存设计,与CUDA的映射关系。
IntelXe
29
内存性能分析工具
NVIDIA Nsight Compute、Visual Profiler中的内存指标解读。
分析Nsight
30
未来趋势
HBM3、CXL互连、存算一体对GPU内存层次的影响。
HBM3CXL