新書推薦:
《
剑桥意大利戏剧史(剑桥世界戏剧史译丛)
》
售價:NT$
740.0
《
教育何用:重估教育的价值
》
售價:NT$
299.0
《
理想城市:环境与诗性
》
售價:NT$
390.0
《
大模型推荐系统:算法原理、代码实战与案例分析
》
售價:NT$
445.0
《
逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
》
售價:NT$
625.0
《
工业互联网导论
》
售價:NT$
445.0
《
木偶的恨意(法国悬念大师米歇尔普西悬疑新作)
》
售價:NT$
295.0
《
孤独传:一种现代情感的历史
》
售價:NT$
390.0
編輯推薦:
CUDA是目前用于GPU编程的主流工具,而GPU是近几十年来最令人振奋的硬件发展成果之一。通过CUDA,你可以用台式计算机去完成原本需要大型计算机集群或高性能计算设施才能完成的工作。因此CUDA在整个科学、技术、工程和数学界的科学计算方面变得越来越重要,包括从医学物理学到金融建模,再到大数据应用等领域。 本书汇集了作者长期开发和使用计算机来获取和分析科学数据的丰富经验,内容翔实。同时,本书也是一本具有创新性的著作,相较于其他同类GPU计算相关的图书,本书提供了更为丰富的示例。作者非常注重紧凑、优雅和高效的C++编码风格,本书配套的示例代码库和支持材料都可以在线获取,读者可以基于这些去构建自己的项目。通过阅读本书,你将能够: 迅速掌握GPU与CUDA的基础及编程模型。 学习并行编程及背后的思想。 掌握CUDA程序的调试与性能分析技巧。 了解如何将CUDA应用于实战项目中。 提升解决并行计算问题的能力。
內容簡介:
本书是一本深入浅出的CUDA编程实践指南。由CUDA编程领域的资深专家撰写,主要介绍使用C++对NVIDIA GPU进行编程,覆盖了GPU内核与硬件、并行思维与编程、warp和协作组、并行模板、纹理、蒙特卡罗应用等内容,旨在帮助读者快速掌握CUDA编程的核心技能。书中详细介绍了CUDA的基本概念、架构和编程模型,并通过丰富的实战案例和详细解析,指导读者如何编写、优化和调试CUDA程序。本书注重理论与实践相结合,旨在培养读者解决实际问题的能力。无论读者是初学者还是有一定经验的开发者,都能从本书中获益。掌握CUDA编程技能将为读者的职业发展增添重要竞争力,助力读者在科学研究、工程开发、数据分析等领域中脱颖而出。
關於作者:
理查德·安索奇(Richard Ansorge)是剑桥大学卡文迪什实验室(Cavendish Laboratory)的荣誉大学高级讲师,也是剑桥大学菲茨威廉学院(Fitzwilliam College)的荣誉导师和研究员。他发表了170多篇经过同行评审的论文,并与他人合著了The Physics and Mathematics of MRI (2016)一书。
目錄 :
目 录 Contents
译者序
前言
第1章 GPU内核与硬件介绍1
1.1 背景1
1.2 第一个CUDA示例2
1.3 CPU架构9
1.4 CPU的计算能力10
1.5 CPU内存管理:利用缓存隐藏延迟11
1.6 CPU:并行指令集13
1.7 GPU架构13
1.7.1 回顾历史13
1.7.2 NVIDIA的GPU型号14
1.8 Pascal架构14
1.9 GPU内存类型16
1.10 warp和wave17
1.11 线程块与网格18
1.12 占用率19
第1章尾注20
第2章 并行思维与编程21
2.1 Flynn分类法21
2.2 内核函数调用语法28
2.3 启动三维内核函数29
2.4 延迟隐藏和占用率35
2.5 并行模式36
2.6 并行归约37
2.7 共享内存48
2.8 矩阵乘法51
2.9 分块矩阵乘法58
2.10 BLAS62
第2章尾注66
第3章 warp和协作组68
3.1 协作组中的CUDA对象71
3.2 分块分区75
3.3 向量加载81
3.4 warp级内部函数和子warp84
3.5 线程分歧和同步85
3.6 避免死锁87
3.7 协同组91
3.8 HPC特性97
第3章尾注98
第4章 并行模板100
4.1 二维模板100
4.2 二维模板的级联计算112
4.3 三维模板116
4.4 数字图像处理119
4.5 Sobel滤波器127
4.6 中值滤波器127
第4章尾注132
第5章 纹理133
5.1 图像插值134
5.2 GPU纹理135
5.3 图像旋转137
5.4 lerp函数138
5.5 纹理硬件141
5.6 彩色图像146
5.7 图像查看148
5.8 立体图像的仿射变换151
5.9 三维图像配准156
5.10 图像配准结果164
第5章尾注166
第6章 蒙特卡罗应用167
6.1 简介167
6.2 cuRAND库173
6.2.1 cuRAND的主机API173
6.2.2 cuRAND的设备API178
6.3 生成其他分布184
6.4 伊辛模型186
第6章尾注194
第7章 使用CUDA流和事件的
并发196
7.1 并发内核函数执行196
7.2 CUDA管道示例198
7.3 thrust与cudaDeviceReset202
7.4 管道示例的结果203
7.5 CUDA事件205
7.6 磁盘的开销212
7.7 CUDA图219
第7章尾注224
第8章 PET扫描仪的应用225
8.1 PET简介225
8.2 数据存储和扫描仪的几何结构
的定义227
8.3 模拟PET扫描仪233
8.4 建立系统矩阵244
8.5 PET重建246
8.6 结果250
8.7 OSEM的实现252
8.8 交互作用的深度254
8.9 使用交互作用的深度的PET
结果257
8.10 块探测器258
8.11 Richardson-Lucy图像去模糊268
第8章尾注273
第9章 扩展276
9.1 GPU的选型278
9.2 CUDA统一虚拟寻址281
9.3 CUDA的P2P访问282
9.4 CUDA零拷贝内存284
9.5 统一内存285
9.6 MPI的简要介绍295
第9章尾注305
第10章 性能分析和调试工具306
10.1 gpulog示例306
10.2 使用nvprof进行分析311
10.3 用NVIDIA Visual Profiler进行
分析314
10.4 Nsight Systems316
10.5 Nsight Compute319
10.6 Nsight Compute部分320
10.6.1 GPU光速320
10.6.2 计算工作负载分析321
10.6.3 内存工作负载分析322
10.6.4 调度器统计信息323
10.6.5 warp状态统计323
10.6.6 指令统计信息324
10.6.7 启动统计信息324
10.6.8 占用率326
10.6.9 源计数器327
10.7 使用printf进行调试328
10.8 通过Microsoft Visual Studio
进行调试330
10.9 调试内核函数代码332
10.10 内存检查334
10.10.1 cuda-memcheck334
10.10.2 Linux工具336
10.10.3 CUDA计算过滤器336
第10章尾注337
第11章 张量核心338
11.1 张量核心与FP16338
11.2 warp矩阵函数340
11.3 支持的数据类型345
11.4 张量核心的归约算法346
11.5 结论351
第11章尾注351
附录352
附录A CUDA简史352
附录B 原子操作361
附录C NVCC编译器366
附录D AVX与Intel编译器372
附录E 数字格式380
附录F CUDA文档和库384
附录G CX头文件387
附录H AI和Python410
附录I C++的主题413
內容試閱 :
前 言
本书主要是为需要强大计算能力的人编写的,包括那些需要这种能力对数据进行获取、处理、分析或建模的科研人员。对于需要处理更大数据集与更复杂图像数据的医疗数据人员,他们也会发现本书对其很有帮助。
在我的整个研究生涯中,我一直在面对复杂而苛刻的计算,首先是在高能物理学实验中,最近是在医学成像的各种应用中。GPU计算的出现是我所见过的最激动人心的发展之一,撰写本书的一个原因就是要与读者分享这种兴奋。
这似乎是摩尔定律的必然结果——对计算能力的需求增长总是超过当前可用的水平。自20世纪80年代初期PC时代开启以来,供应商一直在提供附加卡以提高渲染显示的速度。这些卡现在被称为图形处理单元(Graphic Processing Unit, GPU),在PC游戏行业需求的推动下,它们已经成为非常强大的计算引擎。2007年,NVIDIA推出的CUDA工具包彻底改变了游戏规则,该工具包可以用来编写出利用GPU强大性能的科学应用软件。我们的计算能力突然提高了100倍,不再遵循过去每18个月翻一倍的规律。从那时起,GPU性能也随着时间的推移继续呈指数级增长,超越了摩尔定律。因此,现在开始了解如何在GPU上进行编程,与在2007年一样有用。事实上,你现在想在世界级超级计算机上进行高性能计算(HPC),就必须了解如何使用GPU。
大约在2002年之前,PC计算能力的指数级增长主要依赖于时钟速度的提高。然而从那时候起,时钟速度稳定在3.5 GHz左右,但CPU芯片中的核心数量在稳步增加。因此,并行编程(使用同时运行的多个协作核心来分担单个任务的计算负载)对于从现代硬件中获益至关重要。GPU将并行编程提升到一个新的水平,允许数千甚至数百万个并行线程在计算中进行协作。
科学研究难度大并且竞争激烈,可用的计算能力往往是一个限制因素。将一个重要的计算加快200倍可能会改变游戏规则,将原本需要一周的运行时间缩短到1 h以内,那么一天之内就可以进行结果分析。将需要1 h的运行时间缩短到18 s,这样就可以探索复杂模型的参数空间。将几s的运行时间缩短到几ms,就可以对计算机模型进行交互式研究。本书对个人研究者和小团队应该特别有用,他们可以为自己的内部PC配备GPU,并获得这些性能上的好处。即使是可以轻松访问大型HPC设施的团队,也可以从在他们自己的台式机上使用非常快速的工具来探索其结果而受益。
当然,本书也适合任何有兴趣深入了解GPU和并行编程的读者。即使你已经对该主题有所了解,我们相信你也可以从研究我们的编码风格与选择的示例中受益。
具体而言,本书主要介绍使用C++对NVIDIA GPU进行编程。自2007年以来,NVIDIA已成为HPC领域的主导力量,最近还成为AI领域的主导力量,这不仅由于GPU的成本效益,还由于CUDA语言使用类似于C++的优雅特效。我知道一些科学编程仍然使用Fortran的各种版本(包括Fortran IV,这是我在20世纪80年代初期非常喜欢的一种语言), 但在我看来,C++更具表现力。Fortran的粉丝可能会指出使用指针优化C++代码存在技术问题,但这些问题随着在C11中引入restrict关键字,已在C++11中得到解决。现代C++编译器也支持这个关键字,并且在我们的许多示例中都使用它。
示例是本书区别于当前其他关于CUDA书籍的一个特点,我们的示例是从有趣的现实世界应用中精心制作的,包括物理和医学成像,而不是在其他地方找到的相当基础的常见问题。本书区别于其他书籍的另一个特点是,我们在编写代码的外观方面是非常用心的,在适当的地方使用现代的C++来减少冗余并保持简洁,我认为这真的很重要。根据我的经验,许多人会通过修改其他人的代码来学习计算机编程,尽管目前流通的大部分CUDA示例代码都有效,但谈不上优雅。这可能是因为在2007年推出CUDA时,是作为C的扩展而不是C++,最初的SDK示例大多以冗长的C风格编写。不幸的是,许多在线的CUDA教程和书籍中仍然是这种风格。事实上,CUDA一直支持一些C++,现在CUDA完全支持C++17(尽管有一些限制)。2019年11月,(NVIDIA C Programmers Guide)被更名为(NVIDIA C++ Programmers Guide),尽管指南的内容没有发生重大变化,但它标志着NVIDIA对代码的态度改变了,自2020年以来,一些更高级的C++用法开始出现在SDK示例中。
本书的目标不是从零开始教授C++,我们假设你具有一些C++的基本知识。然而附录I会讨论我们示例中使用的一些C++特性。现代C++实际上有点庞大,具有许多支持面向对象和其他高级编程风格的新特性。在本书中不使用这些特性,因为我们认为它们不适合实现在GPU上运行的算法代码,我们还是更喜欢模板函数而不是虚拟函数。
要充分利用本书,你需要使用配备支持CUDA的NVIDIA GPU的PC(许多PC都支持)。这些示例是在配备4核Intel CPU和NVIDIA RTX 2070 GPU(2019年价格为480英镑)的Windows 10 PC上开发的。Linux系统也可以,我们所有的示例都可以在不需要修改的情况下运行。无论你使用什么系统,都需要一个当前版本的(免费)NVIDIA CUDA Toolkit。在Windows上,你还需要Visual Studio C++(免费的社区版也可以)。在Linux上,gcc或g++都可以。
不幸的是,我们