《高性能CUDA应用设计与开发 方法与最佳实践》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:RobFarber著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2013
  • ISBN:9787111404460
  • 页数:273 页
图书介绍:本书共分12章。第1~2章介绍了CUDA的基本概念、构建、调试CUDA应用所需要的工具,以及完整的机器学习与优化的通用框架。第3章介绍了高新能编程的性能分析技术——CUDA性能分析工具,以及两种数据挖掘技术。第4章主要介绍了CUDA执行模型。第5~6章讨论了CUDA提供的多种GPU内存优缺点,以及如何使应用高效利用内存的技术。第7章通过示例和对应的性能分析输出结果介绍了多GPU、异步核函数执行以及统一虚拟地址空间等GPU并行方式的应用。第8章讨论了多种CUDA后端设备,并给出可有效在异构多GPU环境中运行的示例以及响应的性能分析输出结果。第9章讨论CUDA如何显著地加速可视化与游戏应用。第10章介绍如何使用MPI提升应用的可伸缩性以及性能。第11章介绍了应用于不同技术的CUDA开源代码项目,其中包括支持向量机、多维尺度分析等。第12章介绍了基于第9章的框架,给出的一个用于视频识别的实时视频流处理示例。

第1章 CUDA入门与编程思想 1

1.1 源代码与维基 1

1.2 一个用以区别CUDA与传统程序开发的示例 2

1.3 选择合适的CUDA API 5

1.4 CUDA的一些基本概念 7

1.5 理解首个Runtime Kernel 10

1.6 GPGPU编程的三条法则 11

1.6.1 法则1:将数据放入并始终存储于GPU 12

1.6.2 法则2:交给GPGPU足够多的任务 12

1.6.3 法则3:注重GPGPU上的数据重用,以避免带宽限制 12

1.7 大O记号的思想与数据传输 13

1.8 CUDA和Amdahl定律 15

1.9 数据并行与任务并行 15

1.10 混合执行:同时使用CPU和GPU资源 16

1.11 回归测试与正确性 18

1.12 静默错误 19

1.13 调试简介 20

1.14 UNIX调试方法 21

1.14.1 NVIDIA cuda-gdb调试器 21

1.14.2 CUDA内存检查器 23

1.14.3 通过UNIX ddd界面使用cuda-gdb 24

1.15 使用Parallel Nsight进行Windows调试 25

1.16 本章小结 27

第2章 CUDA在机器学习与优化中的应用 28

2.1 建模与模拟 28

2.1.1 拟合参数化模型 29

2.1.2 Nelder-Mead方法 30

2.1.3 Levenberg-Marquardt方法 30

2.1.4 算法加速 31

2.2 机器学习与神经网络 32

2.3 异或逻辑:一个重要的非线性机器学习问题 33

2.3.1 目标函数示例 35

2.3.2 针对多GPU设备、多CPU处理器的完整仿函数 35

2.3.3 完整Nelder-Mead优化代码的简要讨论 37

2.4 异或逻辑的性能结果 45

2.5 性能讨论 45

2.6 本章小结 48

2.7 C++NELDER-MEAD代码模板 48

第3章 CUDA工具套件:对PCA、NLPCA进行性能分析 53

3.1 PCA和NLPCA 53

3.1.1 自编码网络 55

3.1.2 用于PCA分析的仿函数示例 56

3.1.3 用于NLPCA分析的示例仿函数 58

3.2 获得基础性能分析数据 60

3.3 gprof:通用UNIX性能分析器 61

3.4 NVIDIA可视化性能分析器:computeprof 62

3.5 Microsoft Visual Studio中的Parallel Nsight 65

3.5.1 Nsight时间表分析 66

3.5.2 NVTX跟踪支持库 67

3.5.3 CUDA API的可扩展性表现 68

3.6 性能调节与分析实用工具(TAU) 70

3.7 本章小结 70

第4章 CUDA执行模型 72

4.1 GPU架构综述 72

4.1.1 线程调度:通过执行配置统筹性能与并行度 74

4.1.2 eomputeprof中Warp相关值 77

4.1.3 Warp分歧 77

4.1.4 关于Warp分歧的若干准则 78

4.1.5 computeprof中Warp分歧相关值 79

4.2 Warp调度与TLP 79

4.3 ILP:高性能低占用率 80

4.3.1 ILP隐藏算术计算延迟 81

4.3.2 ILP隐藏数据延迟 84

4.3.3 ILP的未来 84

4.3.4 computeprof中指令速率相关值 85

4.4 Little法则 86

4.5 检测限制因素的CUDA工具 87

4.5.1 nvcc编译器 88

4.5.2 启动约束 90

4.5.3 反汇编器 90

4.5.4 PTX Kernel函数 92

4.5.5 GPU模拟器 92

4.6 本章小结 93

第5章 CUDA存储器 94

5.1 CUDA存储器层次结构 94

5.2 GPU存储器 95

5.3 L2缓存 98

5.4 L1缓存 99

5.5 CUDA内存类型 100

5.5.1 寄存器 101

5.5.2 局域内存 101

5.5.3 和局域内存相关的computeprof性能分析参数 102

5.5.4 共享内存 102

5.5.5 和共享内存相关的computeprof性能分析参数 105

