基本信息
- 原书名:Professional CUDA C Programming

内容简介
作译者
马克斯·格罗斯曼(Max Grossman)与GPU编程模型已经打了近十年交道。他的主要研究内容为开发新型GPU编程模型和用于在GPU硬件上实现的算法。他已将GPU应用于地球科学、等离子体物理、医学成像和机器学习等一系列领域,并致力于发现和研究新领域的计算模式,寻求以全新方式应用它们的可能性。这些宝贵的实践经验对于指导今后在编程模型和程序框架方面的工作大有裨益。马克斯获莱斯大学的计算机科学学士学位,主要研究并行计算。
泰·麦克切尔(Ty McKercher)是NVIDIA公司的首席方案架构师,他领导的团队专攻跨行业的视觉计算系统架构。他通常负责在新兴技术评估期间促进客户和产品工程团队之间的沟通交流。自从2006年参加了在NVIDIA公司总部举办的第一届CUDA训练课程后,他一直参与CUDA的相关项目。也是自那时起,他也在某些世界最大、任务最为繁重的产品数据中心工作,帮助构建基于GPU的超级计算环境。他已获科罗拉多矿业学院数学学士学位,主要研究方向为地球物理学和计算机科学。
技术审校者简介 About the Reviewers
张伟,是一位在高性能计算领域有着15年工作经验的科研程序员。他已独立研发或与人合作研发了许多科学软件包,服务于分子模拟、计算机辅助药物设计、EM的结构重建和地震深度成像开发等。目前,他正致力于研究如何采用诸如CUDA等新技术来提升地震数据的处理效率。
赵超,于2008年加入雪佛龙公司,目前是地球物理应用软件开发专家,负责为地球学家们设计和开发软件产品。他在加入雪佛龙之前是知识系统公司和地震微技术公司的软件开发员。他从事软件开发的研究和实业已超过13年,在地质学和地球物理学方面积累了丰富的经验。经过多年的学术研究,他十分乐于见到CUDA编程能真正广泛地应用到科研工作中,并愿为此尽其所能。赵超本科毕业于北京大学的化学专业,获罗得岛大学计算机科学专业的理学硕士学位。
目录
推荐序
自序
作者简介
技术审校者简介
前言
致谢
第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
1.2.2 异构计算范例9
1.2.3 CUDA:一种异构计算平台10
1.3 用GPU输出Hello World12
1.4 使用CUDA C编程难吗15
1.5 总结16
1.6 习题16
译者序
对任何想要使用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进行程序开发时的一些注意事项。
译者在翻译过程中力求忠于原著,但限于译者的能力及水平,如有纰漏,还望读者朋友们不吝赐教,译者在此表示衷心的感谢。
前言
现代的异构系统正朝一个充满无限计算可能性的未来发展。异构计算正在不断被应用到新的计算领域—从科学到数据库,再到机器学习的方方面面。编程的未来将是异构并行编程的天下!
本书将引领你通过使用CUDA平台、CUDA工具包和CUDA C语言快速上手GPU(图形处理单元)计算。本书中设置的范例与练习也将带你快速了解CUDA的专业知识,助你早日达到专业水平!
本书写给谁
本书适用于任何想要利用GPU计算能力来提高应用效率的人。它涵盖了CUDA C编程领域最前沿的技术,并有着以下突出的优势:
风格简洁
描述透彻
大量范例
优质习题
覆盖面广
内容聚焦高性能计算的需求
如果你是一个经验丰富的C程序员,并且想要通过学习CUDA C来提高高性能计算的专业才能,本书中建立在你现有知识之上的例题和习题,将使掌握CUDA C编程更加简单。仅需掌握一些C语言延伸的CUDA知识,你便可以从大量的并行硬件中获益。CUDA平台、编程模型、工具和库将使得异构架构编程变得简捷且高效。
如果你是计算机科学领域以外的专业人士,而且想要通过GPU上的并行编程来最大限度地提高工作效率,并提高应用性能,那么本书正是为你量身打造的。书中的阐述清晰而简明,专人精心设计的示例,使用配置文件驱动的方法,这些都将帮助你深入了解GPU编程并迅速掌握CUDA。
如果你是教授或任何学科的研究者,希望通过GPU计算推进科学发现和创新,本书中将有你找到解决方案的捷径。即使你没有多少编程经验,在并行计算概念和计算机科学的知识方面也不够精通,本书也可带你快速入门异构架构并行编程。
如果你是C语言初学者并且有兴趣探索异构编程,本书也完全适合你,因为它不强制要求读者有丰富的C语言编程经验。即使CUDA C和C语言使用相同的语法,二者的抽象概念和底层硬件也是全然不同的,因而对其中之一的经验并不足以使你在学习另一个时感到轻松。所以,只要你对异构编程有浓厚的兴趣,只要你乐于学习新事物且乐于尝试全新的思维方式,只要你对技术相关的话题有深入探索的热情,本书也完全适合你。
即使你有不少关于CUDA C的经验,本书还是有助于知识更新、探索新工具以及了解最新CUDA功能。虽然本书旨在从零开始培养CUDA的专业人才,但它也含有许多先进的CUDA概念、工具和框架的概述,它们将对CUDA开发人员大有裨益。
本书的内容
本书讲解了CUDA C编程的基本概念与技术,用于大幅加速应用程序的性能,并包含了随着CUDA工具包6.0和NVIDIA Kepler GPU一起发布的最新功能。在对从同质架构到异构架构的并行编程模式转变进行了简要介绍之后,本书将引导你学习必要的CUDA编程技能和最佳的练习实践,包含但不仅限于CUDA编程模型、GPU执行模型、GPU内存模型、CUDA流和事件、多GPU编程的相关技术、CUDA感知MPI编程和NVIDIA开发工具。
本书采用一种独特的方法来教授CUDA知识,即将基础性的概念讲解与生动形象的示例相结合,这些示例使用配置文件驱动的方法来指导你实现最佳性能。我们对每一个主题都进行了详尽的讲解,清晰地展示出了采用代码示例形式详细操作的过程。书中不仅教授如何使用基于CUDA的工具,还介绍了如何以抽象编程模型为基础并凭借悟性与直觉对开发过程每一步骤的结果做出解释,从而帮助你快速掌握CUDA的开发流程。
每章围绕一个主题展开讲解,运用可行的代码示例来演示GPU编程的基本功能和技术,这之后就是我们精心设计的练习,以便你进一步探索加深理解。
序言
在学习新的框架或编程语言时,大多程序员只是随便摘取几段代码,测试一下,然后就在这个试验基础上编写他们自己的程序了。对许多软件开发者来说使用范例代码是一种常见的技巧。本书也遵循这一习惯。每一章重点论述一个主题,用精确的解释来提供基础知识,用简单但完全可行的代码示例来阐释每一个概念。学习概念和代码同步进行将使你迅速了解这些主题。本书使用配置文件驱动的方法来引导你逐步入门。
C语言并行编程与CUDA C语言并行编程两者间的主要区别在于CUDA的架构特性,比如内存与执行模型对于程序员而言是直接可见的。这将使你得以更好地掌控大规模并行GPU环境。尽管有些人仍然认为CUDA的概念太过基础,但其实了解一些底层架构的知识对于使用GPU来说也是非常必要的。实际上,即使你对于架构的了解有限,也完全能够用好CUDA平台。
并行编程是出于性能方面的考虑,它是靠配置文件驱动的。CUDA编程的独特优势在于开放的架构特性可以使程序员在功能强大的硬件平台上充分挖掘其计算性能,作为程序员的你将会充分感受到这一优势。在掌握书中通过练习教授的技巧之后,你将发现使用CUDA C编程是一项十分简单、有趣且高效的工作。
媒体评论
所幸,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开发人员加快应用程序的运行,从而实现前所未有的高性能。请相信我,这本书值得占据你书架的一席之地!
祝大家编程愉快!
芭芭拉·查普曼
休斯敦大学计算机辅助创新设计系统与计算机系