×
暂无评论
图文详情
  • ISBN:9787302564607
  • 装帧:70g胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:196
  • 出版时间:2020-10-01
  • 条形码:9787302564607 ; 978-7-302-56460-7

本书特色

本书是一本理想的学习 CUDA 编程的入门书籍,理论与实操结合,难易适中。 本书用大量简单的代码展示 CUDA 编程的基础 ;用一个具体的例子——分子动力学模拟程序开发——展示如何一步一步地开发大型的、高效的 CUDA 程序。

内容简介

CUDA 是目前较为流行的GPU 高性能计算的开发工具之一。本书通过大量实例系统地讲述CUDA 编程的重要方面。前12 章通过一些简短的例子循序渐进地介绍CUDA 编程的基础知识,主要包括GPU 硬件与CUDA 程序开发工具(第1 章)、CUDA 中的线程组织(第2 章)、CUDA 程序的基本框架与错误检测(第3、4 章)、获得GPU 加速的关键(第5 章)、CUDA中的内存组织与各种内存的合理使用(第6~8 章)、原子函数的合理使用(第9 章)、线程束内的基本函数(第10 章)、CUDA 流(第11 章)、统一内存(第12 章)等。后面两章是可选读的内容:第13 章综合运用前述章节中的知识,用CUDA 开发一个简单的分子动力学模拟程序;第14 章介绍若干CUDA 库(包括Thrust、cuBLAS、cuSolver 和cuRAND)的使用。 本书适合高等院校理工科专业的本科生和研究生及其他任何对CUDA 编程感兴趣的人士阅读。

目录

目 录 第1章 GPU硬件与CUDA程序开发工具 1 1.1 GPU 硬件简介 1 1.2 CUDA 程序开发工具 4 1.3 CUDA 开发环境搭建示例 6 1.4 用nvidia-smi检查与设置设备 7 1.5 其他学习资料 8 第2章 CUDA中的线程组织 10 2.1 C++语言中的HelloWorld程序 10 2.2 CUDA中的HelloWorld程序 11 2.2.1 只有主机函数的CUDA程序 11 2.2.2 使用核函数的CUDA程序 12 2.3 CUDA 中的线程组织 14 2.3.1 使用多个线程的核函数 14 2.3.2 使用线程索引 15 2.3.3 推广至多维网格 17 2.3.4 网格与线程块大小的限制 21 2.4 CUDA 中的头文件 21 2.5 用nvcc编译CUDA程序 22 第3章 简单CUDA程序的基本框架 25 3.1 例子:数组相加 25 3.2 CUDA 程序的基本框架 27 3.2.1 隐形的设备初始化 29 3.2.2 设备内存的分配与释放 29 3.2.3 主机与设备之间数据的传递 31 3.2.4 核函数中数据与线程的对应 32 3.2.5 核函数的要求 33 3.2.6 核函数中if语句的必要性 34 3.3 自定义设备函数 35 3.3.1 函数执行空间标识符 35 3.3.2 例子:为数组相加的核函数定义一个设备函数 36 第4章 CUDA程序的错误检测 38 4.1 一个检测CUDA运行时错误的宏函数 38 4.1.1 检查运行时API函数 40 4.1.2 检查核函数 42 4.2 用CUDA-MEMCHECK检查内存错误 44 第5章 获得GPU加速的关键 46 5.1 用CUDA事件计时 46 5.1.1 为C++程序计时 47 5.1.2 为CUDA程序计时 48 5.2 几个影响GPU加速的关键因素 50 5.2.1 数据传输的比例 50 5.2.2 算术强度 51 5.2.3 并行规模 54 5.2.4 总结 55 5.3 CUDA 中的数学函数库 55 第6章 CUDA的内存组织 57 6.1 CUDA 的内存组织简介 57 6.2 CUDA 中不同类型的内存 58 6.2.1 全局内存 58 6.2.2 常量内存 61 6.2.3 纹理内存和表面内存 62 6.2.4 寄存器 62 6.2.5 局部内存 63 6.2.6 共享内存 63 6.2.7 L1和L2缓存 64 6.3 SM 及其占有率 65 6.3.1 SM 的构成 65 6.3.2 SM 的占有率 65 6.4 用CUDA运行时API函数查询设备 67 第7 章 全局内存的合理使用 70 7.1 全局内存的合并与非合并访问 70 7.2 例子:矩阵转置 73 7.2.1 矩阵复制 73 7.2.2 使用全局内存进行矩阵转置 75 第8 章 共享内存的合理使用 78 8.1 例子:数组归约计算 78 8.1.1 仅使用全局内存 79 8.1.2 使用共享内存 82 8.1.3 使用动态共享内存 84 8.2 使用共享内存进行矩阵转置 85 8.3 避免共享内存的bank冲突 86 第9 章 原子函数的合理使用 90 9.1 完全在GPU中进行归约 90 9.2 原子函数 93 9.3 例子:邻居列表的建立 95 9.3.1 C++ 版本的开发 96 9.3.2 利用原子操作的CUDA版本 98 9.3.3 不用原子操作的CUDA版本 101 第10章 线程束基本函数与协作组 104 10.1 单指令-多线程执行模式 104 10.2 线程束内的线程同步函数 106 10.3 更多线程束内的基本函数 109 10.3.1 介绍 109 10.3.2 利用线程束洗牌函数进行归约计算 114 10.4 协作组 116 10.4.1 线程块级别的协作组 116 10.4.2 利用协作组进行归约计算 118 10.5 数组归约程序的进一步优化 119 10.5.1 提高线程利用率 119 10.5.2 避免反复分配与释放设备内存 122 第11章 CUDA流 124 11.1 CUDA 流概述 124 11.2 在默认流中重叠主机和设备计算 125 11.3 用非默认CUDA流重叠多个核函数的执行 128 11.3.1 核函数执行配置中的流参数 128 11.3.2 重叠多个核函数的例子 129 11.4 用非默认CUDA流重叠核函数的执行与数据传递 131 11.4.1 不可分页主机内存与异步的数据传输函数 131 11.4.2 重叠核函数执行与数据传输的例子 133 第12章 使用统一内存编程 136 12.1 统一内存简介 136 12.1.1 统一内存的基本概念 136 12.1.2 使用统一内存对硬件的要求 137 12.1.3 统一内存编程的优势 137 12.2 统一内存的基本使用方法 137 12.2.1 动态统一内存 138 12.2.2 静态统一内存 139 12.3 使用统一内存申请超量的内存 140 12.3.1 **个测试 140 12.3.2 第二个测试 142 12.3.3 第三个测试 143 12.4 优化使用统一内存的程序 144 第13章 分子动力学模拟的CUDA程序开发 147 13.1 分子动力学模拟的基本算法和C++实现 147 13.1.1 程序的整体结构 147 13.1.2 分子动力学模拟的基本流程 148 13.1.3 初始条件 149 13.1.4 边界条件 150 13.1.5 相互作用 152 13.1.6 运动方程的数值积分 156 13.1.7 程序中使用的单位制 157 13.1.8 程序的编译与运行 158 13.1.9 能量守恒的测试 159 13.1.10 C++ 版本程序运行速度的测试 160 13.2 CUDA 版本的分子动力学模拟程序开发 161 13.2.1 仅加速求力和能量的部分 161 13.2.2 加速全部计算 165 第14章 CUDA标准库的使用 167 14.1 CUDA 标准库简介 167 14.2 Thrust 库 168 14.2.1 简介 168 14.2.2 数据结构 168 14.2.3 算法 168 14.2.4 例子:前缀和 169 14.3 cuBLAS 库 171 14.3.1 简介 171 14.3.2 例子:矩阵乘法 172 14.4 cuSolver 库 176 14.4.1 简介 176 14.4.2 例子:矩阵本征值 177 14.5 cuRAND 库 181 14.5.1 简介 181 14.5.2 例子 182
展开全部

作者简介

樊哲勇,1983 年生,2010 年在南京大学物理系获理学博士学位,2010-2012 年在厦门大学物理系做博士后,2012-2014年在芬兰 Aalto 大学做博士后,2014-2016 在渤海大学任副教授,2016 年至今在芬兰 Aalto 大学做博士后。拥有 8 年 CUDA 编程经验,用 CUDA 开发了高效的分子动力学模拟程序 GPUMD 和量子输运程序 GPUQT,在计算物理的一流期刊《Computer Physics Communications》发表9篇原创论文。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航