MPI任务分配如何工作

时间:2015-11-04 01:08:42

标签: mpi

我研究跨机器或群集分配任务的方法。 MPI似乎是传统的方法,但它的工作方式似乎也很古老:你编写一个只完成任务的程序,在代码中检测你运行的节点(进程),然后发送数据到其他进程进行计算。虽然有很多关于如何使用MPI API的信息,但我无法找到有关如何在其他机器上启动任务的全面描述。在线之间阅读,似乎是任务经理' (mpirun或mpiexec或类似的)将整个可执行文件(以原始方式,只是一个scp左右)复制到另一台机器,然后在那里运行它。然后通过网络共享,nfs或cif或类似的方式共享数据。

所以我想知道规范是否也涵盖了依赖库(如果我的应用程序依赖于共享库而计算节点没有它会怎么样?),跨平台通信(规范)声称是“平台中立的”这是真的我想如果你在谈论能够在所有平台上实现的话,但似乎并不是一种普遍或可靠的方式例如,从Linux集群上的Windows机器启动任务。

我想要做的是拥有一个长时间运行的程序,偶尔会在很多机器上以小突发运行CPU密集型任务。我也不想为一个集群编写代码 - 我正在寻找可以在真实的,数千个节点的Linux集群以及小型LAN上运行的通用解决方案。簇'实验室中的工作站在夜间闲置。

MPI有可能吗?或许我应该问,是否有支持这种情况的MPI实现?或者我应该忘记MPI并且只是实现我自己的任务特定解决方案?

2 个答案:

答案 0 :(得分:1)

修改

我的回答是基于MPI(MPICH和OpenMPI)的常见“经典集群和超级计算机”实现。

所以这是您需要了解的内容, MPI不会将可执行文件复制到其他计算机。 要运行MPI程序,您需要确保可执行文件在相同路径的每台机器上存在相同名称。 MPI不会为你做这件事。理想情况下,您可以在计算机上编译源文件并将其分发到群集上的所有其他计算机。你可以使用rsync,scp来做到这一点。 ftp等。

使用mpiexecmpirun启动MPI程序时,进程管理器会在主机文件中指定的计算机上启动可执行文件。此处必须使用-n参数指定进程数。

MPI是 消息传递接口 ,所以从根本上说,它使用消息传递模型,而不是共享内存模型。它使用TCP在各种进程之间传递消息。

因为它是可分发的可执行文件,所以不需要在每个集群上都有所有库,安装相同版本的MPI就足够了。 MPI支持处理器,网络和运行时环境异构性。

正如Hirsto解释的那样,你可以拥有SPMD或MPMD,这一切都取决于你的需求。如果你有一个长时间运行的程序偶尔会在许多机器上以小突发运行的CPU密集型任务,你可以启动一个MPI程序,该程序产生多个子程序来处理 CPU密集型< / em>在群集上的其他计算机上突发。

MPI确实提供了一个通用解决方案,可以在真实的,数千个节点的Linux集群以及工作站的小型LAN“集群”上运行。您的可执行文件保持不变,它只是主机文件的变化。 (您必须指定主机名和主机文件中的处理器数)

现在关于夜间任务的安排,MPI不会为你做这件事。您可以使用任务调度程序(例如cron)在晚上或一天中的任何时间安排这些MPI任务,这不是MPI特有的。

答案 1 :(得分:1)

你问了许多MPI规范之外的东西。这样看:mpirun与可用的机器建立ssh连接,并使用它来启动命名的可执行文件。它可以在所有机器上具有相同的名称,但不需要。这意味着依赖库的问题取决于您:mpirun仅发出启动可执行文件的命令。如果你想在Linux / Windows异构上运行,那么你必须为每种类型的机器单独编译它。

偶尔会触发远程节点上的突发活动的长时间运行过程并不是最初开发MPI的模型。最初MPI使用“单程序多数据”模型,并且所有进程的生命周期基本相同。 MPI版本3具有动态流程管理功能,因此可以启动一个动态创建工作程序的MPI管理器进程,这些进程会在一段时间后再次消失。