本书旨在综述并行编程,展示了专业人士和学生都可以使用的一种编程思维,以此来指导并行编程和优化应用程序,从而使性能得到显著提升。 [3] 本书作者DavidB.Kirk和Wen-meiW.Hwu所采用的简洁、直观、实用的方法基于他们多年的并行计算课程实践。
并行模式:包括多章并行模式内容,是并行编程应用中使用的很多并行算法的基础。
CUDAFortran:新增的这一章介绍CUDAFortran编程如何使用CUDA架构,其中讲解了几个CUDAFortran编程的实用示例。
OpenACC:新增的这一章介绍一个开放的并行编程预编译指令,以实现并行编程简洁化的目的。
Thrust:Thrust库是CUDAC/C++的抽象层函数库。新增的这一章介绍了如何通过使用Thrust并行编程模板,对源程序只做简单的修改就可以使程序实现高性能。
C++AMP:简单介绍了C++AMP,它是由微软提出来的Windows环境下一套简化大规模并行处理器的编程接口。
NVIDIA的Kepler架构:探讨NVIDIA的高性能、低功耗的GPU架构的编程特性。
第1章 引言
1.1 异构并行计算
1.2 现代GPU的体系结构
1.3 为什么需要更高的速度和并行化
1.4 应用程序的加速
1.5 并行编程语言和模型
1.6 本书的总体目标
1.7 本书的组织结构
参考文献
第2章 GPU计算的发展历程
2.1 图形流水线的发展
2.1.1 固定功能的图形流水线时代
2.1.2 可编程实时图形流水线的发展
2.1.3 图形与计算结合的处理器
2.2 GPGPU:一个中间步骤
2.3 GPU计算
2.3.1 可扩展的GPU
2.3.2 发展近况
2.3.3 未来发展趋势
参考文献与课外阅读
第3章 CUDA简介
3.1 数据并行性
3.2 CUDA的程序结构
3.3 向量加法kernel函数
3.4 设备全局存储器与数据传输
3.5 kernel函数与线程
3.6 小结
3.6.1 函数声明
3.6.2 启动kernel函数
3.6.3 预定义变量
3.6.4 运行时API
3.7 习题
参考文献
第4章 数据并行执行模型
4.1 CUDA的线程组织
4.2 线程与多维数据的映射
4.3 矩阵乘法——一个更加复杂的kernel函数
4.4 线程同步和透明的可扩展性
4.5 线程块的资源分配
4.6 查询设备属性
4.7 线程调度和容许时延
4.8 小结
4.9 习题
第5章 CUDA存储器
5.1 存储器访问效率的重要性
5.2 CUDA设备存储器的类型
5.3 减少全局存储器流量的一种策略
5.4 分块矩阵乘法的kernel函数
5.5 存储器——限制并行性的一个因素
5.6 小结
5.7 习题
第6章 性能优化
6.1 WARP和线程执行
6.2 全局存储器的带宽
6.3 执行资源的动态划分
6.4 指令混合和线程粒度
6.5 小结
6.6 习题
参考文献
第7章 浮点运算
7.1 浮点格式
7.1.1 M的规范化表示
7.1.2 E的余码表示
7.2 能表示的数
7.3 特殊的位模式与IEEE格式中的精度
7.4 算术运算的准确度和舍入
7.5 算法的优化
7.6 数值稳定性
7.7 小结
7.8 习题
参考文献
第8章 并行模式:卷积
8.1 背景
8.2 一个基本算法:一维并行卷积
8.3 常数存储器和高速缓存
8.4 使用光环元素的分块一维卷积
8.5 一个更简单的分块一维卷积——通用高速缓存
8.6 小结
8.7 习题
第9章 并行模式:前缀和
9.1 背景
9.2 简单并行扫描
9.3 考虑工作效率
9.4 工作高效的并行扫描
9.5 任意输入长度的并行扫描
9.6 小结
9.7 习题
参考文献
……
第10章 并行模式:稀疏矩阵—向量乘法
第11章 应用案例研究:高级MRI重构
第12章 应用案例研究:分子可视化和分析
第13章 并行编程和计算思想
第14章 OpenCL简介
第15章 OpenACC并行编程
第16章 Thrust:一个面向效率的CUDA编程库
第17章 CUDA FORTRAN
第18章 C++ AMP简介
第19章 异构集群编程
第20章 CUDA动态并行
第21章 结论与展望
附录A 矩阵乘法主机版的源代码
附录B GPU的计算能力