第1章 引言 1
1.1 GPU与并行计算机 2
1.2 现代GPU的体系结构 7
1.3 为什么需要更高的速度和并行化 8
1.4 并行编程语言与模型 11
1.5 综合目标 12
1.6 本书的组织结构 13
第2章 GPU计算的发展历程 17
2.1 图形流水线的发展 18
2.1.1 固定功能的图形流水线时代 18
2.1.2 可编程实时图形流水线的发展 21
2.1.3 图形与计算结合的处理器 23
2.1.4 GPU:一个中间步骤 25
2.2 GPU计算 26
2.2.1 可扩展的GPU 27
2.2.2 发展近况 27
2.3 未来发展趋势 28
第3章 CUDA简介 31
3.1 数据并行性 32
3.2 CUDA的程序结构 33
3.3 矩阵乘法示例 34
3.4 设备存储器与数据传输 37
3.5 kernel函数与线程 41
3.6 小结 45
3.6.1 函数声明 45
3.6.2 启动kernel函数 46
3.6.3 预定义变量 46
3.6.4 运行时API 46
第4章 CUDA线程 49
4.1 CUDA线程组织结构 50
4.2 使用blockIdx和threadIdx 54
4.3 同步与透明可扩展性 58
4.4 线程分配 59
4.5 线程调度和容许延时 60
4.6 小结 62
4.7 习题 63
第5章 CUDA存储器模型 65
5.1 存储器访问效率的重要性 66
5.2 CUDA设备存储器的类型 67
5.3 减少全局存储器流量的策略 70
5.4 存储器——限制并行性的一个因素 76
5.5 小结 77
5.6 习题 78
第6章 性能优化 79
6.1 更多关于线程执行的问题 80
6.2 全局存储器的带宽 86
6.3 SM资源的动态划分 93
6.4 数据预取 95
6.5 指令混合 97
6.6 线程粒度 98
6.7 可度量的性能和小结 99
6.8 习题 100
第7章 浮点运算 105
7.1 浮点格式 106
7.1.1 M的规范化表示 106
7.1.2 E的余码表示 107
7.2 能表示的数 109
7.3 特殊的位模式与精度 113
7.4 算术运算的准确度和舍入 114
7.5 算法的优化 114
7.6 小结 115
7.7 习题 116
第8章 应用案例研究:高级MRI重构 117
8.1 应用背景 118
8.2 迭代重构 120
8.3 计算FHd 123
8.4 最终评估 139
8.5 习题 142
第9章 应用案例研究:分子可视化和分析 143
9.1 应用背景 144
9.2 kernel函数简单的实现方案 145
9.3 指令执行效率 149
9.4 存储器合并 151
9.5 附加性能比较 154
9.6 采用多GPU 156
9.7 习题 157
第10章 并行编程和计算思想 159
10.1 并行编程的目标 160
10.2 问题分解 161
10.3 算法选择 163
10.4 计算思想 168
10.5 习题 169
第11章 OpenCL简介 171
11.1 背景 172
11.2 数据并行性模型 173
11.3 设备的体系结构 175
11.4 kernel函数 176
11.5 设备管理和启动kernel 177
11.6 OpenCL中的静电势图谱 179
11.7 小结 183
11.8 习题 184
第12章 结论与展望 185
12.1 重申目标 186
12.2 存储器体系结构的演变 187
12.2.1 大型虚拟和物理地址空间 187
12.2.2 统一的设备存储空间 188
12.2.3 可配置的缓存和暂时存储器 188
12.2.4 提高原子操作的速度 189
12.2.5 提高全局存储器的访问速度 189
12.3 kernel函数执行控制过程的演变 190
12.3.1 kernel函数内部的函数调用 190
12.3.2 kernel函数中的异常处理 190
12.3.3 多个kernel函数的同步执行 191
12.3.4 可中断的kernel函数 191
12.4 内核的性能 191
12.4.1 精度的速度 191
12.4.2 提高控制流的效率 192
12.5 编程环境 192
12.6 美好前景 193
附录A 矩阵乘法主机版的源代码 195
附录B GPU的计算能力 207