我们的主要目标是教读者如何对大规模并行处理器进行编程以实现高性能,我们的方法不需要大量的硬件专业知识。因此,我们将用许多页面来开发高性能并行程序的技术。而且,我们相信,一旦你发展正确的洞察力并以正确的方式进行,它就会变得容易。特别是,我们将专注于计算思维[Wing 2006]技术,这些技术将使您能够以适合高性能并行计算的方式思考问题。
请注意,硬件架构功能仍然有限制和限制。大多数处理器上的高性能并行编程需要一些关于硬件工作原理的知识。我们可能需要十年或更长时间才能构建工具和机器,以便大多数程序员可以在没有这些知识的情况下工作。即使我们有这样的工具,我们也怀疑对硬件有更多了解的程序员将能够以比没有硬件的程序员更有效地使用这些工具。然而,我们不会将计算机架构作为一个单独的主题来教授。相反,我们将教授基本的计算机架构知识,作为我们讨论高性能并行编程技术的一部分。
我们的第二个目标是教授并行编程,以实现正确的功能和可靠性,这构成了并行计算的一个微妙问题。那些过去研究过并行系统的人知道,实现初始性能是不够的。挑战在于以这样的方式实现它,您可以调试代码并支持用户。CUDA编程模型鼓励使用简单形式的屏障同步、内存一致性和原子性来管理并行性。此外,它还提供了一系列强大的工具,不仅可以调试功能方面,还可以调试性能瓶颈。我们将表明,通过专注于数据并行性,人们可以在不牺牲其应用程序可靠性的情况下实现高性能。
我们的第三个目标是通过探索并行编程的方法,实现未来几代硬件的可扩展性,以便未来的机器(将越来越并行)能够比今天的机器更快地运行您的代码。我们希望帮助您掌握并行编程,以便您的程序可以扩展到新一代机器的性能水平。这种可扩展性的关键是规范和本地化内存数据访问,以尽量减少关键资源的消耗以及访问和更新数据结构的冲突。
尽管如此,实现这些目标仍需要大量技术知识,因此我们将在这本书中介绍不少并行编程的原则和模式[Mattson 2004]。我们不会在真空中教授这些原则和模式。我们将在并行化有用应用程序的背景下教授它们。我们无法涵盖所有内容,但是,我们选择了我们认为最有用和经过充分验证的技术来详细涵盖。为了补充您的知识和专业知识,我们附上了一份推荐文献清单。我们现在准备快速概述这本书的其余部分。