MPI改变了主站和从站的执行顺序

时间:2013-10-15 05:14:36

标签: mpi

我有两个程序master和slave。我的主人做数据分解,奴隶做分解数据的计算。 MPI scaterv用于分配工作。我先执行我的主程序,然后动态生成子进程或从进程,slave执行不同的代码即计算。现在,master再次收集来自slave的结果并执行下一级分解。我怎么用MPI做到这一点?我实际上想要交替执行我的主代码和从代码。我该如何实现呢?

提前谢谢..

1 个答案:

答案 0 :(得分:0)

MPI-2(如果我没记错的话)引入了动态流程管理的机制,您可能需要搜索mpi_comm_spawn以开始了解这些机制。因此,当然可以编写一个MPI程序,该程序在运行主任务的一个进程和运行工作任务的多个进程之间交替(不推荐使用术语 slave )。甚至可以设计您的计算,以便一个程序运行主任务,另一个程序运行(多个)工作任务,并使用MPI在两者之间传递消息。

但是(这是一个很大但是)我不认为许多资源管理器(管理并行计算机系统的人或操作系统和工作管理器等系统软件)都支持这种动态流程管理。想象一下使用您提出的基本设计来安排和管理两个或更多程序的复杂性。正如程序A尝试启动2 ^ 10个工作进程一样,程序B和程序C也是如此,而程序D试图删除2 ^ 8个工作进程;所有这些只在一个只有2 ^ 10个处理器(或核心)的集群上。由于多个工作机会争夺稀缺资源,因此构建集群中作业吞吐量降至零的场景可能并不太难。

如果您的平台支持动态流程管理,请继续。在更可能的情况下,您的平台没有至少两个选择,您选择哪一个取决于主人:工人时间的比例,也可能是其他因素。你可以:

  1. 做我们大多数人一直做的事情并继续做,并为整个工作请求总数的处理器,只剩下其中一个处理器在仅主控阶段闲置。对资源管理者来说可能很容易浪费。编程也相对容易。
  2. 如果主人在工作阶段之间做了大量工作,您可以修改您的程序,以便主人和工人是单独的程序。首先让主执行一个进程,并在完成后,向作业管理系统提交一个请求,以启动工作计算的第一阶段。反过来,它会启动下一个主阶段的执行,依此类推。