关于并行编程,您需要了解的第一件事是共享内存多处理器计算机系统和分布式内存集群之间的区别。
共享内存多处理器系统是一种计算机,其中多个处理器内核(可能位于一个、两个或更多集成电路上)共享相同的内存。从程序员的角度来看,程序员创建的多个进程可以在不同的内核上运行并共享对内存的访问。用于共享内存系统上的科学计算的并行程序通常使用专门的语言扩展来编写,例如 OpenMP(具有 C、C++ 和 Fortran 版本)。OpenMP 语言扩展使描述要并行执行的数组上的操作变得容易- 编译器负责将工作分配给多个处理器。
分布式内存集群可以被认为是大量计算机的集合,每台计算机都有自己的内存。为了进行交互,在这些计算机上运行的进程必须明确地相互发送消息。在分布式内存集群上进行科学计算的并行程序最常使用消息传递接口 (MPI) 库编写。使用 MPI 编程比使用 OpenNMP 编程更困难,因为难以决定如何分配工作以及进程如何通过消息传递进行通信。
请注意,使用 MPI 编写的程序可以使用 MPI 库的一个版本在共享内存系统上运行,该版本只是通过共享内存在进程之间传递消息。从这个意义上说,MPI 程序更加灵活——它可以在任何类型的系统上运行。相比之下,您无法在分布式内存集群上有效地运行 OpenMP 程序。
共享内存系统通常受限于处理器内核的数量和可以使用的存储量。在实践中,您很少会在共享内存系统中找到超过 64 个处理器内核或大约 128 GB 的 RAM,而分布式内存集群可能具有数万个处理器内核和 TB 级内存。
对于真正的大规模并行计算,您需要学习 MPI。如果您愿意并且能够在较小的共享内存系统的限制范围内工作,那么学习 OpenMP 将是开始并行计算的一种更简单的方法。例如,如果您正在使用具有 4 或 8 个内核的台式计算机并且您想利用这些内核,那么 OpenMP 可能是最好的入门方式。
其他答案已经提到了一些开始使用 MPI 的书籍。对于 OpenMP,我建议您从以下资源列表开始
http://www.openmp.org/resources/