我有两个程序主从。我的主人进行数据分解,奴隶对分解的数据进行计算。MPI scaterv 是为分配工作而实现的。我首先执行我的主程序,然后它动态生成子进程或从属进程,从属执行不同的代码,即计算。现在再次master必须从slave收集结果并执行下一级分解。我如何使用 MPI 做到这一点?我实际上想交替执行我的主从代码。我该如何实现呢?
先感谢您..
我有两个程序主从。我的主人进行数据分解,奴隶对分解的数据进行计算。MPI scaterv 是为分配工作而实现的。我首先执行我的主程序,然后它动态生成子进程或从属进程,从属执行不同的代码,即计算。现在再次master必须从slave收集结果并执行下一级分解。我如何使用 MPI 做到这一点?我实际上想交替执行我的主从代码。我该如何实现呢?
先感谢您..
MPI-2(如果我没记错的话)引入了动态进程管理机制,您可能会关心搜索mpi_comm_spawn
以开始了解这些机制。因此,当然可以编写一个 MPI 程序,该程序在一个运行主任务的进程和多个运行工作任务的进程之间交替(不推荐使用术语从属任务)。甚至可以设计您的计算,以便一个程序运行主任务,另一个程序运行(多个)工作任务,并使用 MPI 在两者之间传递消息。
但是(这是一个很大的问题)我不认为许多资源管理器(管理并行计算机系统的人或操作系统和系统软件,如作业管理器)支持这种动态过程管理。想象一下使用您建议的基本设计来安排和管理两个或多个程序的复杂性。正如程序 A 试图启动 2^10 个工作进程一样,程序 B 和程序 C 也是如此,而程序 D 试图删除 2^8 个工作进程;所有这些都在一个只有 2^10 个处理器(或内核)的集群上完成。当多个作业争夺稀缺资源时,构建集群上作业的吞吐量降至零的场景可能并不太难。
如果您的平台支持动态流程管理,请继续。在更可能的情况下,您的平台没有您至少有两个选择,您选择哪一个取决于主:工人时间的比例以及可能还有其他因素。你可以: