MPI_Comm_spawn 来自等级 0 以外的进程
MPI_Comm_spawn from a process other than rank 0
我正在努力做到以下几点:
1-运行 带有 mpi运行 -np 2 xxx
的代码
2 级 1 进程产生 2 个从属(spawn_example 在线找到的代码)
当我尝试从 0 级生成时它起作用了,但是从 1 级开始它挂起并一直等待直到我用 ctrl+c 停止执行
这是代码,如果你 运行 使用 -np 1 它正常完成,但是使用 -np 2 它挂起:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include"mpi.h"
int main(int argc, char **argv)
{
int tag = 1;
int tag1 = 2;
int tag2 = 3;
int my_rank;
int num_proc;
int array_of_errcodes[10];
int i;
MPI_Status status;
MPI_Comm inter_comm;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
if(my_rank==0)
{
printf("I'm process rank %d \n ",my_rank);
}
if(my_rank==1)
{
printf("Rank %d process is spawning 2 slaves \n",my_rank);
MPI_Comm_spawn("spawn_example", MPI_ARGV_NULL, 2, MPI_INFO_NULL,1, MPI_COMM_WORLD, &inter_comm, array_of_errcodes);
}
MPI_Finalize();
exit(0);
}
我不知道我做错了什么,我想知道如何让它成为可能,以便其他等级可以产生他们的奴隶并最终交换数据。
谢谢。
Edit1:我添加了完整代码,如果您需要 spawn_example,我可以提供 link。
这个 MPI API 并不像您想象的那样。 MPI_Comm_Spawn 是一个集体调用,并创建一个具有 n
个进程的子 MPI 作业(假设当前作业有 n
个进程)。您需要从所有进程中调用它(删除 if
)。Here 是一个示例。
然后回答您的问题:为什么它可以从 root 而不是从其他人运行?因为implementation。只有根进程执行生成进程的任务。
我正在努力做到以下几点:
1-运行 带有 mpi运行 -np 2 xxx
的代码
2 级 1 进程产生 2 个从属(spawn_example 在线找到的代码)
当我尝试从 0 级生成时它起作用了,但是从 1 级开始它挂起并一直等待直到我用 ctrl+c 停止执行
这是代码,如果你 运行 使用 -np 1 它正常完成,但是使用 -np 2 它挂起:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include"mpi.h"
int main(int argc, char **argv)
{
int tag = 1;
int tag1 = 2;
int tag2 = 3;
int my_rank;
int num_proc;
int array_of_errcodes[10];
int i;
MPI_Status status;
MPI_Comm inter_comm;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
if(my_rank==0)
{
printf("I'm process rank %d \n ",my_rank);
}
if(my_rank==1)
{
printf("Rank %d process is spawning 2 slaves \n",my_rank);
MPI_Comm_spawn("spawn_example", MPI_ARGV_NULL, 2, MPI_INFO_NULL,1, MPI_COMM_WORLD, &inter_comm, array_of_errcodes);
}
MPI_Finalize();
exit(0);
}
我不知道我做错了什么,我想知道如何让它成为可能,以便其他等级可以产生他们的奴隶并最终交换数据。
谢谢。
Edit1:我添加了完整代码,如果您需要 spawn_example,我可以提供 link。
这个 MPI API 并不像您想象的那样。 MPI_Comm_Spawn 是一个集体调用,并创建一个具有 n
个进程的子 MPI 作业(假设当前作业有 n
个进程)。您需要从所有进程中调用它(删除 if
)。Here 是一个示例。
然后回答您的问题:为什么它可以从 root 而不是从其他人运行?因为implementation。只有根进程执行生成进程的任务。