欢迎来到用CUDA C进行异构并行编程的奇妙世界!
现代的异构系统正朝一个充满无限计算可能性的未来发展。异构计算正在不断被应用到新的计算领域—从科学到数据库,再到机器学习的方方面面。编程的未来将是异构并行编程的天下!
本书将引领你通过使用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编程的基本功能和技术,这之后就是我们精心设计的练习,以便你进一步探索加深理解。
所有的编程示例都是在装有CUDA 5.0(或更高版本)和Kepler或Fermi GPU的Linux系统上运行的。由于CUDA C是一种跨平台的语言,因而书中的示例在其他平台上也同样适用,比如嵌入式系统、平板电脑、笔记本电脑、个人电脑、工作站以及高性能计算服务器。许多OEM供应商支持各种类型的NVIDIA GPU。
本书的结构本书共有10章,包含了以下主题。
第1章:基于CUDA的异构并行计算本章首先简要介绍了使用GPU来完善CPU的异构架构,以及向异构并行编程进行的模式转变。
第2章:CUDA编程模型本章介绍了CUDA编程模型和CUDA程序的通用架构,从逻辑视角解释了在CUDA中的大规模并行计算:通过编程模型直观展示的两层线程层次结构。同时也探讨了线程配置启发性方法和它们对性能的影响。
第3章:CUDA执行模型本章通过研究成千上万的线程是如何在GPU中调度的,来探讨硬件层面的内核执行问题。解释了计算资源是如何在多粒度线程间分配的,也从硬件视角说明了它如何被用于指导内核设计,以及如何用配置文件驱动方法来开发和优化内核程序。另外,本章还结合示例阐述了CUDA的动态并行化和嵌套执行。
第4章:全局内存本章介绍了CUDA内存模型,探讨全局内存数据布局,并分析了全局内存的访问模式。本章介绍了各种内存访问模式的性能表现,阐述了统一内存和CUDA 6.0中的新功能是如何简化CUDA编程的,以及如何提高程序员工作效率。
第5章:共享内存和常量内存本章阐释了共享内存,即管理程序的低延迟缓存,是如何提高内核性能的。它描述了共享内存的优化数据布