# Name `MPI_Bsend` - Basic send with user-specified buffering. # Syntax ## C Syntax ```c #include int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) ``` ## Fortran Syntax ```fortran USE MPI ! or the older form: INCLUDE 'mpif.h' MPI_BSEND(BUF, COUNT,DATATYPE, DEST, TAG, COMM, IERROR) BUF(*) INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR ``` ## Fortran 2008 Syntax ```fortran USE mpi_f08 MPI_Bsend(buf, count, datatype, dest, tag, comm, ierror) TYPE(*), DIMENSION(..), INTENT(IN) :: buf INTEGER, INTENT(IN) :: count, dest, tag TYPE(MPI_Datatype), INTENT(IN) :: datatype TYPE(MPI_Comm), INTENT(IN) :: comm INTEGER, OPTIONAL, INTENT(OUT) :: ierror ``` # Input Parameters * `buf` : Initial address of send buffer (choice). * `count` : Number of entries in send buffer (nonnegative integer). * `datatype` : Datatype of each send buffer element (handle). * `dest` : Rank of destination (integer). * `tag` : Message tag (integer). * `comm` : Communicator (handle). # Output Parameters * `IERROR` : Fortran only: Error status (integer). # Description `MPI_Bsend` performs a buffered-mode, blocking send. # Notes This send is provided as a convenience function; it allows the user to send messages without worrying 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: ```c MPI_Buffer_attach( b, n*sizeof(double) + MPI_BSEND_OVERHEAD ); for (i=0; i