メインプログラムではなく、サブルーチン内でMPI_sendコマンドとMPI_recvコマンドを呼び出すことは可能ですか?私は自分がやろうとしていることのための最小限のプログラムを書きました。正常にコンパイルされていますが、機能していません。プログラムは「sendrecv」サブルーチンでハングします。どのように私はそれを行うことができますか?
main.f
program main
implicit none
include 'mpif.h'
integer me, np, ierror
call MPI_init( ierror )
call MPI_comm_rank( mpi_comm_world, me, ierror )
call MPI_comm_size( mpi_comm_world, np, ierror )
call sendrecv(me, np)
call mpi_finalize( ierror )
stop
end
sendrecv.f
subroutine sendrecv(me, np)
include 'mpif.h'
integer np, me, sender, tag
integer, dimension(mpi_status_size) :: status
integer, dimension(1) :: recv, send
if (me.eq.0) then
do sender = 1, np-1
call mpi_recv(recv, 1, mpi_integer, sender, tag,
& mpi_comm_world, status, ierror)
end do
end if
if ((me.ge.1).and.(me.lt.np)) then
send(1) = me*12
call mpi_send(send, 1, mpi_integer, 0, tag,
& mpi_comm_world, ierror)
end if
return
end