Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
MPI_Bsend(3)			       MPI			    MPI_Bsend(3)

NAME
     MPI_Bsend -  Basic send with user-provided buffering

SYNOPSIS
     int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest,
     int tag, MPI_Comm comm)

     int MPI_Bsend_c(const void *buf, MPI_Count count, MPI_Datatype datatype,
     int dest, int tag, MPI_Comm comm)

INPUT PARAMETERS
     buf    - initial address of send buffer (choice)
     count  - number of elements in send buffer (non-negative integer)
     datatype
	    - datatype of each send buffer element (handle)
     dest   - rank of destination (integer)
     tag    - message tag (integer)
     comm   - communicator (handle)

NOTES
     This send is provided as a convenience function; it allows the user to send
     messages  without	worring  about where they are buffered (because the user
     must have provided buffer space with MPI_Buffer_attach ).

     In deciding how much buffer space to allocate,  remember  that  the  buffer
     space  is	not available for reuse by subsequent MPI_Bsend s unless you are
     certain that the message has been received (not just that	it  should  have
     been  received).	For  example,  this code does not allocate enough buffer
     space
     MPI_Buffer_attach(b, n*sizeof(double) + MPI_BSEND_OVERHEAD);
     for (i=0; i<m; i++) {
     MPI_Bsend(buf, n, MPI_DOUBLE, ...);
     }

     because only enough buffer space is provided for a  single  send,	and  the
     loop  may	start  a second MPI_Bsend before the first is done making use of
     the buffer.

     In C, you can force the messages to be delivered by
     MPI_Buffer_detach(&b, &n);
     MPI_Buffer_attach(b, n);

     (The MPI_Buffer_detach will not complete until all  buffered  messages  are
     delivered.)

THREAD AND INTERRUPT SAFETY
     This  routine  is	thread-safe.  This means that this routine may be safely
     used by multiple threads without the  need  for  any  user-provided  thread
     locks.  However, the routine is not interrupt safe.  Typically, this is due
     to  the use of memory allocation routines such as malloc or other non-MPICH
     runtime routines that are themselves not interrupt-safe.

NOTES FOR FORTRAN
     All MPI routines in Fortran (except for MPI_WTIME and MPI_WTICK )	have  an
     additional argument ierr at the end of the argument list.	ierr is an inte-
     ger  and  has the same meaning as the return value of the routine in C.  In
     Fortran, MPI routines are subroutines, and are invoked with the call state-
     ment.

     All MPI objects (e.g., MPI_Datatype , MPI_Comm ) are  of  type  INTEGER  in
     Fortran.

ERRORS
     All MPI routines (except MPI_Wtime and MPI_Wtick ) return an error value; C
     routines  as the value of the function and Fortran routines in the last ar-
     gument.  Before the value is returned, the current  MPI  error  handler  is
     called.  By default, this error handler aborts the MPI job.  The error han-
     dler  may	be  changed  with  MPI_Comm_set_errhandler  (for communicators),
     MPI_File_set_errhandler (for files), and  MPI_Win_set_errhandler  (for  RMA
     windows).	 The MPI-1 routine MPI_Errhandler_set may be used but its use is
     deprecated.  The predefined error handler MPI_ERRORS_RETURN may be used  to
     cause  error  values to be returned.  Note that MPI does not guarantee that
     an MPI program can continue past an  error;  however,  MPI  implementations
     will attempt to continue whenever possible.

     MPI_SUCCESS
	    - No error; MPI routine completed successfully.
     MPI_ERR_BUFFER
	    -  Invalid	buffer	pointer.  Usually a null buffer where one is not
	    valid.
     MPI_ERR_COMM
	    - Invalid communicator.  A common error is to use a null  communica-
	    tor in a call (not even allowed in MPI_Comm_rank ).
     MPI_ERR_COUNT
	    -  Invalid	count argument.  Count arguments must be non-negative; a
	    count of zero is often valid.
     MPI_ERR_RANK
	    - Invalid source or destination rank.  Ranks must  be  between  zero
	    and  the  size  of	the communicator minus one; ranks in a receive (
	    MPI_Recv  ,  MPI_Irecv  ,  MPI_Sendrecv  ,	 etc.)	 may   also   be
	    MPI_ANY_SOURCE .

     MPI_ERR_TAG
	    -  Invalid	tag  argument.	Tags must be non-negative; tags in a re-
	    ceive ( MPI_Recv , MPI_Irecv , MPI_Sendrecv  ,  etc.)  may	also  be
	    MPI_ANY_TAG  .   The  largest tag value is available through the the
	    attribute MPI_TAG_UB .

     MPI_ERR_TYPE
	    - Invalid datatype argument.  Additionally, this error can occur  if
	    an uncommitted MPI_Datatype (see MPI_Type_commit ) is used in a com-
	    munication call.
     MPI_ERR_OTHER
	    -  Other  error;  use MPI_Error_string to get more information about
	    this error code.

SEE ALSO
     MPI_Buffer_attach, MPI_Ibsend, MPI_Bsend_init

				    4/10/2026			    MPI_Bsend(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=MPI_Bsend&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help