0

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

先感谢您..

4

1 回答 1

0

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

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

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

  1. 做我们大多数人一直在做的事情,并继续做,并为整个工作请求一定数量的处理器,在仅主阶段期间,除了其中一个之外,其他所有处理器都处于空闲状态。资源管理者可能很浪费,但很容易应对。编程也相对容易。
  2. 如果 master 在 worker 阶段之间做了很多工作,您可以修改您的程序,以便 master 和 worker 是单独的程序。首先让master在一个进程上执行,当它完成时,向作业管理系统提交一个请求以启动worker计算的第一阶段。反过来,启动下一个主阶段的执行,依此类推。
于 2013-10-15T08:11:21.247 回答