封面
版权信息
版权声明
内容提要
作者简介
审稿人简介
前言
读者对象
本书内容
阅读本书的前提
配套资源解压工具
体例格式
第1章 为什么要学习GPU编程
1.1 技术要求
1.2 并行化与阿姆达尔定律
1.2.1 使用阿姆达尔定律
1.2.2 Mandelbrot集
1.3 对代码进行性能分析
使用cProfile模块
1.4 小结
1.5 习题
第2章 搭建GPU编程环境
2.1 技术要求
2.2 确保拥有合适的硬件
2.2.1 检查硬件(Linux系统)
2.2.2 检查硬件(Windows系统)
2.3 安装GPU驱动程序
2.3.1 安装GPU驱动程序(Linux系统)
2.3.2 安装GPU驱动程序(Windows系统)
2.4 搭建C++编程环境
2.4.1 设置GCC、Eclipse IDE和图形处理库(Linux系统)
2.4.2 设置Visual Studio(Windows系统)
2.4.3 安装CUDA Toolkit
2.5 为GPU编程设置Python环境
2.5.1 安装PyCUDA(Linux系统)
2.5.2 创建环境启动脚本(Windows系统)
2.5.3 安装PyCUDA(Windows系统)
2.5.4 测试PyCUDA
2.6 小结
2.7 习题
第3章 PyCUDA入门
3.1 技术要求
3.2 查询GPU
使用PyCUDA查询GPU
3.3 使用PyCUDA的gpuarray类
3.3.1 使用gpuarray在GPU之间传输数据
3.3.2 使用gpuarray进行基本的逐元素算术运算
3.4 使用PyCUDA的ElementwiseKernel执行逐元素运算
3.4.1 重温Mandelbrot集
3.4.2 函数式编程简介
3.4.3 并行化的扫描内核函数和规约内核函数简介
3.5 小结
3.6 习题
第4章 内核函数、线程、线程块与网格
4.1 技术要求
4.2 内核函数
PyCUDA SourceModule函数
4.3 线程、线程块与网格
康威生命游戏
4.4 线程同步与线程通信
4.4.1 使用设备函数__syncthreads
4.4.2 使用共享内存
4.5 并行前缀算法
4.5.1 朴素并行前缀算法
4.5.2 包含型并行前缀算法与独占型并行前缀算法
4.5.3 工作高效型并行前缀算法
4.5.4 工作高效型并行前缀算法的实现
4.6 小结
4.7 习题
第5章 流、事件、上下文与并发性
5.1 技术要求
5.2 CUDA设备同步
5.2.1 使用PyCUDA流类
5.2.2 通过CUDA流实现并发版本的LIFE
5.3 事件
事件与CUDA流
5.4 上下文
5.4.1 同步当前上下文
5.4.2 手动创建上下文
5.4.3 主机端多进程与多线程技术
5.4.4 实现主机端并发的多上下文
5.5 小结
5.6 习题
第6章 CUDA代码的调试与性能分析
6.1 技术要求
6.2 在CUDA内核函数中使用printf函数
利用printf函数调试代码
6.3 CUDA C编程简介
6.4 利用Nsight IDE开发和调试CUDA C代码
6.4.1 在Windows平台上的Visual Studio中使用Nsight
6.4.2 在Linux平台中使用Nsight和Eclipse
6.4.3 借助Nsight理解CUDA的线程束锁步特性
6.5 使用NVIDIA性能分析工具——nvprof与Visual Profiler
6.6 小结
6.7 习题
第7章 通过Scikit-CUDA模块使用CUDA库
7.1 技术要求
7.2 安装Scikit-CUDA
7.3 利用cuBLAS库处理基本线性代数运算
7.3.1 利用cuBLAS库处理第1级AXPY运算
7.3.2 其他第1级cuBLAS函数
7.3.3 利用cuBLAS库处理第2级GEMV运算
7.3.4 利用cuBLAS中的第3级GEMM操作测量GPU性能
7.4 利用cuFFT库进行快速傅里叶变换
7.4.1 一维快速傅里叶变换示例
7.4.2 使用FFT进行卷积操作
7.4.3 利用cuFFT进行二维卷积
7.5 通过Scikit-CUDA使用cuSolver
7.5.1 奇异值分解
7.5.2 奇异值分解在主成分分析中的应用
7.6 小结
7.7 习题
第8章 CUDA设备函数库与Thrust库
8.1 技术要求
8.2 cuRAND设备函数库
用蒙特卡罗方法估计圆周率
8.3 CUDA Math API
8.3.1 定积分概述
8.3.2 用蒙特卡罗方法计算定积分
8.3.3 编写测试用例
8.4 CUDA Thrust库
在Thrust中使用仿函数
8.5 小结
8.6 习题
第9章 实现深度神经网络
9.1 技术要求
9.2 人工神经元与神经网络
实现一个密集层
9.3 softmax层的实现
9.4 交叉熵损失函数的实现
9.5 序贯网络的实现
9.5.1 推理方法的实现
9.5.2 梯度下降法
9.5.3 数据的规范化和归一化
9.6 Iris数据集
9.7 小结
9.8 习题
第10章 应用编译好的GPU代码
10.1 通过Ctypes模块启动编译好的代码
重温Mandelbrot集
10.2 编译并运行纯PTX代码
10.3 为CUDA Driver API编写包装器
使用CUDA Driver API
10.4 小结
10.5 习题
第11章 CUDA性能优化
11.1 动态并行性
基于动态并行性的快速排序算法
11.2 向量化数据类型与内存访问
11.3 线程安全的原子操作
11.4 线程束洗牌
11.5 内联PTX汇编
11.6 经过优化的数组求和函数
11.7 小结
11.8 习题
第12章 未来展望
12.1 深入了解CUDA和GPGPU编程技术
12.1.1 多GPU系统
12.1.2 集群计算和消息传递接口
12.1.3 OpenCL和PyOpenCLCUDA
12.2 图形领域
12.2.1 OpenGL
12.2.2 DirectX 12
12.2.3 Vulkan
12.3 机器学习与计算机视觉
12.3.1 基础知识
12.3.2 cuDNN
12.3.3 Tensorflow与Keras
12.3.4 Chainer
12.3.5 OpenCV
12.4 区块链技术
12.5 小结
12.6 习题
习题提示
第1章 为什么要学习GPU编程
第2章 搭建GPU编程环境
第3章 PyCUDA入门
第4章 内核函数、线程、线程块与网格
第5章 流、事件、上下文与并发性
第6章 CUDA代码的调试与性能分析
第7章 通过Scikit-CUDA模块使用CUDA库
第8章 CUDA设备函数库与Thrust库
第9章 实现深度神经网络
第10章 应用编译好的GPU代码
第11章 CUDA性能优化
第12章 未来展望
更新时间:2022-12-20 18:31:35