You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Open MPI中MPI_Comm_spawn与MPI_Init触发段错误问题求助

MPI_Comm_spawn子进程MPI_Init触发段错误问题

我有两个程序文件:parent.cpp和child.cpp,其中parent.cpp通过MPI_Comm_spawn调用child.cpp生成的可执行文件启动子进程,操作流程及遇到的问题如下:

1. 编译命令

>> mpicc -o parent parent.cpp
>> mpicc -o parent child.cpp

2. 运行命令及现象

执行mpirun -np 1 parent时,程序输出5次"Child spawned"后触发段错误,错误信息:

...
Signal: segmentation fault (11)
Signal code: Address not mapped (1)
...

但执行mpirun -np 2 parent时,父进程可成功启动子进程并正常终止。

3. 问题定位

通过printf语句排查,段错误发生在child.cpp的MPI_Init(...)调用处。

4. 环境及已尝试解决方式

使用Open MPI 4.0.1版本,已查阅谷歌、ChatGPT、BARD及相关Open MPI GitHub Issue,但未找到有效解决方案,请求帮助。


完整代码

parent.cpp

#include <iostream>
#include <mpi.h>

int main() {
  int i, a, b, nprocs, nWorker, myrank, flag, ierr;
  MPI_Request req;
  MPI_Status status;
  MPI_Comm parent, children, intercomm;
  char worker_program[100] = "child";

  MPI_Init(NULL, NULL);

  MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

  nWorker = 5;

  MPI_Comm_spawn("child", MPI_ARGV_NULL, nWorker, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &intercomm, MPI_ERRCODES_IGNORE);

  if (intercomm == MPI_COMM_NULL) printf("children spawn failed\n");

  if (myrank == 0) {
    int a = 101;

    for (i = 0; i < nWorker; i++) {
      MPI_Send(&a, 1, MPI_INT, i, 0, intercomm);
      printf("Message sent\n");
    }

    MPI_Comm_free(&intercomm);
  }
  MPI_Finalize();
  return 0;
}

child.cpp

#include <iostream>
#include <mpi.h>

int main() {
  int i, a, b, nprocs, nWorker, myrank, flag, ierr;
  MPI_Status status;
  MPI_Comm parent;

  std::cout << "Child spawned\n";
  
  MPI_Init(NULL, NULL);

  std::cout << "Child MPI_Init()\n";
  
  MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
  MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
  MPI_Comm_get_parent(&parent);
  
  MPI_Recv(&a, 1, MPI_INT, 0, 0, parent, &status);
  
  MPI_Finalize();
  return 0;
}

内容的提问来源于stack exchange,提问作者San Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:55:04