首页>参考读物>计算机科学与技术>综合

GPU高性能编程CUDA实战
作者 : (美)Jason Sanders;Edward Kandrot 著
译者 : 聂雪军 等译
出版日期 : 2011-01-07
ISBN : 978-7-111-32679-3
定价 : 39.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 211
开本 : 16
原书名 : Cuda By Example: An Introduction To General-Purpose Gpu Programming
原出版社: Pearson Education Asia
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

CUDA是用来促进并行程序开发的一种计算架构。它与各种广泛的软件平台一起使用,使得程序员在构建高性能的应用程序的时候,可以借助图形处理单元(GPU)的强大力量。尽管GPU在图形和游戏编程领域应用多年,现在,CUDA使得开发其他领域的应用程序的程序员,也能够使用GPU的宝贵资源。本书由CUDA软件平台团队的两位高级成员撰写,介绍程序员如何利用这一新的技术。作者介绍了CUDA的各个方面,及其高级功能,还介绍了如何使用CUDA C扩展,以及如何编写真正表现出优秀性能的CUDA软件。

图书特色

GPU高性能编程
CUDA实战
CUDA By Example
an Introduction to General-Purpose
GPU Programming
(美) Jason Sanders
Edward Kandrot 著

“对于开发基于GPU加速的并行计算系统的读者来说,本书绝对值得一读。”
—— Jack Dongarra
田纳西大学杰出教授
美国橡树岭国家实验室杰出研究人员

CUDA是一种专门为提高并行程序开发效率而设计的计算架构。在构建高性能应用程序时,与综合性软件平台相结合,CUDA架构能充分发挥GPU的强大计算功能。很长时间以来,GPU一直用于图形和游戏应用程序中。但是现在,使用CUDA可将GPU用于科学计算、工程以及金融等其他应用领域。由于在CUDA中使用的编程语言只是一种对标准C语言进行简单扩展的语言,所以开发人员不需要具备任何计算机图形学的背景知识就可以掌握。
本书由CUDA软件平台小组的两位高级工程师撰写,向广大程序员介绍了如何使用这项新技术。作者通过多个示例详细介绍了CUDA开发中的方方面面。本书首先简要介绍了CUDA平台和架构,并快速介绍了CUDA C,随后详细介绍了CUDA每个功能中的关键技术与权衡因素。通过学习这些内容,你可以很清楚地了解CUDA C中每个功能的适用场合,并编写出高性能的CUDA软件。

本书主要内容:
并行编程                         原子操作
线程协作                         流
常量内存与事件                   多GPU上的CUDA C
纹理内存                         高级原子操作
图形互操作                       其他CUDA资源

所需的CUDA软件工具均可以从NVIDIA公司的网站免费下载。

作者简介
Jason Sanders 是NVIDIA公司CUDA平台小组的高级软件工程师,他参与了CUDA系统软件早期版本的开发,并参与了OpenCL 1.0规范的制定,该规范是一个定义异构计算的行业标准。他曾经在ATI 技术公司、Apple公司以及Novell公司工作过。
Edward Kandrot 是NVIDIA公司CUDA平台小组的高级软件工程师。他在代码性能优化方面拥有20多年的工作经验,他曾经在Adobe公司、Microsoft公司以及Autodesk公司等工作过。

图书前言

