高性能并行运行时系统:设计与实现
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 并行编程模型与概念

如第1章所述,并行硬件的优秀编译器与运行时系统必须为并行程序的高效运行提供支持。本书假设你大体上对并行编程有所了解,但我们最好还是复习一下接下来会用到的并行编程模型的关键概念与特性。这对于理解并行软件栈底层的职责很有帮助。

在本书中,虽然我们讨论了并行编程模型及其实现,但讨论范围仅限于共享内存环境。我们没有讨论消息传递系统的实现,例如消息传递接口,也没有讨论为程序员提供分区全局地址空间(Partitioned Global Address Space,PGAS)的语言和库,例如Unified Parallel C(UPC)[145]或现代Fortran语言的Coarray功能[98]。我们忽略这些模型,不是因为它们没用(实际上,它们是运用大型机器的关键,而且“MPI+X”的组合是对世界最大的计算机编程的规范方式),而是因为我们时间有限,正如Andrew Marvell[86]在诗中所述。

因为时间限制,我们无法在一章中涵盖并行编程的所有方面,所以只关注接下来会用到的最重要的概念。我们选用了两种并行编程模型来展示这些概念:OpenMP API[100]和Intel线程构建模块[151]。除此以外,还有很多关于各种并行编程模型的论文和书籍,如果你想学习更多相关知识,那么你一定要读读它们。本书结尾处提供了一些参考资料,但它们只占那些优秀的线上或线下图书的很小一部分。

本章首先对多进程进行简短介绍,不会在此花费很多时间,因为本书的重点是多线程的高效运行时系统,所以我们将更深入地讨论后者。最后,我们将探讨阿姆达尔定律(Amdahl's law),以及它对性能的影响。