内容简介
第1章 从串行编程到并行编程
1.1 简单的数据并行循环
1.1.1 OpenACC内核构件与并行构件对比
1.1.2 OpenACC并行的多种形式
1.1.3 accFill_ex2运行时结果
1.2 简单的任务并行示例
1.3 Amdahl定律及其扩展
1.3.1 大O表示法和数据传输
1.3.2 accTask.cpp代码的扩展性
1.4 并行执行和竞争条件
1.5 无锁编程
1.6 控制并行资源
1.7 让生活更简单
1.8 参考文献
第2章 性能导向开发
2.1 测试代码:共轭梯度法
2.1.1 代码编译
2.1.2 初始测试
2.2 描述并行度
2.2.1 加速waxpby
2.2.2 加速dot
2.2.3 加速matvec
2.3 描述数据移动
2.4 优化循环
2.4.1 缩短向量长度
2.4.2 增加并行度
2.5 在多核系统中并行运行
2.6 小结
第3章 使用Score-P和Vampir分析混合应用性能
3.1 性能分析技术和术语
3.2 逐步性能提升
3.3 激光驱动电子束的粒子单元模拟
3.4 通过代码插装准备性能测量
3.5 在应用程序执行期间记录性能信息
3.6 第一个并行PIConGPU实现
3.7 释放主机进程
3.8 优化GPU内核
3.9 增加GPU任务并行
3.10 使用Score-P和Vampir记录OpenACC运行时事件
3.11 小结
3.12 参考文献
第4章 数据传输流水线化
4.1 初识流水线
4.2 示例代码:曼德勃罗发生器
4.2.1 分块计算
4.2.2 分块数据拷贝
4.2.3 异步执行
4.3 在多种设备上实现流水线
4.4 结论
第5章 高级数据管理
5.1 非结构化数据区域
5.2 动态数据成员的聚合类型
5.3 C++类数据管理
5.3.1 创建通用列表容器类
5.3.2 accList更新方法
5.4 在例程中使用全局和模块变量
5.5 仅在设备端可用的数据
5.5.1 映射设备端数据
5.5.2 MPI进程间共享设备端数据
5.6 示例代码
5.7 运行时结果
5.8 小结
第6章 循环执行调优
6.1 loop构件
6.2 基本loop优化子句
6.2.1 auto子句
6.2.2 independent子句
6.2.3 seq子句
6.2.4 reduction子句
6.2.5 collapse子句
6.3 高级loop优化子句
6.3.1 gang、worker和vector子句
6.3.2 tile子句
6.4 性能测试结果
6.5 小结
第7章 多设备编程
7.1 简介
7.2 三种多设备编程方法
7.2.1 处理设备相关性和选择设备
7.2.2 单线程多设备编程
7.2.3 多线程多设备编程
7.2.4 多进程多设备编程
7.3 示例:2D泊松方程的雅可比求解器
7.4 域分解
7.4.1 单线程多设备编程
7.4.2 多线程多设备编程
7.4.3 多进程多设备编程
7.4.4 通信与计算重叠
7.5 调试和分析
7.5.1 使用cuda-memcheck和cuda-gdb调试
7.5.2 使用nvprof和NVIDIA Visual Profiler分析
7.6 小结
7.7 参考文献
第8章 Stencil和Feldkamp算法移植
8.1 简介
8.2 实验环境
8.2.1 Feldkamp-Davis-Kress算法
8.2.2 2D热方程
8.3 OpenMP/OpenACC混合编程
8.4 小结
8.5 参考文献
第9章 加速3D波方程
9.1 简介
9.2 示例代码:计算3D标量波方程
9.3 栈变成堆
9.4 测量主机基准扩展性
9.4.1 创建OpenMP编译环境
9.4.2 编译OpenMP代码
9.4.3 运行OpenMP代码
9.5 使用OpenACC工具
9.5.1 添加OpenACC并行指令
9.5.2 编译OpenACC并行指令
9.5.3 理解统一内存
9.5.4 使用统一内存
9.5.5 运行统一内存
9.5.6 使用可视化分析器分析统一内存
9.6 使用OpenACC数据指令
9.6.1 编译OpenACC数据指令
9.6.2 分析OpenACC数据指令
9.6.3 运行OpenACC数据指令
9.7 OpenACC多核系统
9.7.1 编译OpenACC多核
9.7.2 在多核系统上运行OpenACC
9.8 小结
9.9 参考文献
第10章 应用程序开发详解
10.1 CloverLeaf简介
10.1.1 流体力学方案
10.1.2 测试用例
10.2 开发平台:Cray XK6
10.3 开发OpenACC版本CloverLeaf
10.3.1 热点
10.3.2 独立内核加速
10.3.3 多个内核加速
10.3.4 GPU上实现完全驻留
10.3.5 增加问题规模
10.3.6 与混合MPI/OpenMP比较
10.3.7 混合MPI/OpenACC
10.3.8 版本A:初始性能
10.3.9 版本B:内循环依赖
10.3.10 版本C:嵌套循环和全局变量
10.3.11 版本D:多GPU,减少隐式传输
10.3.12 版本E:OpenACC同步等待
10.3.13 GPU优化对CPU的影响
10.3.14 多GPU扩展
10.4 结论
10.4.1 CPU上的OpenACC实现
10.4.2 异构计算
10.5 小结
10.6 扩展信息
第11章 GPU加速分子动力学聚类分析
11.1 简介
11.2 MD聚类分析概述
11.2.1 聚类算法
11.2.2 QCP快速计算成对RMSD
11.2.3 原子选择和轨迹数据结构
11.2.4 不相似矩阵计算
11.3 硬件架构注意事项
11.4 实现
11.4.1 性能评估测试用例
11.4.2 存储器布局优化
11.4.3 QCP内积循环
11.4.4 手写向量化QCP内积循环
11.4.5 代码适配和使用OpenACC指令
11.5 性能测试结果
11.6 小结
11.7 致谢
11.8 参考文献
第12章 增量式加速RI-MP2电子结构理论的相关方法
12.1 简介
12.2 原理
12.3 实现
12.3.1 GPU-1
12.3.2 GPU-2
12.3.3 GPU-3
12.3.4 GPU-4
12.3.5 GPU-5
12.3.6 GPU-6
12.3.7 GPU-7
12.3.8 GPU-8
12.4 结果
12.4.1 计算细节
12.4.2 问题规模扩展
12.4.3 设备数量扩展
12.4.4 总性能
12.5 小结
12.6 致谢
12.7 参考文献
第13章 将大型传统气候和天气建模代码移植到GPU上
13.1 简介
13.2 移植方法:步骤详解
13.2.1 简化大气模型
13.2.2 步骤1:添加并行区域
13.2.3 步骤2:管理数据传输
13.2.4 步骤3:基本优化
13.2.5 并行循环包含子例程调用
13.2.6 CUDA接口
13.3 性能优化
13.4 辐射参数化的结果
13.5 参考文献