【发布时间】:2017-12-05 02:36:31
【问题描述】:
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 替换MPI_COMM_RANK 和MPI_COMM_SIZE 中的comm。我这样做只是因为我发现原型说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。那么这里有什么问题呢?
【问题讨论】: