计算机
类型
可以朗读
语音朗读
206千字
字数
2022-06-01
发行日期
展开全部
主编推荐语
基于Python和CUDA介绍GPU编程,重点介绍如何通过GPU编程来实现高性能的并行计算。
内容简介
本书旨在引导读者基于Python和CUDA的GPU编程开发高性能的应用程序,先后介绍了为什么要学习GPU编程、搭建GPU编程环境、PyCUDA入门等内容,以及CUDA代码的调试与性能分析、通过Scikit-CUDA模块使用CUDA库、实现深度神经网络、CUDA性能优化等内容。
目录
- 版权信息
- 内容提要
- 作者简介
- 审稿人简介
- 前言
- 第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性能分析工具
- 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 习题
- 习题提示
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。