我有两个程序: master和slave。我的主人做数据分解,从机器做分解后的数据的计算。MPI scaterv是为了分配工作而实现的,我先执行主程序,然后它动态生成子进程或从进程,从进程执行不同的代码ie.computation。现在,master必须再次从slaves收集结果,并执行下一级分解。我如何使用MPI来做到这一点?我实际上想交替执行我的主代码和从代码..我如何实现这一点?
提前谢谢你..
发布于 2013-10-15 08:11:21
MPI-2 (如果我没记错的话)引入了动态进程管理机制,您可能需要搜索mpi_comm_spawn
来开始了解这些机制。因此,当然可以编写一个MPI程序,该程序在运行主任务的一个进程和运行辅助任务的多个进程之间交替(术语从任务已被弃用)。甚至可以设计计算,使一个程序运行主任务,另一个程序运行(多个)工作任务,并使用MPI在两者之间传递消息。
但是(这是一个很大的问题,但是)我不认为很多资源管理器(管理并行计算机系统或操作系统和系统软件的人,如作业管理器)支持这种动态进程管理。想象一下使用您提出的基本设计来安排和管理两个或更多程序的复杂性。正如程序A尝试启动2^10个工作进程一样,程序B和程序C也尝试启动2^10个工作进程,而程序D尝试删除2^8个工作进程;所有这一切都发生在一个只有2^10个处理器(或核心)的集群上。当多个作业争用稀缺资源时,构建集群上的作业吞吐量降至零的场景可能并不太难。
如果您的平台支持动态进程管理,请继续。在更有可能的情况下,你的平台没有,你至少有两个选择,你选择哪一个取决于master:worker时间的比率,可能还有其他因素。您可以:
https://stackoverflow.com/questions/19373738
复制