Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] MPI send recv confusion
From: jody (jody.xha_at_[hidden])
Date: 2013-02-18 13:26:58


Hi Pradeep

I am not sure if this is the reason, but usually it is a bad idea to
force an order of receives (such as you do in your receive loop -
first from sender 1 then from sender 2 then from sender 3)
Unless you implement it so, there is no guarantee the sends are
performed in this order. B

It is better if you accept messages from all senders (MPI_ANY_SOURCE)
instead of particular ranks and then check where the
message came from by examining the status fields
(http://www.mpi-forum.org/docs/mpi22-report/node47.htm)

Hope this helps
  Jody

On Mon, Feb 18, 2013 at 5:06 PM, Pradeep Jha
<pradeep_at_[hidden]> wrote:
> I have attached a sample of the MPI program I am trying to write. When I run
> this program using "mpirun -np 4 a.out", my output is:
>
> Sender: 1
> Data received from 1
> Sender: 2
> Data received from 1
> Sender: 2
>
> And the run hangs there. I dont understand why does the "sender" variable
> change its value after MPI_recv? Any ideas?
>
> Thank you,
>
> Pradeep
>
>
> program mpi_test
>
> include 'mpif.h'
>
> !----------------( Initialize variables )--------------------
> integer, dimension(3) :: recv, send
>
> integer :: sender, np, rank, ierror
>
> call mpi_init( ierror )
> call mpi_comm_rank( mpi_comm_world, rank, ierror )
> call mpi_comm_size( mpi_comm_world, np, ierror )
>
> !----------------( Main program )--------------------
>
> ! receive the data from the other processors
> if (rank.eq.0) then
> do sender = 1, np-1
> print *, "Sender: ", sender
> call mpi_recv(recv, 3, mpi_int, sender, 1,
> & mpi_comm_world, status, ierror)
> print *, "Data received from ",sender
> end do
> end if
>
> ! send the data to the main processor
> if (rank.ne.0) then
> send(1) = 3
> send(2) = 4
> send(3) = 4
> call mpi_send(send, 3, mpi_int, 0, 1, mpi_comm_world, ierr)
> end if
>
>
> !----------------( clean up )--------------------
> call mpi_finalize(ierror)
>
> return
> end program mpi_test`
>
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users