第1章 绪论 1
1.1 高性能计算应用需求和意义 1
1.2 混合架构超算发展趋势 2
1.3 如何进行异构混合架构上的程序设计 2
1.4 本书的内容和安排 3
第2章 异构混合架构概述 5
2.1 国际国内超算现状 5
2.1.1 超算发展历程 6
2.1.2 超算发展现状 8
2.1.3 我国超算发展现状 12
2.2 典型的混合架构计算机 13
2.2.1 CPU+GPU架构:以Frontier、Summit、Aurora为代表 13
2.2.2 ARM架构:日本富岳 16
2.2.3 CPU+DCU:曙光超算 17
2.2.4 神威主从核架构:新一代神威超算 18
2.2.5 新一代天河超算 19
2.3 混合架构程序设计语言与框架概述 22
2.3.1 OpenMP 22
2.3.2 MPI 23
2.3.3 CUDA/HIP 24
2.3.4 OpenACC 25
2.3.5 Athread 26
2.3.6 OpenCL 27
2.3.7 oneAPI 28
习题 29
参考文献 30
第3章 异构混合架构性能分析理论 31
3.1 并行程序的时间开销 31
3.2 相对性能 31
3.3 绝对性能 36
3.4 性能瓶颈 37
3.4.1 计算密度 37
3.4.2 访存密集与计算密集 38
3.4.3 roofline性能模型 38
3.4.4 roofline分析示例:SpMV 39
习题 41
参考文献 42
第4章 CPU高性能程序设计 43
4.1 内存模型与OpenMP、MPI并行编程方法 43
4.2 OpenMP并行编程简介 44
4.2.1 OpenMP的Hello World 45
4.2.2 编译制导指令 47
4.2.3 运行时库函数 49
4.2.4 环境变量 49
4.2.5 OpenMP offload 49
4.3 MPI并行编程简介 50
4.3.1 MPI基本函数 50
4.3.2 MPI通信模式 55
4.4 SIMD向量化 60
4.4.1 CPU向量化指令集发展 60
4.4.2 向量化编程实践 61
4.5 性能分析工具 65
4.5.1 perf工具 65
4.5.2 gprof工具 69
4.5.3 IPM工具 70
4.5.4 Score-P工具 73
习题 76
第5章 神威异构众核程序设计 77
5.1 神威超算及编程环境概述 77
5.1.1 神威超算的背景及历史 77
5.1.2 神威?太湖之光超算架构 78
5.1.3 新一代神威超算架构 80
5.1.4 神威编程环境 81
5.1.5 访存层次 84
5.2 神威众核编程 85
5.2.1 众核程序结构 85
5.2.2 从核函数 86
5.2.3 第一个并行程序 87
5.2.4 示例:stencil计算优化 92
5.3 神威SIMD 96
5.3.1 SIMD简介 96
5.3.2 SIMD示例 100
习题 101
第6章 面向DCU架构的程序设计与优化 102
6.1 曙光超算及编程环境概述 102
6.1.1 曙光超算简介 102
6.1.2 曙光超算节点架构 102
6.1.3 ROCm/DTK编程环境 111
6.2 HIP编程方法 112
6.2.1 HIP与CUDA 112
6.2.2 曙光DCU编程模型 113
6.2.3 HIP编程 114
6.3 利用LDS进行数据共享 127
6.3.1 LDS概念 127
6.3.2 LDS使用实例 129
6.4 线程间通信 134
6.4.1 Block级线程通信 134
6.4.2 wavefront级线程通信 135
6.5 reduce优化 138
习题 148
第7章 异构混合架构上的算法设计 149
7.1 DCU上的前缀和 149
7.1.1 Prefix Sum简介 149
7.1.2 并行难点 150
7.1.3 wavefront Scan算法 152
7.1.4 Block Scan算法 154
7.1.5 全局Scan算法 155
7.1.6 更高效的Scan算法 157
7.2 通用矩阵乘 157
7.2.1 GEMM简介 157
7.2.2 并行难点 158
7.2.3 面向DCU的GEMM优化 158
7.2.4 BENCHMARK 163
7.3 DCU上的稀疏矩阵向量乘 164
7.3.1 概述 164
7.3.2 稀疏矩阵CSR存储格式 164
7.3.3 并行难点 164
7.3.4 高效SpMV算法实现 166
习题 170
第8章 异构混合架构常用算法库 172
8.1 算法库介绍 172
8.1.1 常见算法库层次 172
8.1.2 国内外典型超算上的算法库 172
8.2 稠密矩阵计算库:rocBLAS、cuBLAS、swBLAS 173
8.2.1 BLAS接口介绍 173
8.2.2 rocBLAS 177
8.2.3 cuBLAS 181
8.3 稀疏矩阵计算库:rocSPARSE、cuSPARSE、swSPARSE 182
8.3.1 常用的稀疏矩阵的存储格式 182
8.3.2 rocSPARSE 185
8.3.3 cuSPARSE 190
8.3.4 swSPARSE 192
8.4 LAPACK线性代数计算库:特征值、LU 195
8.4.1 LAPACK介绍 195
8.4.2 rocSOLVER 196
8.4.3 cuSOLVER 199
8.5 线性方程组求解 201
8.5.1 常用的求解算法 201
8.5.2 PETSc的层次架构 202
习题 209
第9章 异构混合架构上并行应用程序开发示例 210
9.1 MISA-MD分子动力学模拟程序异构优化 210
9.1.1 分子动力学模拟概述 210
9.1.2 面向DCU的MD优化的挑战性及优化思路 211
9.1.3 主机-设备间通信及其优化 211
9.1.4 并行计算策略 214
9.1.5 其他访存优化技术 215
9.2 SUMMER-CD 216
9.2.1 软件介绍 216
9.2.2 物理模型 216
9.2.3 三层并行模型 218
9.2.4 自适应异构数据传输 221
9.2.5 基于Stream的计算通信重叠 223
9.3 有限体积法求解圣维南方程组在神威?太湖之光上的优化 223
9.3.1 物理模型简介 223
9.3.2 使用Athread线程库加速 224
9.3.3 SIMD 226
9.3.4 双缓冲机制 226
9.3.5 优化效果 229