《OpenACC并行程序设计 性能优化实践指南》PDF下载

  • 购买积分:10 如何计算积分?
  • 作  者:(美)罗布·法伯(RobFarber)编著;吴长江,阚光远译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111576754
  • 页数:246 页
图书介绍:本书由高性能技术专家Rob Farber领衔编著,24位来自世界各地的业界翘楚分享了他们的一线经验。你不仅能够从中学到OpenACC的基础知识和编程技巧,还能够通过多领域的应用案例快速掌握实战方法。其中涉及PGI和Cray等编译器的使用,以及在多核CPU和GPU等设备上的运行和性能分析。此外,本书网站上还提供了大量实用代码,涵盖科学、商业、大数据和实时系统等热门领域。

第1章 从串行编程到并行编程 1

1.1 简单的数据并行循环 1

1.1.1 OpenACC内核构件与并行构件对比 4

1.1.2 OpenACC并行的多种形式 6

1.1.3 accFill_ex2运行时结果 7

1.2 简单的任务并行示例 8

1.3 Amdahl定律及其扩展 9

1.3.1 大O表示法和数据传输 11

1.3.2 accTask.cpp代码的扩展性 12

1.4 并行执行和竞争条件 14

1.5 无锁编程 17

1.6 控制并行资源 20

1.7 让生活更简单 22

1.8 参考文献 23

第2章 性能导向开发 24

2.1 测试代码:共轭梯度法 25

2.1.1 代码编译 25

2.1.2 初始测试 26

2.2 描述并行度 28

2.2.1 加速waxpby 28

2.2.2 加速dot 31

2.2.3 加速matvec 32

2.3 描述数据移动 34

2.4 优化循环 39

2.4.1 缩短向量长度 40

2.4.2 增加并行度 41

2.5 在多核系统中并行运行 43

2.6 小结 44

第3章 使用Score-P和Vampir分析混合应用性能 46

3.1 性能分析技术和术语 47

3.2 逐步性能提升 48

3.3 激光驱动电子束的粒子单元模拟 48

3.4 通过代码插装准备性能测量 49

3.5 在应用程序执行期间记录性能信息 50

3.6 第一个并行PIConGPU实现 51

3.7 释放主机进程 53

3.8 优化GPU内核 53

3.9 增加GPU任务并行 54

3.10 使用Score-P和Vampir记录OpenACC运行时事件 55

3.11 小结 56

3.12 参考文献 56

第4章 数据传输流水线化 58

4.1 初识流水线 59

4.2 示例代码:曼德勃罗发生器 59

4.2.1 分块计算 62

4.2.2 分块数据拷贝 63

4.2.3 异步执行 63

4.3 在多种设备上实现流水线 65

4.4 结论 69

第5章 高级数据管理 70

5.1 非结构化数据区域 71

5.2 动态数据成员的聚合类型 73

5.3 C++类数据管理 75

5.3.1 创建通用列表容器类 77

5.3.2 accList更新方法 79

5.4 在例程中使用全局和模块变量 80

5.5 仅在设备端可用的数据 82

5.5.1 映射设备端数据 83

5.5.2 MPI进程间共享设备端数据 84

5.6 示例代码 86

5.7 运行时结果 91

5.8 小结 93

第6章 循环执行调优 94

6.1 loop构件 95

6.2 基本loop优化子句 97

6.2.1 auto子句 97

6.2.2 independent子句 98

6.2.3 seq子句 98

6.2.4 reduction子句 99

6.2.5 collapse子句 101

6.3 高级loop优化子句 102

6.3.1 gang、worker和vector子句 102

6.3.2 tile子句 102

6.4 性能测试结果 104

6.5 小结 105

第7章 多设备编程 106

7.1 简介 106

7.2 三种多设备编程方法 107

7.2.1 处理设备相关性和选择设备 107

7.2.2 单线程多设备编程 108

7.2.3 多线程多设备编程 108

7.2.4 多进程多设备编程 109

7.3 示例:2D泊松方程的雅可比求解器 109

7.4 域分解 111

7.4.1 单线程多设备编程 111

7.4.2 多线程多设备编程 114

7.4.3 多进程多设备编程 116

7.4.4 通信与计算重叠 120

7.5 调试和分析 122

7.5.1 使用cuda-memcheck和cuda-gdb调试 122

7.5.2 使用nvprof和NVIDIA Visual Profiler分析 123