本书介绍了如何利用计算机中图形处理器(Graphics Process Unit, GPU)的强大计算功能来编写各种高性能的应用软件。虽然GPU的设计初衷是用于在显示器上渲染计算机图形(现在仍然主要用于这个目的),但在科学计算、工程、金融以及其他领域中,人们开始越来越多地使用GPU。我们将解决非图形领域中的问题的GPU程序统称为通用GPU程序。值得高兴的是,虽然你需要具备C或者C++的知识才能充分理解本书的内容,但却不需要具备计算机图形学的知识。任何图形学的基础都不要!GPU编程只是使你进一步增强现有的编程技术。
  在NVIDIA GPU上编写程序来完成通用计算任务之前,你需要知道什么是CUDA。NVIDIA GPU是基于CUDA架构而构建的。你可以将CUDA架构视为NVIDIA构建GPU的模式,其中GPU既可以完成传统的图形渲染任务,又可以完成通用计算任务。要在CUDA GPU上编程,我们需要使用CUDA C语言。在本书前面的内容中可以看到,CUDA C本质上是对C进行了一些扩展,使其能够在像NVIDIA GPU这样的大规模并行机器上进行编程。
  我们为经验丰富的C或者C++程序员编写了本书,这些程序员通常较为熟悉C语言,因此能很轻松地阅读或者编写C代码。本书不仅将进一步增强你的C语言编程能力,而且还能作为使用NVIDIA的CUDA C编程语言的一本快速入门书籍。你既不需要具备任何在大规模软件架构上工作的经验,也不需要有编写过C编译器或者操作系统内核的经历,此外也无需了解ANSI C标准的细枝末节。本书并没有花时间来回顾C语言的语法或者常用的C库函数,例如malloc()或者memcpy(),我们假设你对这些概念已经非常熟悉了。
  虽然本书的目的并不是介绍通用的并行编程技术,但你在书中仍将学习到一些通用的并行编模式。此外,本书并不是一本详细介绍CUDA API的参考书,也不会详细介绍在开发CUDA C软件时可以使用的各种工具。因此,我们强烈建议将本书与NVIDIA的免费文档结合起来阅读,例如《NVIDIA CUDA Programming Guide》和《NVIDIA CUDA Best Practices Guide》等。然而,你不用费工夫去收集所有这些文档,因为我们将介绍你需要的所有内容。
  不会费太多的周折,CUDA C编程领域欢迎你的到来!

上架指导

计算机\程序设计

封底文字

“对于开发基于GPU加速的并行计算系统的读者来说,本书绝对值得一读。”
——Jack Dongarra
田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员

CUDA是一种专门为提高并行程序开发效率而设计的计算架构。在构建高性能应用程序时,与综合性软件平台相结合,CUDA架构能充分发挥GPU的强大计算功能。很长时间以来,GPU一直用于图形和游戏应用程序。但是现在,使用CUDA可将GPU用于科学计算、工程以及金融等其他应用领域。由于在CUDA中使用的编程语言只是一种对标准C语言进行简单扩展的语言,所以开发人员不需要具备任何计算机图形学的背景知识就可以掌握。

本书由CUDA软件平台小组的两位高级工程师撰写,向广大程序员介绍了如何使用这项新技术。作者通过多个示例详细介绍了CUDA开发中的方方面面。本书首先简要介绍了CUDA平台和架构,并快速介绍了CUDA C,随后详细介绍了CUDA每个功能中的关键技术与权衡因素。通过学习这些内容,你可以很清楚地了解CUDA C中每个功能的适用场合,并编写出高性能的CUDA软件。
本书主要内容:
并行编程          原子操作
线程协作          流
常量内存与事件          多GPU上的CUDA C
纹理内存          高级原子操作
图形互操作          其他CUDA资源

所需的CUDA软件工具均可以从NVIDIA公司的网站免费下载。

作者简介

(美)Jason Sanders;Edward Kandrot 著:Jason Sanders是NVIDIA公司CUDA平台小组的高级软件工程师,他参与了CUDA系统软件早期版本的开发,并参与了OpenCL 1.0规范的制定,该规范是一个定义异构计算的行业标准。他曾经在ATI 技术公司、Apple公司以及Novell公司工作过。 Edward Kandrot是NVIDIA公司 CUDA 算法小组的高级软件工程师。他在代码性能优化方面拥有20多年的工作经验,他曾经在Adobe公司、Microsoft公司以及Autodesk公司等工作过。

译者简介

聂雪军 等译:暂无简介

译者序

