MPI_Bcast_init(3)

✨ MPI_Bcast_init(3) β€” the MPI girlies' guide ✨

okay bestie, gather round, we're doing a persistent broadcast request and honestly? it's giving main character energy. this page lives in the MPI manual (section 3, the library calls, you know the vibe) πŸ’…


🌸 NAME 🌸

MPI_Bcast_init β€” creates a persistent request for broadcast

like, you know how MPI_Bcast is a one-and-done situation? this is the committed relationship version. it makes you a persistent request. obsessed. 🫢


πŸŽ€ SYNOPSIS πŸŽ€

int MPI_Bcast_init(void *buffer, int count, MPI_Datatype datatype, int root,
MPI_Comm comm, MPI_Info info, MPI_Request *request)
int MPI_Bcast_init_c(void *buffer, MPI_Count count, MPI_Datatype datatype,
int root, MPI_Comm comm, MPI_Info info,
MPI_Request *request)

two flavours, no cap β€” pick the one that matches your count type and slay πŸ’–


πŸ¦‹ INPUT PARAMETERS πŸ¦‹

  • count β€” number of entries in buffer. must be a non-negative integer, so like, zero or up. no negatives, we don't do that here.
  • datatype β€” data type of buffer (a handle).
  • root β€” rank of broadcast root (an integer). the one everyone's listening to, the it-girl of the call πŸ‘‘
  • comm β€” communicator (handle).
  • info β€” info argument (handle).

🌈 INPUT/OUTPUT PARAMETERS 🌈

  • buffer β€” starting address of buffer (choice).

yes it's in the in/out section, yes that's on purpose, the broadcast reads from it at the root and writes into it everywhere else, iykyk πŸ’œ


⭐ OUTPUT PARAMETERS ⭐

  • request β€” communication request (handle). your shiny new persistent request, take care of it πŸŽ€

πŸ’… THREAD AND INTERRUPT SAFETY πŸ’…

this routine is thread-safe. meaning: multiple threads can use it at the same time, and you do not need to bring your own thread locks. we love a low-maintenance icon.

however β€” and this is the important part β€” 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. so like, mind the signals, okay? πŸ™ˆ


🧚 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 integer 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 statement.
  • All MPI objects (e.g., MPI_Datatype, MPI_Comm) are of type INTEGER in Fortran.

fr fr, Fortran besties get an extra lil argument and everything's just INTEGER. iconic behaviour. ✨


πŸ”₯ ERRORS πŸ”₯

okay so this is the part where we get real. 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 argument. Before the value is returned, the current MPI error handler is called.

⚠️ By default, this error handler aborts the MPI job. like, the whole thing. gone. dramatic but true 😭

The error handler 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 (bestie... don't).

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.

here's the error roster, no skipping:

  • MPI_SUCCESS β€” No error; MPI routine completed successfully. the dream. green flags only 🌸
  • MPI_ERR_ARG β€” Invalid argument. Some argument is invalid and is not identified by a specific error class (e.g., MPI_ERR_RANK).
  • 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 communicator 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_INFO β€” Invalid Info.
  • MPI_ERR_TYPE β€” Invalid datatype argument. Additionally, this error can occur if an uncommitted MPI_Datatype (see MPI_Type_commit) is used in a communication call.
  • MPI_ERR_OTHER β€” Other error; use MPI_Error_string to get more information about this error code.

and that's the whole page, bestie, you ate that πŸ“ this cutie is from the MPI manual, MPI_Bcast_init(3), dated 4/10/2026 β€” go forth and broadcast persistently, mwah πŸ’–βœ¨πŸ‘‘

πŸ“¦ where this page comes from