[mpich-discuss] mpich2 and sending message from a task to itself

Bryan Putnam bfp at purdue.edu
Thu May 29 15:25:59 CDT 2008


Hi,

I've found that if I take a standard "hello, world" program (where master 
sends "hello" to all tasks except itself), and modify it so that master 
sends "hello" to all tasks including itself, I get a "MPI_Send" error when 
using mpich2-1.0.7, of the form

Fatal error in MPI_Send: Error message texts are not available[cli_0]: 
aborting job:

>From what we can tell, sending a message to yourself is allowed by the MPI 
standard:

>From MPI: The Complete Reference (I-37):

+++++++++++++++
The range of valid values for [the destination argument] is 0..n-1,
where n is the number of processes in the group. This range includes
the rank of the sender: if [the communicator] is an intracommunicator,
then a process may send a message to itself.

MPI::COMM_WORLD is indeed an intracommunicator.
+++++++++++++++

For your enjoyment, I've included my original code, and followed it 
by the modified code.

Thanks!
Bryan


      program hellof
      include 'mpif.h'
      integer me, nt, mpierr, status(MPI_STATUS_SIZE)
      integer tag
      character*12  message, inmsg
  
      call MPI_INIT(mpierr)
      call MPI_COMM_SIZE(MPI_COMM_WORLD, nt, mpierr)
      call MPI_COMM_RANK(MPI_COMM_WORLD, me, mpierr)
      tag = 1
  
      if(me .eq. 0) then
        message = 'Hello world!'
        do i=1,nt-1
           call MPI_SEND(message, 12, MPI_CHARACTER, i, tag,
     &                   MPI_COMM_WORLD, mpierr)
        enddo
        write(6,*) 'node', me, ': ', message
      else
        call MPI_RECV(inmsg, 12, MPI_CHARACTER, 0, tag,
     &                MPI_COMM_WORLD, status, mpierr)
        write(6,*) 'node', me, ': ', inmsg
      endif
      call MPI_FINALIZE(mpierr)
      end 


Modified code:


      program hellof
      include 'mpif.h'
      integer me, nt, mpierr, status(MPI_STATUS_SIZE)
      integer tag
      character*12  message, inmsg
  
      call MPI_INIT(mpierr)
      call MPI_COMM_SIZE(MPI_COMM_WORLD, nt, mpierr)
      call MPI_COMM_RANK(MPI_COMM_WORLD, me, mpierr)
      tag = 1
  
      if(me .eq. 0) then
        message = 'Hello world!'
        do i=0,nt-1
           call MPI_SEND(message, 12, MPI_CHARACTER, i, tag,
     &                   MPI_COMM_WORLD, mpierr)
        enddo
        write(6,*) 'node', me, ': ', message
      endif
      call MPI_RECV(inmsg, 12, MPI_CHARACTER, 0, tag,
     &              MPI_COMM_WORLD, status, mpierr)
        write(6,*) 'node', me, ': ', inmsg
      call MPI_FINALIZE(mpierr)
      end




More information about the mpich-discuss mailing list