我正在使用MPICH。我用一个进程启动一个mpi程序,使用:
mpiexec -n 1 -f hostfile ./master [arguments]
我的参数是mpi进程所需的参数集。主数据计算要生成的最佳工作进程数,然后调用以下函数:
MPI_Comm_spawn("./worker", argv, nprocs, MPI_INFO_NULL, 0, MPI_COMM_SELF,&intercomm,NULL);
现在,当我有一个机器文件时,这个程序工作正常:
node01:2
node02:1
node03:1
node04:1
所以在node01上我运行了2个进程(master + 1 worker),其余的节点都有一个进程。但是,我希望每个节点只运行1个进程。所以我修改了hostfile如下。现在MPI_COMM_spawn()
之后,子进程没有被初始化,我最终断言失败了。
node01:1
node02:1
node03:1
node04:1
错误
Assertion failed in file src/util/procmap/local_proc.c at line 127: node_id <= max_node_id
internal ABORT - process 0
Assertion failed in file src/util/procmap/local_proc.c at line 112: my_node_id <= max_node_id
internal ABORT - process 2
Assertion failed in file src/util/procmap/local_proc.c at line 127: node_id <= max_node_id
internal ABORT - process 1
在这种情况下,我无法弄清楚出了什么问题。还有其他人遇到过类似的问题吗?可能的原因是什么?