7.6 小结 123

7.7 参考文献 124

第8章 Stencil和Feldkamp算法移植 125

8.1 简介 125

8.2 实验环境 126

8.2.1 Feldkamp-Davis-Kress算法 126

8.2.2 2D热方程 133

8.3 OpenMP/OpenACC混合编程 138

8.4 小结 141

8.5 参考文献 142

第9章 加速3D波方程 143

9.1 简介 143

9.2 示例代码:计算3D标量波方程 144

9.3 栈变成堆 146

9.4 测量主机基准扩展性 148

9.4.1 创建OpenMP编译环境 148

9.4.2 编译OpenMP代码 149

9.4.3 运行OpenMP代码 150

9.5 使用OpenACC工具 150

9.5.1 添加OpenACC并行指令 150

9.5.2 编译OpenACC并行指令 151

9.5.3 理解统一内存 151

9.5.4 使用统一内存 152

9.5.5 运行统一内存 152

9.5.6 使用可视化分析器分析统一内存 153

9.6 使用OpenACC数据指令 155

9.6.1 编译OpenACC数据指令 156

9.6.2 分析OpenACC数据指令 156

9.6.3 运行OpenACC数据指令 158

9.7 OpenACC多核系统 158

9.7.1 编译OpenACC多核 159

9.7.2 在多核系统上运行OpenACC 160

9.8 小结 160

9.9 参考文献 161

第10章 应用程序开发详解 162

10.1 CloverLeaf简介 162

10.1.1 流体力学方案 162

10.1.2 测试用例 163

10.2 开发平台:Cray XK6 163

10.3 开发OpenACC版本CloverLeaf 164

10.3.1 热点 164

10.3.2 独立内核加速 165

10.3.3 多个内核加速 166

10.3.4 GPU上实现完全驻留 167

10.3.5 增加问题规模 167

10.3.6 与混合MPI/OpenMP比较 169

10.3.7 混合MPI/OpenACC 169

10.3.8 版本A:初始性能 169

10.3.9 版本B:内循环依赖 170

10.3.10 版本C:嵌套循环和全局变量 173

10.3.11 版本D:多GPU,减少隐式传输 174

10.3.12 版本E:OpenACC同步等待 175

10.3.13 GPU优化对CPU的影响 178

10.3.14 多GPU扩展 179

10.4 结论 180

10.4.1 CPU上的OpenACC实现 180

10.4.2 异构计算 182

10.5 小结 183

10.6 扩展信息 184

第11章 GPU加速分子动力学聚类分析 185

11.1 简介 185

11.2 MD聚类分析概述 186

11.2.1 聚类算法 187

11.2.2 QCP快速计算成对RMSD 188

11.2.3 原子选择和轨迹数据结构 189

11.2.4 不相似矩阵计算 190

11.3 硬件架构注意事项 191

11.4 实现 192

11.4.1 性能评估测试用例 192

11.4.2 存储器布局优化 192

11.4.3 QCP内积循环 192

11.4.4 手写向量化QCP内积循环 194

11.4.5 代码适配和使用OpenACC指令 196

11.5 性能测试结果 200

11.6 小结 202

11.7 致谢 203

11.8 参考文献 203

第12章 增量式加速RI-MP2电子结构理论的相关方法 206

12.1 简介 206

12.2 原理 208

12.3 实现 209

12.3.1 GPU-1 209

12.3.2 GPU-2 210

12.3.3 GPU-3 211

12.3.4 GPU-4 212

12.3.5 GPU-5 213

12.3.6 GPU-6 214

12.3.7 GPU-7 215

12.3.8 GPU-8 216

12.4 结果 217

12.4.1 计算细节 217

12.4.2 问题规模扩展 218

12.4.3 设备数量扩展 219

12.4.4 总性能 220

12.5 小结 222

12.6 致谢 223

12.7 参考文献 223

第13章 将大型传统气候和天气建模代码移植到GPU上 226

13.1 简介 226

13.2 移植方法:步骤详解 228

13.2.1 简化大气模型 228

13.2.2 步骤1:添加并行区域 229

13.2.3 步骤2:管理数据传输 231

13.2.4 步骤3:基本优化 233

13.2.5 并行循环包含子例程调用 235

13.2.6 CUDA接口 237

13.3 性能优化 239

13.4 辐射参数化的结果 241

13.5 参考文献 243