Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPI更改主设备和从设备的执行顺序_Mpi - Fatal编程技术网

MPI更改主设备和从设备的执行顺序

MPI更改主设备和从设备的执行顺序,mpi,Mpi,我有两个主程序和从程序。我的主设备进行数据分解,从设备对分解后的数据进行计算。MPI scaterv是为工作分配而实现的。我首先执行主程序,然后它动态生成子进程或从进程,从进程执行不同的代码,即计算。现在,主服务器必须再次从从属服务器收集结果,并执行下一级分解。如何使用MPI实现这一点?实际上,我想交替执行主代码和从代码。。我如何实现这一点 提前感谢您。MPI-2(如果我没记错的话)引入了动态流程管理机制,您可能需要搜索MPI\u comm\u spawn来开始学习这些机制。因此,当然可以编写一

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

提前感谢您。

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

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

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

  • 做我们大多数人一直在做的事情,并继续做下去,为整个作业请求总数的处理器,在仅主控阶段,除了一个处理器之外,其余处理器都处于空闲状态。可能是浪费,但资源管理人员很容易处理。编程也相对容易
  • 如果主程序在辅助程序阶段之间执行大量工作,则可以修改程序,使主程序和辅助程序成为独立的程序。首先让主进程在一个进程上执行,完成后,向作业管理系统提交一个请求,以启动工人计算的第一阶段。让它依次启动下一主阶段的执行,等等

  • 是的,我开发了使用MPI_comm_spawn()动态创建子进程的代码。让我们看看它是如何工作的。:)