图书目录

目 录

第 1章 介绍 ……………………………………………………………………… 

1.1 并行编程 ……………………………………………………………………………… 2 

1.2 GPU …………………………………………………………………………………… 3 

1.3 ROCm ………………………………………………………………………………… 5 

1.4 HIP框架 ……………………………………………………………………………… 6 

1.5 本书内容 ……………………………………………………………………………… 6

第 2章 开始使用 HIP编程 ……………………………………………………… 

2.1 在 HIP中实现“Hello World” ……………………………………………………… 8 

2.2 使用 HIP进行数据处理——Vector Add 示例 ……………………………………… 9 

2.2.1 并行执行的机会……………………………………………………………… 9 

2.2.2 组织线程…………………………………………………………………… 10 

2.2.3 使用 HIP API 进行数据传输 ……………………………………………… 12 

2.2.4 错误和正确性检查………………………………………………………… 13 

2.2.5 综合示例…………………………………………………………………… 14 

2.3 总结 ………………………………………………………………………………… 16

第 3章 HIP内核编程……………………………………………………………… 

3.1 在 HIP内核中调用函数 …………………………………………………………… 18 

3.1.1 HIP中的 __global__ 函数 ……………………………………………… 18 

3.1.2 HIP中的 __device_ _ 函数 ……………………………………………… 19 

3.1.3 HIP中的 __host__ 函数 ………………………………………………… 20 

3.1.4 结合 __host__ 和 _ _device__ 函数 ……………………………………… 20 

3.2 在 HIP内核中使用模板 …………………………………………………………… 21 

3.3 在 HIP中使用结构体 ……………………………………………………………… 22 

3.4 总结 ………………………………………………………………………………… 26

第 4章 HIP运行时 API …………………………………………………………… 

4.1 HIP内存管理 ……………………………………………………………………… 27 

4.1.1 固定内存…………………………………………………………………… 27 

4.1.2 统一内存…………………………………………………………………… 29 

4.2 HIP流 ……………………………………………………………………………… 30 

4.2.1 流的基础知识……………………………………………………………… 31 

目 录

4.2.2 基于流的关键 API ………………………………………………………… 31 

4.2.3 默认流与非默认流………………………………………………………… 32 

4.2.4 并发内核…………………………………………………………………… 33 

4.2.5 重叠计算与通信…………………………………………………………… 33 

4.3 HIP事件 …………………………………………………………………………… 35 

4.3.1 创建 HIP事件 …………………………………………………………… 35 

4.3.2 记录 HIP事件 …………………………………………………………… 35 

4.3.3 使用 HIP事件计算耗时 ………………………………………………… 36 

4.3.4 使用 HIP事件协调操作 ………………………………………………… 36 

4.3.5 使用 HIP事件释放内存 ………………………………………………… 36 

4.3.6 创建具有特定标志的事件………………………………………………… 37 

4.3.7 确保两种处理单元之间的一致性………………………………………… 37 

4.3.8 使用 HIP事件的向量加法 ……………………………………………… 37 

4.4 总结 ………………………………………………………………………………… 39

第 5章 GPU编程模式 …………………………………………………………… 

5.1 二维内核 …………………………………………………………………………… 40 

5.2 模板计算 …………………………………………………………………………… 44 

5.3 多内核示例——广度优先搜索 …………………………………………………… 47 

5.4 CPU-GPU 协同计算——KMeans ………………………………………………… 49 

5.5 原子操作——直方图 ……………………………………………………………… 52 

5.6 总结 ………………………………………………………………………………… 54

第 6章 AMD GPU内部原理……………………………………………………… 

6.1 AMD GPU ………………………………………………………………………… 55 

6.2 整体架构 …………………………………………………………………………… 57 

6.3 命令处理器和 DMA引擎 ………………………………………………………… 58 

6.4 工作组分发 ………………………………………………………………………… 58 

6.5 指令调度器 ………………………………………………………………………… 60 

6.6 SIMD 单元 ………………………………………………………………………… 61 

6.7 线程分歧 …………………………………………………………………………… 62 

6.8 内存合并 …………………………………………………………………………… 64 

目 录

6.9 内存层次结构 ……………………………………………………………………… 65 

6.10 AMD RDNA GPUs ……………………………………………………………… 66 

6.11 总结 ……………………………………………………………………………… 67

第 7章 HIP工具…………………………………………………………………… 

7.1 ROCmInfo ………………………………………………………………………… 68 

7.2 ROCm SMI ………………………………………………………………………… 71 

7.3 ROCm 调试器 ……………………………………………………………………… 73 

7.4 ROCm 分析器 ……………………………………………………………………… 76 

7.4.1 ROCTracer ………………………………………………………………… 76 

7.4.2 ROCProfiler ……………………………………………………………… 78 

7.5 ROCm Profiler V2 ………………………………………………………………… 80 

7.5.1 应用程序追踪……………………………………………………………… 80 

7.5.2 内核分析…………………………………………………………………… 81 

7.5.3 ROCSys …………………………………………………………………… 84 

7.6 使用 Hipify 将 CUDA程序移植到 HIP…………………………………………… 86 

7.6.1 Hipify 工具 ………………………………………………………………… 86 

7.6.2 一般 Hipify 指南 ………………………………………………………… 90 

7.6.3 矩阵转置的 Hipify ………………………………………………………… 91 

7.6.4 常见问题及解决方案……………………………………………………… 93 

7.7 总结 ………………………………………………………………………………… 94

第 8章 HIP性能优化……………………………………………………………… 

8.1 高度并行的工作负载——图像伽马校正 ………………………………………… 95 

8.2 固定大小的内核——图像伽马校正 ……………………………………………… 98 

8.3 归约——数组求和 ………………………………………………………………… 100 

8.4 分块与复用——矩阵乘法 ………………………………………………………… 103 

8.5 分块与合并——矩阵转置 ………………………………………………………… 107 

8.6 总结 ………………………………………………………………………………… 109

第 9章 ROCm库 ……………………………………………………………… 

9.1 rocBLAS …………………………………………………………………………… 110 

9.1.1 使用 rocBLAS …………………………………………………………… 111 

目 录

9.1.2 rocBLAS 函数 …………………………………………………………… 113 

9.1.3 异步执行…………………………………………………………………… 114 

9.1.4 MI100 上的 rocBLAS …………………………………………………… 115 

9.1.5 从传统 BLAS 库迁移 …………………………………………………… 115 

9.2 rocSPARSE ………………………………………………………………………… 116 

9.2.1 稀疏数据表示……………………………………………………………… 116 

9.2.2 rocSPARSE 函数 ………………………………………………………… 118 

9.3 rocFFT ……………………………………………………………………………… 120 

9.3.1 rocFFT工作流程 ………………………………………………………… 121 

9.3.2 FFT执行计划……………………………………………………………… 122 

9.4 rocRAND …………………………………………………………………………… 123 

9.5 总结 ………………………………………………………………………………… 126

第 10章 多 GPU编程 ………………………………………………………… 

10.1 HIP设备 API ……………………………………………………………………… 128 

10.2 基于流的多 GPU 编程 …………………………………………………………… 130 

10.3 基于线程的多 GPU 编程 ………………………………………………………… 132 

10.4 基于 MPI 的多 GPU 编程………………………………………………………… 134 

10.5 GPU—GPU 通信 ………………………………………………………………… 137 

10.6 RCCL ……………………………………………………………………………… 141 

10.6.1 广播 ……………………………………………………………………… 141 

10.6.2 AllReduce ………………………………………………………………… 143 

10.7 总结 ……………………………………………………………………………… 145

第 11章 使用 ROCm进行机器学习 ………………………………………… 

11.1 ROCm上的 PyTorch ……………………………………………………………… 146 

11.1.1 安装 PyTorch …………………………………………………………… 147 

11.1.2 测试 PyTorch安装 ……………………………………………………… 147 

11.1.3 使用 Inception v3模型进行图像分类…………………………………… 148 

11.2 ROCm上的 TensorFlow ………………………………………………………… 150 

11.2.1 安装 TensorFlow ………………………………………………………… 150 

11.2.2 测试 TensorFlow安装 …………………………………………………… 151 

目 录

11.2.3 使用 TensorFlow进行训练 ……………………………………………… 151 

11.3 总结 ……………………………………………………………………………… 152

第 12章 数据中心中的 ROCm………………………………………………… 

12.1 容器化的 ROCm ………………………………………………………………… 153 

12.2 使用 Kubernetes管理 ROCm容器 ……………………………………………… 154 

12.3 使用 SLURM管理 ROCm节点 ………………………………………………… 156 

12.3.1 SLURM交互模式 ……………………………………………………… 157 

12.3.2 SLURM批处理提交模式 ……………………………………………… 157 

12.4 总结 ……………………………………………………………………………… 158

第 13章 第三方工具 …………………………………………………………… 

13.1 PAPI ……………………………………………………………………………… 159 

