0

メインプログラムではなく、サブルーチン内で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
4

0 に答える 0