5.5.6 常量内存 105

5.5.7 纹理内存 106

5.5.8 和纹理内存相关的computeprof性能分析参数 108

5.6 全局内存 109

5.6.1 常见的整合内存示例 110

5.6.2 全局内存的申请 111

5.6.3 全局内存设计中的限制因素 113

5.6.4 和全局内存相关的computeprof性能分析参数 114

5.7 本章小结 115

第6章 高效使用CUDA存储器 116

6.1 归约 116

6.1.1 归约模板 117

6.1.2 functionReduce.h的测试程序 122

6.1.3 测试结果 126

6.2 使用非规则数据结构 127

6.3 稀疏矩阵和CUSP支持库 131

6.4 图论算法 132

6.5 SoA、AoS以及其他数据结构 134

6.6 分片和分块 135

6.7 本章小结 136

第7章 提高并行度的技巧 137

7.1 CUDA上下文环境对并行度的扩展 137

7.2 流与上下文环境 138

7.2.1 多GPU的使用 139

7.2.2 显式同步 139

7.2.3 隐式同步 141

7.2.4 统一虚拟地址空间 141

7.2.5 一个简单的示例 142

7.2.6 分析结果 144

7.3 使用多个流乱序执行 144

7.3.1 在同一GPU内并发执行Kernel函数的建议 147

7.3.2 隐式并行Kernel的原子操作 147

7.4 将数据捆绑计算 149

7.4.1 手动分割数据 150

7.4.2 映射内存 150

7.4.3 映射内存的工作机制 152

7.5 本章小结 153

第8章 CUDA在所有GPU与CPU程序中的应用 154

8.1 从CUDA到多种硬件后端的途径 155

8.1.1 PGI CUDA x86编译器 155

8.1.2 PGI CUDA x86编译器 157

8.1.3 将x86处理器核心用作流多处理器 159

8.1.4 NVIDIA NVCC编译器 160

8.1.5 Ocelot 160

8.1.6 Swan 161

8.1.7 MCUDA 162

8.2 从其他语言访问CUDA 162

8.2.1 SWIG 162

8.2.2 Copperhead 163

8.2.3 EXCEL 164

8.2.4 MATLAB 164

8.3 支持库 164

8.3.1 CUBLAS 164

8.3.2 CUFFT 165

8.3.3 MAGMA 174

8.3.4 phiGEMM支持库 175

8.3.5 CURAND 176

8.4 本章小结 177

第9章 CUDA与图形渲染混合编程 178

9.1 OpenGL 178

9.1.1 GLUT 179

9.1.2 通过OpenGL映射GPU内存 179

9.1.3 使用基元重启提升3D处理性能 181

9.2 框架内各文件的介绍 183

9.2.1 Kernel与perlin Kernel演示的示例代码 184

9.2.2 simpleGLmain.cpp文件 192

9.2.3 simpleVBO.cpp文件 196

9.2.4 callbacksVBO.cpp文件 199

9.3 本章小结 204

第10章 在云计算和集群环境中使用CUDA 205

10.1 消息传递接口 205

10.1.1 MPI编程模型 206

10.1.2 MPI通信器 206

10.1.3 MPI进程号 206

10.1.4 主从模式 208

10.1.5 点对点模式基础 208

10.2 MPI通信机制 209

10.3 带宽 211

10.4 平衡率 212

10.5 运行大型MPI程序需要考虑的因素 214

10.5.1 初始数据加载的可扩展性 214

10.5.2 使用MPI进行计算 215

10.5.3 可扩展性检查 216

10.6 云计算 217

10.7 代码示例 218

10.7.1 数据的产生 218

10.7.2 主体代码部分 220

10.8 本章小结 225

第11章 CUDA在现实问题中的应用 227

11.1 高维数据的处理 228

11.1.1 PCA/NLPCA 228

11.1.2 多维尺度分析 229

11.1.3 K均值聚类算法 229

11.1.4 期望最大化 229

11.1.5 支持向量机 230

11.1.6 Bayesian网络 230

11.1.7 互信息 231

11.2 力导向图 232

11.3 Monte Carlo方法 232

11.4 分子建模 233

11.5 量子化学 234

11.6 交互式工作流 234

11.7 其他众多的项目 235

11.8 本章小结 235

第12章 针对现场实况视频流的应用程序 236

12.1 机器视觉话题 236

12.1.1 3D效果 237

12.1.2 肤色区域分割 238

12.1.3 边缘检测 238

12.2 FFmpeg 239

12.3 TCP服务器 241

12.4 实况视频流应用程序 244

12.4.1 kernelWave():动画Kernel函数 244

12.4.2 kernelFlat():在平面渲染图像 245

12.4.3 kernelSkin():仅保留肤色区域 245

12.4.4 kernelSobel():Sobel边缘检测过滤器 246

12.4.5 launch_kernel()方法 247

12.5 simpleVBO.cpp文件 248

12.6 callbacksVBO.cpp文件 248

12.7 生成与执行代码 251

12.8 展望 251

12.8.1 机器学习 252

12.8.2 Connectome 252

12.9 本章小结 253

12.10 simpleVBO.cpp文件 253

参考文献 258

术语表 265