13.1.1 PAPI工具和测试 ………………………………………………………… 160 

13.1.2 PAPI对 AMD GPU的支持 ……………………………………………… 163 

13.1.3 预设事件与计数器分析工具包 ………………………………………… 164 

13.2 Score-P和 Vampir ………………………………………………………………… 165 

13.2.1 使用 Score-P进行跟踪 ………………………………………………… 166 

13.2.2 Score-P的使用 …………………………………………………………… 166 

13.2.3 对 Quicksilver应用程序的性能分析 …………………………………… 167 

13.3 Trace Compass和 Theia ………………………………………………………… 169 

13.4 TAU ……………………………………………………………………………… 174 

13.4.1 使用 TAU分析 HIP程序性能 ………………………………………… 174 

13.4.2 使用 TAU跟踪 HIP程序 ……………………………………………… 175 

13.4.3 使用 APEX测量 HIP程序 ……………………………………………… 178 

13.4.4 TAU总结 ………………………………………………………………… 180 

13.5 TotalView调试器 ………………………………………………………………… 180 13.6 HPCToolkit………………………………………………………………………… 184 

13.6.1 HPCToolkit的工作流程 ………………………………………………… 185 

13.6.2 使用 HPCToolkit分析 PIConGPU ……………………………………… 186 

13.6.3 收集和分析性能数据和跟踪文件 ……………………………………… 186 

13.6.4 使用硬件计数器进行测量 ……………………………………………… 188 

目 录

13.7 使用 Linaro Forge进行调试和性能分析………………………………………… 190 

13.7.1 Linaro DDT ……………………………………………………………… 190 

13.7.2 Linaro MAP ……………………………………………………………… 191 

13.7.3 Linaro性能报告 ………………………………………………………… 191 

13.7.4 使用 Linaro DDT进行 GPU调试 ……………………………………… 192 

13.7.5 使用 Linaro MAP分析 GPU性能 ……………………………………… 195 

13.7.6 GPU性能报告 …………………………………………………………… 197 13.8 E4S——极端规模科学软件栈 …………………………………………………… 198

第 14章 HIP编程实战:大模型自注意力机制与 FlashAttention ………… 

14.1 自注意力机制简介 ……………………………………………………………… 200 

14.2 FlashAttention核心思想 ………………………………………………………… 201 

14.3 HIP实现 FlashAttention ………………………………………………………… 202

附录 A ROCm安装 …………………………………………………………… 

A.1 先决条件…………………………………………………………………………… 216 

A.2 理解 ROCm 软件包 ……………………………………………………………… 217 

A.3 安装………………………………………………………………………………… 218 

A.3.1 安装脚本方法 …………………………………………………………… 218 

A.3.2 包管理器方法 …………………………………………………………… 219 

A.3.3 验证安装过程 …………………………………………………………… 220 

A.4 升级 ROCm………………………………………………………………………… 220 

A.5 卸载 ROCm………………………………………………………………………… 221

附录 B CDNA汇编……………………………………………………………… 

B.1 使用 CDNA汇编代码 …………………………………………………………… 222 

B.1.1 检索 HIP内核二进制文件 ……………………………………………… 222 

B.1.2 反汇编 CDNA二进制文件 ……………………………………………… 223 

B.2 CDNA寄存器 ……………………………………………………………………… 223 

B.3 指令类型 …………………………………………………………………………… 224 

B.4 内存访问指令 ……………………………………………………………………… 224 

B.5 示例:移位复制 …………………………………………………………………… 225 

B.6 示例:分支 ………………………………………………………………………… 226 

目 录

B.7 比较 CDNA2 和 CDNA3 ………………………………………………………… 228 

B.8 总结 ………………………………………………………………………………… 229

附录 C OmniTools ……………………………………………………………… 

C.1 Omnitrace ………………………………………………………………………… 230 

C.1.1 Omnitrace 配置文件 ……………………………………………………… 230 

C.1.2 收集跟踪数据 …………………………………………………………… 231 

C.1.3 输出和可视化 …………………………………………………………… 232 

C.2 Omniperf …………………………………………………………………………… 233 

C.2.1 使用 Omniperf 分析程序性能 …………………………………………… 233 

C.2.2 使用 CLI 进行分析 ……………………………………………………… 234 

C.2.3 使用基于 Web 的 GUI 进行分析 ………………………………………… 236 

C.2.4 使用 Grafana 进行分析 …………………………………………………… 236 

C.3 总结 ………………………………………………………………………………… 238

参考文献……………………………………………………………………………