【发布时间】:2014-07-15 17:56:42
【问题描述】:
我尝试将 8 个处理器分成两个子组。其中一个子组包含 2 个处理器,例如,它们的等级是 0 和 1。对于当前示例,我不需要另一个组。下面上下文中的代码 sn-p 是我用来实现这个目标的。但是,我不断收到错误消息。
我收到的错误消息之一如下:
Fatal error in PMPI_Comm_rank: Invalid communicator, error stack:
PMPI_Comm_rank(121): MPI_Comm_rank(MPI_COMM_NULL, rank=0x7fff5a451e10) failed
PMPI_Comm_rank(73).: Null communicator.
如果我将第 15 行的语句更改为 call MPI_GROUP_RANK(...),则不会显示错误消息。但是,我不知道是否可以使用 group_rank 作为MPI_SEND 或MPI_RECV 等子例程的输入参数。谁能告诉我我的代码有什么问题?谢谢。
李
01 program main
02 include 'mpif.h'
03 integer :: ierr, irank, num_procs, base_group
04 integer :: incl_list(2), new_group, new_comm, new_rank
05 call MPI_Init ( ierr )
06 call MPI_COMM_RANK( MPI_comm_world, irank, ierr )
07 call MPI_COMM_SIZE( MPI_comm_world, num_procs, ierr)
08 call MPI_COMM_GROUP( MPI_comm_world, base_group, ierr)
09
10 incl_list(1) = 0
11 incl_list(2) = 1
12
13 call MPI_GROUP_INCL( base_group, 2, incl_list, new_group, ierr )
14 call MPI_COMM_CREATE( MPI_COMM_WORLD, new_group, new_comm, ierr )
15 call MPI_COMM_RANK( new_comm, new_rank, ierr )
16 call MPI_Finalize ( ierr )
17 end program
【问题讨论】:
标签: parallel-processing fortran mpi fortran90