使用两台计算机通过 intel fortran 运行一个并行程序

计算科学 正则 高性能计算 英特尔-mkl
2021-11-30 04:38:49

我有两台计算机,都是 4 核的,我正在其中一台使用 Intel Parallel Studio Cluster 版本运行一些繁重的计算工作。我正在用 fortran 编码并广泛使用 OpenMP 来并行化循环。

我读到应该可以同时使用两台计算机运行此代码,但我不知道如何设置它。是否值得,这意味着,如果我的代码曾经在一台机器上并行化,计算时间从 9 小时减少到 1.37 小时。我想如果我设法将两台机器集群起来,它会变得更快。

我要设置的两台机器完全相同,并且通过 wi fi 连接到同一个路由器。我的确切问题是是否有人知道有关如何使用 MPI 连接两台机器的任何好的教程?另外,编码是否需要进行很多更改?MPI语法有什么好的资源吗?

谢谢

2个回答

作为并行计算的忠实信徒(芯片并没有变得更快),简短的回答是肯定的。您应该研究 MPI(消息传递接口),这是在集群计算方面在不同机器之间传递数据的缺陷标准。有关 MPI 的介绍,请参阅此链接https://en.wikipedia.org/wiki/Message_Passing_Interface

评估是否值得您花时间使代码集群安全,借用线程安全的习惯用法,这取决于您的代码的可并行化程度、内存需求、数据是否在每个线程上进行分区-基础与否,以及每个计算节点和 CPU/核心访问了多少共享数据。

话虽如此,将 MPI 视为集群中不同计算机级别的 OpenMP 之上的一层,就像 OpenMP 在不同线程(或内核,如果你愿意的话)级别上工作一样。

您提到的称为混合并行性。

一个集群由几个节点组成。一个节点是一组共享相同物理内存的插槽,一个插槽是一组我们称为处理器的内核。由于通过交换机的高速连接,节点存储在机架中并相互通信。

为简化起见,当您影响的 OpenMP 线程数等于每个插槽的内核数,并且 MPI 进程数等于您要在集群上使用的节点数时,您可以执行混合并行。例如,如果我有一个由套接字/处理器组成的具有 4 个节点和 12 个内核的集群,我启动我的程序以运行 4 个 MPI 进程(1 个节点)和 12 个 OpenMP 线程(每个套接字上一个内核)。在您的示例中,您有 2 个节点(2 台计算机,2 个具有不同内存的不同实体)和 4 个处理器内核。所以运行 2 个 MPI 进程,每个进程在每台计算机上处​​理 4 个 OpenMP 线程。NameRakes 给出了一个好词:MPI 是OpenMP 之上的一层。

另一种方法是仅使用具有 8 个进程的 MPI,因为 MPI 既适用于共享内存架构,也适用于分布式内存架构,而使用仅限于共享内存计算机的 OpenMP 则无法做到这一点。但是,在这种情况下,需要 8 个 MPI 通信,而混合并行需要 2 个,效率较低。

您似乎对 OpenMP 有相当不错的加速。混合并行对于具有数十个套接字和具有数千个自由度的高度可扩展的数字代码的集群是有意义的。正如 NameRakes 所说,由于 MPI 和 OpenMP 在概念上非常不同,因此不确定时间投资是否会有所回报。

另请注意,您的代码将根据较慢的处理器运行,因此如果您的两台计算机具有不同的处理器,则可能会降低您的速度,因此您需要确保正确分配负载。您肯定可以赢得时间,但不能达到 2 倍,这取决于架构和代码的可扩展性。