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
替换comm
和MPI_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。那么这里的问题是什么?
答案 0 :(得分:2)
您的变量comm
从未初始化并且具有未定义的值。
你必须给它一个值。一开始,全球沟通者是MPI_COMM_WORLD
。
comm = MPI_COMM_WORLD
当然,MPI_COMM_WORLD
也是整数,它是一个整数常量。