PMPI_Comm_rank中的致命错误:无效的通信器

时间:2017-07-01 06:56:44

标签: fortran mpi mpich

program main
  use mpi
  character * (MPI_MAX_PROCESSOR_NAME) processor_name 
  integer myid, numprocs, namelen, rc, ierr
  integer comm
  call MPI_INIT( ierr )
  call MPI_COMM_RANK( comm, myid, ierr )
  call MPI_COMM_SIZE( comm, numprocs, ierr )
  call MPI_GET_PROCESSOR_NAME(processor_name, namelen, ierr)
  write(*,*) "Hello World! Process ",myid," of ", numprocs, " on ", processor_name
  call MPI_FINALIZE(rc)
end program main

这是教科书中的一个例子。但原始版本使用MPI_COMM_WORLD替换commMPI_COMM_RANK中的MPI_COMM_SIZE。我做这个改变只是因为我发现原型说comm应该是一个整数。完成此更改后,我使用mpifort test_mpi.f90编译并创建a.out文件。接下来我使用mpirun -n 4 ./a.out来执行它,它显示以下错误。

  

PMPI_Comm_rank中的致命错误:无效的通信器,错误堆栈:   PMPI_Comm_rank(110):MPI_Comm_rank(comm = 0x0,rank = 0x7ffd9b870564)   失败的PMPI_Comm_rank(68):无效的通信器

我在SO上做了一些搜索,发现有人说mpi.h is from one version while the binary library files are from another one。但是我只安装了一次mpich而且之前从未使用过mpi。那么这里的问题是什么?

1 个答案:

答案 0 :(得分:2)

您的变量comm从未初始化并且具有未定义的值。

你必须给它一个值。一开始,全球沟通者是MPI_COMM_WORLD

comm = MPI_COMM_WORLD

当然,MPI_COMM_WORLD也是整数,它是一个整数常量。