【发布时间】:2016-11-16 07:06:53
【问题描述】:
我正在尝试在 Fortran 中在 2 个内部通信器之间实现一个MPI_intercomm,一个具有前 2 个进程,另一个具有其余进程。
我需要在新创建的通信器之间执行发送、接收操作。
代码:
program hello
include 'mpif.h'
integer tag,ierr,rank,numtasks,color,new_comm,inter1,inter2
tag = 22
call MPI_Init(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD,rank,ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD,numtasks,ierr)
if (rank < 2) then
color = 0
else
color = 1
end if
call MPI_COMM_SPLIT(MPI_COMM_WORLD,color,rank,new_comm,ierr)
if (color .eq. 0) then
call MPI_INTERCOMM_CREATE(new_comm,0,MPI_Comm_world,1,tag,inter1,ierr)
!local_comm,local leader,peer_comm,remote leader,tag,new,ierr
else if(color .eq. 1) then
call MPI_INTERCOMM_CREATE(new_comm,1,MPI_COMM_WORLD,0,tag,inter2,ierr)
end if
select case (color)
case (0)
call MPI_COMM_FREE(inter1)
case(1)
call mpi_comm_free(inter2)
end select
call MPI_finalize(ierr)
end
代码编译没有任何问题。但运行时卡住,有时会报错。
【问题讨论】:
-
它显示什么错误?它卡在哪里?您尝试了哪些步骤进行调试?
-
例如,如果我使用 mpirun -np 8 ./a.out 运行,它就会像陷入无限循环一样卡住。它没有显示任何错误。
-
无效。遇到同样的错误。
-
试过了,没有结果。但我也尝试了其他几个程序。在我介绍 MPI_INTERCOMM_CREATE 函数之前,一切都很好。这条单行设法停止运行。也想知道代码有没有问题。
-
对所有 Fortran 问题使用标签 fortran。无需在标题中重复标签。
标签: parallel-processing fortran mpi fortran90 openmpi