并行计算已成为突破摩尔定理局限性的重要研究方向,而GPU强大的并行计算能力也因此吸引了全球广泛的研究兴趣。然而,在实现通用并行计算时,GPU计算模式存在着一些限制。首先,GPU的设计初衷是为了加速应用程序中的图形绘制运算,因此开发人员需要通过OpenGL或者DirectX等API来访问GPU,这不仅要求开发人员掌握一定的图形编程知识,而且要想方设法将通用计算问题转换为图形计算问题。其次,GPU与多核CPU在计算架构上有着很大不同,GPU更注重于数据并行计算,即在不同的数据上并行执行相同的计算,而对并行计算中的互斥性、同步性以及原子性等方面支持不足。这些因素都限制了GPU在通用并行计算中的应用范围。
  CUDA架构的出现解决了上述问题。CUDA架构专门为GPU计算设计了一种全新的结构,目的正是为了减轻GPU计算模型中的这些限制。在CUDA架构下,开发人员可以通过CUDA C对GPU编程。CUDA C是对标准C的一种简单扩展,学习和使用起来都非常容易,并且其最大的优势在于不需要开发人员具备图形学知识。
  本书的主要内容是介绍如何通过CUDA C来编写在GPU上运行的并行程序。本书首先介绍了CUDA架构的应用背景,并给出了如何配置CUDA C的开发环境。然后,本书通过矢量求和运算、矢量点积运算、光线跟踪、热传导模拟、直方图统计等示例详细介绍了CUDA C的基本语法和使用模式。在这些示例中还穿插介绍了GPU的各种硬件特性及适用环境,例如常量内存、事件、纹理内存、图形互操作性、原子操作、流以及多GPU架构等。
  这些示例的构思以及分析过程都很容易理解,它们也是本书最具价值的部分。读者在阅读这些内容时要反复思考,做到融会贯通,举一反三。只要掌握了这些简单的示例,更复杂的问题也能迎刃而解。本书适合所有程序员阅读,只需具备基本的C语言知识即可。最后,本书还给出了CUDA C的其他一些参考资源。
  参与本书翻译工作的主要有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯等。由于译者的时间和水平有限,翻译中的疏漏和错误在所难免,还望读者和同行不吝指正。

聂雪军  
2010年于武汉

图书目录

译者序

前言
致谢
作者简介
第1章  为什么需要CUDA 1
1.1  本章目标 2
1.2  并行处理的历史 2
1.3  GPU计算的崛起 3
1.4  CUDA 5
1.5  CUDA的应用 6
1.6  本章小结 8
第2章  入门 9
2.1  本章目标 10
2.2  开发环境 10
2.3  本章小结 14
第3章  CUDA C简介 15
3.1  本章目标 16
3.2  第一个程序 16
3.3  查询设备 20
3.4  设备属性的使用 23
3.5  本章小结 24
第4章  CUDA C并行编程 26
4.1  本章目标 27
4.2  CUDA并行编程 27
4.3  本章小结 41
第5章  线程协作 42
5.1  本章目标 43
5.2  并行线程块的分解 43
5.3  共享内存和同步 54
5.4  本章小结 68
第6章  常量内存与事件 69
6.1  本章目标 70
6.2  常量内存 70
6.3  使用事件来测量性能 78
6.4  本章小结 83
第7章  纹理内存 84
7.1  本章目标 85
7.2  纹理内存简介 85
7.3  热传导模拟 86
7.4  本章小结 101
第8章  图形互操作性 102
8.1  本章目标 103
8.2  图形互操作 103
8.3  基于图形互操作性的GPU波纹示例 108
8.4  基于图形互操作性的热传导 113
8.5  DirectX互操作性 118
8.6  本章小结 118
第9章  原子性 119
9.1  本章目标 120
9.2  计算功能集 120
9.3  原子操作简介 122
9.4  计算直方图 124
9.5  本章小结 133
第10章  流 134
10.1  本章目标 135
10.2  页锁定主机内存 135
10.3  CUDA流 139
10.4  使用单个CUDA流 140
10.5  使用多个CUDA流 144
10.6  GPU的工作调度机制 149
10.7  高效地使用多个CUDA流 151
10.8  本章小结 152
第11章  多GPU系统上的CUDA C 154
11.1  本章目标 155
11.2  零拷贝主机内存 155
11.3  使用多个GPU 162
11.4  可移动的固定内存 166
11.5  本章小结 170
第12章  后记 171
12.1  本章目标 172
12.2  CUDA工具 172
12.3  参考资料 176
12.4  代码资源 178
12.5  本章小结 179
附录  高级原子操作 180

教学资源推荐
作者: [法]吕克·若兰(Luc Jaulin) 著
作者: 凌云 吴海燕 谢满德 编著
作者: Ian Sommerville