基本信息

编辑推荐
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
CUDA高级工程师Jason Sanders、Edward Kandrot联袂打造
发挥GPU的强大计算功能,快速编写高性能CUDA软件
内容简介
计算机书籍
---------------------------CUDA C编程权威指南---------------------------
本书主要介绍了如何使用GPU和利用CUDAC语言对其进行编程的。首先从基本的CUDA概念及结构讲起,一步一步地引导读者进入CUDA的内部世界,由浅入深地介绍了其编程要求及其内部架构,使读者对其有了整体印象后,逐步深入了解其内部机能,后介绍了GPU的一些专用函数和注意事项。
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
UDA是一种专门为提高并行程序开发效率而设计的计算架构。在构建高性能应用程序时,CUDA架构能充分发挥GPU的强大计算功能。《GPU高性能编程CUDA实战》首先介绍了CUDA架构的应用背景,并给出了如何配置CUDA C的开发环境。然后通过矢量求和运算、矢量点积运算、光线跟踪、热传导模拟等示例详细介绍了CUDA C的基本语法和使用模式。通过学习本书,读者可以清楚了解CUDA C中每个功能的适用场合,并编写出高性能的CUDA软件。
《GPU高性能编程CUDA实战》适合具备C或者C++知识的应用程序开发人员、数值计算库开发人员等,也可以作为学习并行计算的学生和教师的教辅。
作译者
---------------------------CUDA C编程权威指南---------------------------
程润伟(John Cheng)是一位有着丰富行业经验的研究员,研究方向为异构计算平台上的高性能计算。在进入石油天然气行业之前,他曾在金融行业工作了十余年,以其计算智能领域的专长,基于遗传算法做出了与数据挖掘和统计研究相关的许多方案,为商业项目中的技术难题提供了很多高明而有效的解决办法。作为享誉国际的遗传算法与工业工程应用方面的权威研究人员,他已参与编写了三本书。《遗传算法与工程设计》是他的第一部作品,该书于1997年由John Wiley and Sons公司出版,现今仍是全球高校的教科书。无论是学术研究还是实业发展方面,他都有了不错的成就,他擅长将晦涩复杂的学术问题化繁为简,深入浅出地给读者以阐释和启发。他已获东京技术研究所的计算智能博士学位。
马克斯·格罗斯曼(Max Grossman)与GPU编程模型已经打了近十年交道。他的主要研究内容为开发新型GPU编程模型和用于在GPU硬件上实现的算法。他已将GPU应用于地球科学、等离子体物理、医学成像和机器学习等一系列领域,并致力于发现和研究新领域的计算模式,寻求以全新方式应用它们的可能性。这些宝贵的实践经验对于指导今后在编程模型和程序框架方面的工作大有裨益。马克斯获莱斯大学的计算机科学学士学位,主要研究并行计算。
泰·麦克切尔(Ty McKercher)是NVIDIA公司的首席方案架构师,他领导的团队专攻跨行业的视觉计算系统架构。他通常负责在新兴技术评估期间促进客户和产品工程团队之间的沟通交流。自从2006年参加了在NVIDIA公司总部举办的第一届CUDA训练课程后,他一直参与CUDA的相关项目。也是自那时起,他也在某些世界最大、任务最为繁重的产品数据中心工作,帮助构建基于GPU的超级计算环境。他已获科罗拉多矿业学院数学学士学位,主要研究方向为地球物理学和计算机科学。
技术审校者简介 About the Reviewers
张伟,是一位在高性能计算领域有着15年工作经验的科研程序员。他已独立研发或与人合作研发了许多科学软件包,服务于分子模拟、计算机辅助药物设计、EM的结构重建和地震深度成像开发等。目前,他正致力于研究如何采用诸如CUDA等新技术来提升地震数据的处理效率。
赵超,于2008年加入雪佛龙公司,目前是地球物理应用软件开发专家,负责为地球学家们设计和开发软件产品。他在加入雪佛龙之前是知识系统公司和地震微技术公司的软件开发员。他从事软件开发的研究和实业已超过13年,在地质学和地球物理学方面积累了丰富的经验。经过多年的学术研究,他十分乐于见到CUDA编程能真正广泛地应用到科研工作中,并愿为此尽其所能。赵超本科毕业于北京大学的化学专业,获罗得岛大学计算机科学专业的理学硕士学位。
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
作者:(美国)桑德斯(Jason Sanders) (美国)Edward Kandrot 译者:聂雪军 等
目录
---------------------------CUDA C编程权威指南---------------------------
译者序
推荐序
自序
作者简介
技术审校者简介
前言
致谢
第1章 基于CUDA的异构并行计算1
1.1 并行计算1
1.1.1 串行编程和并行编程2
1.1.2 并行性3
1.1.3 计算机架构4
1.2 异构计算6
1.2.1 异构架构7
译者序
---------------------------CUDA C编程权威指南---------------------------
CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来处理密集型及并行计算。CPU和GPU是两个独立的处理器,通过单个计算节点中的PCI-Express总线相连,GPU用来提高计算密集型应用程序中并行程序段的执行速度,CPU则负责管理设备端的资源。CUDA编程的独特优势在于开放的架构特性可以使程序员在功能强大的硬件平台上充分挖掘其并行性,既满足了计算密集型程序的需要,又实现了程序的易读性及便捷性。
对任何想要使用GPU来进行科研或技术编程的人来说,本书都将是一个珍贵的资源宝库,它全面介绍了CUDA编程接口及其用法,包含但不局限于CUDA编程模型、GPU执行模型、GPU内存模型、CUDA流和事件、多GPU编程的相关技术、CUDA库等内容。此外,本书列举了大量的范例来帮助读者入门,并提供了程序下载地址,供读者亲自运行体验。在基本掌握了本书的内容之后,你将发现CUDA C编程是一项十分简单、有趣且高效的工作。
本书第1章简要介绍了GPU和CPU构成的异构架构,对使用CUDA进行异构并行计算的原理进行了简要说明。第2章介绍了CUDA编程模型,从逻辑上解释了什么是CUDA大规模并行计算。第3章介绍了CUDA执行模型。第4章给出了CUDA内存模型,分析了全局内存的访问模式。第5章介绍了数据在共享内存中的存储方式,以及如何使用共享内存提高函数性能。第6章讲述了如何使用CUDA流实现网格级的并发。第7章介绍了计算密集型应用程序中的CUDA指令级原语。第8章介绍了CUDA函数库及其作用域,包括线性代数、傅里叶变换、随机数等。第9章讲述了多GPU编程。第10章则说明了在使用CUDA进行程序开发时的一些注意事项。
译者在翻译过程中力求忠于原著,但限于译者的能力及水平,如有纰漏,还望读者朋友们不吝赐教,译者在此表示衷心的感谢。
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
并行计算已成为突破摩尔定理局限性的重要研究方向,而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的其他一些参考资源。
参与本书翻译工作的主要有李杨、吴汉平、徐光景、童胜汉、陈军、胡凯等。由于译者的时间和水平有限,翻译中的疏漏和错误在所难免,还望读者和同行不吝指正。
前言
---------------------------CUDA C编程权威指南---------------------------
欢迎来到用CUDA C进行异构并行编程的奇妙世界!
现代的异构系统正朝一个充满无限计算可能性的未来发展。异构计算正在不断被应用到新的计算领域—从科学到数据库,再到机器学习的方方面面。编程的未来将是异构并行编程的天下!
本书将引领你通过使用CUDA平台、CUDA工具包和CUDA C语言快速上手GPU(图形处理单元)计算。本书中设置的范例与练习也将带你快速了解CUDA的专业知识,助你早日达到专业水平!
本书写给谁
本书适用于任何想要利用GPU计算能力来提高应用效率的人。它涵盖了CUDA C编程领域最前沿的技术,并有着以下突出的优势:
风格简洁
描述透彻
大量范例
优质习题
覆盖面广
内容聚焦高性能计算的需求
如果你是一个经验丰富的C程序员,并且想要通过学习CUDA C来提高高性能计算的专业才能,本书中建立在你现有知识之上的例题和习题,将使掌握CUDA C编程更加简单。仅需掌握一些C语言延伸的CUDA知识,你便可以从大量的并行硬件中获益。CUDA平台、编程模型、工具和库将使得异构架构编程变得简捷且高效。
如果你是计算机科学领域以外的专业人士,而且想要通过GPU上的并行编程来最大限度地提高工作效率,并提高应用性能,那么本书正是为你量身打造的。书中的阐述清晰而简明,专人精心设计的示例,使用配置文件驱动的方法,这些都将帮助你深入了解GPU编程并迅速掌握CUDA。
如果你是教授或任何学科的研究者,希望通过GPU计算推进科学发现和创新,本书中将有你找到解决方案的捷径。即使你没有多少编程经验,在并行计算概念和计算机科学的知识方面也不够精通,本书也可带你快速入门异构架构并行编程。
序言
---------------------------CUDA C编程权威指南---------------------------
多年前,当我们将产品代码从传统的C语言编程移植到CUDA C时,我们面临的困难同所有新手一样,这些困难远不是通过简单的上网搜索就能解决的。因此,我们便萌生了一个想法—假如能有一本由程序员为程序员编写的并且能够解决所有CUDA开发难题的书该有多好!为了满足这种需求,也利用我们在CUDA方面的经验,我们有了编写本书的念头。因此,本书是专门为应对高性能和科学计算集群的需求而编写的。
在学习新的框架或编程语言时,大多程序员只是随便摘取几段代码,测试一下,然后就在这个试验基础上编写他们自己的程序了。对许多软件开发者来说使用范例代码是一种常见的技巧。本书也遵循这一习惯。每一章重点论述一个主题,用精确的解释来提供基础知识,用简单但完全可行的代码示例来阐释每一个概念。学习概念和代码同步进行将使你迅速了解这些主题。本书使用配置文件驱动的方法来引导你逐步入门。
C语言并行编程与CUDA C语言并行编程两者间的主要区别在于CUDA的架构特性,比如内存与执行模型对于程序员而言是直接可见的。这将使你得以更好地掌控大规模并行GPU环境。尽管有些人仍然认为CUDA的概念太过基础,但其实了解一些底层架构的知识对于使用GPU来说也是非常必要的。实际上,即使你对于架构的了解有限,也完全能够用好CUDA平台。
并行编程是出于性能方面的考虑,它是靠配置文件驱动的。CUDA编程的独特优势在于开放的架构特性可以使程序员在功能强大的硬件平台上充分挖掘其计算性能,作为程序员的你将会充分感受到这一优势。在掌握书中通过练习教授的技巧之后,你将发现使用CUDA C编程是一项十分简单、有趣且高效的工作。
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
主流芯片制造厂商(例如NVIDIA)最近一系列的动作已经表明了,未来的微处理器系统和大型高性能计算系统都将是异构的。在这些异构系统中将同时使用两种不同的技术,二者在不同系统中所占的比例是不同的。
?多核CPU技术:CPU核的数量将不断增长,因为人们希望将越来越多的部件封装到芯片上,同时又要避免功耗墙、指令集并行性墙、内存墙等。专用硬件和大规模并行加速器:例如,近年来NVIDIA公司推出的GPU在浮点运算上的性能已经超过了标准CPU的性能。而且,GPU编程也正变得和多核CPU编程一样简单。
在未来的设计中,这两种技术在系统中所占的比例并不是固定的,并且随着时间的推移很可能发生变化。显然,在未来的计算机系统中,无论是笔记本电脑还是超级计算机,都将包含各种异构的部件。事实上,这种系统的浮点计算能力已经达到了P级(即每秒钟执行1015次浮点运算)。但是,在采用混合处理器的新计算环境中,开发人员面临的问题和挑战仍然很艰难。软件基础架构中的关键部分要赶上这种变革的步伐也同样很困难。在一些情况中,软件的性能无法随着处理器核数量的增加而增加,因为越来越多的时间消耗在数据移动而不是计算上。在其他情况中,软件通常是在硬件出现数年后才发布性能调优后的版本,因此在发布时就已经过时了。还有一些情况,例如在最新的GPU上,软件根本无法运行,因为编程环境已经发生了太大的变化。本书解决了软件开发中面临的核心问题,它介绍了近年来在编写大规模并行加速器中最具创新性和功能最强大的解决方案之一。本书介绍了如何使用CUDA C来编写程序,不仅给出了详细的示例,而且还介绍了程序的设计流程以及NVIDIA GPU的高效使用方式。本书介绍了并行计算的一些基本概念,包括简单的示例和调试方法(涵盖逻辑调试和性能调试),此外还介绍了一些高级主题以及在编译和使用应用程序时需要注意的问题,并通过编程示例来进一步强化这些概念。
如果读者需要开发基于加速器的计算系统,那么本书是首选。本书深入分析了并行计算,并为其中的多种问题提供了解决方案。本书对于应用程序开发人员、数值计算库开发人员,以及学习并行计算的学生和教师来说尤为有用。我很高兴从本书中学到了不少东西,并且我相信你也会有同样的体会。
—Jack Dongarra田纳西大学杰出教授,美国橡树岭国家实验室杰出研究人员
媒体评论
---------------------------CUDA C编程权威指南---------------------------
图形处理器(GPU)已经有了很大的发展。从最初能够瞬时生成图像输出的专业图形处理器,发展到显示单元,GPU已经成为人们在进行超高速数据处理时热衷的技术手段。在过去的几年中,GPU已经越来越多地附加到CPU上,用于加速异构计算中的各种计算。如今,许多桌面系统、计算集群,甚至世界上许多最大的超级计算机都配置有GPU。图形处理器有着用于专业技术计算的大数据计算能力,它们已经在广泛的学科领域中实现了科学和工程的巨大进步,因为它们使大量计算核心并行工作,同时又将功耗预算保持在合理范围内。
所幸,GPU编程接口也一直与时俱进。过去,要在应用功能之外使用它们要费好大一番功夫,GPU编程人员不得不去熟练掌握那些通常只有图形程序员才能理解到位的诸多概念。如今的系统提供了一个更加便捷的手段来创建可以在其上运行的应用软件,这就是CUDA。
CUDA是最受欢迎的应用编程接口之一,可用于加速GPU上的一系列计算内核。它可以让C或C++代码在GPU上合理高效地运行。CUDA既满足了为使其良好运行而了解其架构的需要,又有为了使用和输出可读程序的编程接口,并且完美地平衡了这两项功能。
对任何想要使用GPU来进行科研或技术编程的人来说,该书都将是一个珍贵的资源宝库。它全面介绍了CUDA编程接口及其用法。首先,它描述了在异构架构上并行计算的基础知识,并介绍了CUDA的功能。其次,它解释了CUDA程序的执行方式。由于CUDA为程序员提供了操作手段和内存模型,因而CUDA程序员直接掌控了大规模并行环境。除了提供CUDA内存模型的细节之外,该书还提供了丰富的关于如何使用CUDA的信息。接下来的章节将讨论流,以及如何执行并行和重叠的内核。然后是关于调整指令级原语,关于如何使用CUDA库,以及关于使用OpenACC指令进行GPU编程的部分。在第9章之后,本书还提供了一些应用时的注意事项。此外,书中列举大量的范例来帮助读者更好地入门,读者可以下载并亲自运行体验。
实践证明,CUDA在表现力和可编程性之间实现了绝佳的平衡。但是,以简化应用开发为使命的人深知,路漫漫其修远兮。在过去的几年中,CUDA的研究人员一直在努力改善异构编程工具。CUDA 6.0引入了许多新功能,包括统一的内存和插件库,极大地简化了GPU编程。它们还提供了一组名为OpenACC的指令,这在书中也有所涉及。OpenACC有望进一步完善CUDA,它将减少在程序执行中所需的直接控制,与此同时提供一个更加便捷的方法来利用GPU的编程能力。目前看来,收效良好。无论是OpenACC、CUDA 6.0,还是书中讲到的其他主题,都将帮助CUDA开发人员加快应用程序的运行,从而实现前所未有的高性能。请相信我,这本书值得占据你书架的一席之地!
祝大家编程愉快!
芭芭拉·查普曼
休斯敦大学计算机辅助创新设计系统与计算机系
---------------------------GPU高性能编程CUDA实战[图书]---------------------------
对于开发基于GPU加速的并行计算系统的读者来说,《GPU高性能编程CUDA实战》绝对值得一读。