GPU高性能编程CUDA实战(详述CUDA开发的方方面面,快速编写高性能CUDA软件)
基本信息
- 原书名: CUDA by Example:an Introduction to General-Purpose GPU Programming
- 原出版社: Addison-Wesley Professional
- 作者: (美)Jason Sanders Edward Kandrot [作译者介绍]
- 译者: 聂雪军
- 出版社:机械工业出版社
- ISBN:9787111326793
- 上架时间:2011-2-28
- 出版日期:2011 年1月
- 开本:16开
- 页码:201
- 版次:1-1
- 所属分类:
计算机 > 计算机组织与体系结构 > 微处理器/CPU
编辑推荐
CUDA高级工程师Jason Sanders、Edward Kandrot联袂打造
发挥GPU的强大计算功能,快速编写高性能CUDA软件
内容简介回到顶部↑
作译者回到顶部↑
本书提供作译者介绍
作者:(美国)桑德斯(Jason Sanders) (美国)Edward Kandrot 译者:聂雪军 等
桑德斯(Jason Sanders),是NVIDIA公司CUDA平台小组的高级软件工程师。他在NVIDIA的工作包括帮助开发早期的CUDA系统软件,并参与OpenCL 1.0规范的制定,该规范是一个用于异构计算的行业标准。Jason在加州大学伯克利分校获得计算机科学硕士学位,他发表了关于GPU计算的研究论文。此外,他还获得了普林斯顿大学电子工程专业学士学位。在加入NVIDIA公司之前,他曾在ATI技术公司、Apple公司以及Novell公司工.. << 查看详细
目录回到顶部↑
译者序
序
前言
致谢
作者简介
第1章 为什么需要cuda
1.1 本章目标
1.2 并行处理的历史
1.3 gpu计算的崛起
1.4 cuda
1.5 cuda的应用
1.6 本章小结
第2章 入门
2.1 本章目标
2.2 开发环境
2.3 本章小结
第3章 cudac简介
3.1 本章目标
3.2 第一个程序
3.3 查询设备
序
前言
致谢
作者简介
第1章 为什么需要cuda
1.1 本章目标
1.2 并行处理的历史
1.3 gpu计算的崛起
1.4 cuda
1.5 cuda的应用
1.6 本章小结
第2章 入门
2.1 本章目标
2.2 开发环境
2.3 本章小结
第3章 cudac简介
3.1 本章目标
3.2 第一个程序
3.3 查询设备
译者序回到顶部↑
并行计算已成为突破摩尔定理局限性的重要研究方向,而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年于武汉
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年于武汉
前言回到顶部↑
本书介绍了如何利用计算机中图形处理器(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编程领域欢迎你的到来!
在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编程领域欢迎你的到来!
序言回到顶部↑
主流芯片制造厂商(例如NVIDIA)最近一系列的动作已经表明了,未来的微处理器系统和大型高性能计算系统都将是异构的。在这些异构系统中将同时使用两种不同的技术,二者在不同系统中所占的比例是不同的。
?多核CPU技术:CPU核的数量将不断增长,因为人们希望将越来越多的部件封装到芯片上,同时又要避免功耗墙、指令集并行性墙、内存墙等。专用硬件和大规模并行加速器:例如,近年来NVIDIA公司推出的GPU在浮点运算上的性能已经超过了标准CPU的性能。而且,GPU编程也正变得和多核CPU编程一样简单。
在未来的设计中,这两种技术在系统中所占的比例并不是固定的,并且随着时间的推移很可能发生变化。显然,在未来的计算机系统中,无论是笔记本电脑还是超级计算机,都将包含各种异构的部件。事实上,这种系统的浮点计算能力已经达到了P级(即每秒钟执行1015次浮点运算)。但是,在采用混合处理器的新计算环境中,开发人员面临的问题和挑战仍然很艰难。软件基础架构中的关键部分要赶上这种变革的步伐也同样很困难。在一些情况中,软件的性能无法随着处理器核数量的增加而增加,因为越来越多的时间消耗在数据移动而不是计算上。在其他情况中,软件通常是在硬件出现数年后才发布性能调优后的版本,因此在发布时就已经过时了。还有一些情况,例如在最新的GPU上,软件根本无法运行,因为编程环境已经发生了太大的变化。本书解决了软件开发中面临的核心问题,它介绍了近年来在编写大规模并行加速器中最具创新性和功能最强大的解决方案之一。本书介绍了如何使用CUDA C来编写程序,不仅给出了详细的示例,而且还介绍了程序的设计流程以及NVIDIA GPU的高效使用方式。本书介绍了并行计算的一些基本概念,包括简单的示例和调试方法(涵盖逻辑调试和性能调试),此外还介绍了一些高级主题以及在编译和使用应用程序时需要注意的问题,并通过编程示例来进一步强化这些概念。
如果读者需要开发基于加速器的计算系统,那么本书是首选。本书深入分析了并行计算,并为其中的多种问题提供了解决方案。本书对于应用程序开发人员、数值计算库开发人员,以及学习并行计算的学生和教师来说尤为有用。我很高兴从本书中学到了不少东西,并且我相信你也会有同样的体会。
—Jack Dongarra田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员
?多核CPU技术:CPU核的数量将不断增长,因为人们希望将越来越多的部件封装到芯片上,同时又要避免功耗墙、指令集并行性墙、内存墙等。专用硬件和大规模并行加速器:例如,近年来NVIDIA公司推出的GPU在浮点运算上的性能已经超过了标准CPU的性能。而且,GPU编程也正变得和多核CPU编程一样简单。
在未来的设计中,这两种技术在系统中所占的比例并不是固定的,并且随着时间的推移很可能发生变化。显然,在未来的计算机系统中,无论是笔记本电脑还是超级计算机,都将包含各种异构的部件。事实上,这种系统的浮点计算能力已经达到了P级(即每秒钟执行1015次浮点运算)。但是,在采用混合处理器的新计算环境中,开发人员面临的问题和挑战仍然很艰难。软件基础架构中的关键部分要赶上这种变革的步伐也同样很困难。在一些情况中,软件的性能无法随着处理器核数量的增加而增加,因为越来越多的时间消耗在数据移动而不是计算上。在其他情况中,软件通常是在硬件出现数年后才发布性能调优后的版本,因此在发布时就已经过时了。还有一些情况,例如在最新的GPU上,软件根本无法运行,因为编程环境已经发生了太大的变化。本书解决了软件开发中面临的核心问题,它介绍了近年来在编写大规模并行加速器中最具创新性和功能最强大的解决方案之一。本书介绍了如何使用CUDA C来编写程序,不仅给出了详细的示例,而且还介绍了程序的设计流程以及NVIDIA GPU的高效使用方式。本书介绍了并行计算的一些基本概念,包括简单的示例和调试方法(涵盖逻辑调试和性能调试),此外还介绍了一些高级主题以及在编译和使用应用程序时需要注意的问题,并通过编程示例来进一步强化这些概念。
如果读者需要开发基于加速器的计算系统,那么本书是首选。本书深入分析了并行计算,并为其中的多种问题提供了解决方案。本书对于应用程序开发人员、数值计算库开发人员,以及学习并行计算的学生和教师来说尤为有用。我很高兴从本书中学到了不少东西,并且我相信你也会有同样的体会。
—Jack Dongarra田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员
媒体评论回到顶部↑
对于开发基于GPU加速的并行计算系统的读者来说,《GPU高性能编程CUDA实战》绝对值得一读。
——Jack Dongarra,田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员
——Jack Dongarra,田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员
【插图】







点击看大图



加载中...
