MPI_REQUEST_GET_STATUS(3)

πŸ’… MPI_REQUEST_GET_STATUS(3) β€” the Open MPI girlies' guide ✨

okay so bestie, welcome to MPI_REQUEST_GET_STATUS(3), from your friends at Open MPI 🫢 this one is genuinely iconic β€” it lets you peek at a request without, like, actually freeing it. main character energy: looking respectfully πŸ‘€


🌸 NAME 🌸

MPI_Request_get_status β€” access information associated with a request without freeing the request. no cap, that's the whole vibe. it's giving "look but don't touch" πŸ’…


✨ SYNTAX ✨

πŸŽ€ C Syntax

   C Syntax
          #include <mpi.h>

          int MPI_Request_get_status(MPI_Request request, int *flag, MPI_Status *status)

πŸŽ€ Fortran Syntax

   Fortran Syntax
          USE MPI
          ! or the older form: INCLUDE 'mpif.h'
          MPI_REQUEST_GET_STATUS(REQUEST, FLAG, STATUS, IERROR)
               INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR
               LOGICAL FLAG

πŸŽ€ Fortran 2008 Syntax

   Fortran 2008 Syntax
          USE mpi_f08
          MPI_Request_get_status(request, flag, status, ierror)
               TYPE(MPI_Request), INTENT(IN) :: request
               LOGICAL, INTENT(OUT) :: flag
               TYPE(MPI_Status) :: status
               INTEGER, OPTIONAL, INTENT(OUT) :: ierror

like, three flavors, all slay πŸ’–


🌈 INPUT PARAMETER 🌈

  • request β€” the communication request (handle). it's the thing you're checking on, bestie. the main character of this whole operation πŸ‘‘

πŸ¦‹ OUTPUT PARAMETERS πŸ¦‹

  • flag β€” boolean flag, same as from MPI_Test (logical). so like, true = it's done, false = not yet, we wait πŸ™ˆ
  • status β€” the MPI_Status object, but only if flag is true (status). no flag, no status, that's the deal ✨

πŸ’œ DESCRIPTION πŸ’œ

okay so here's the tea β˜•: MPI_Request_get_status sets flag = true if the operation is complete, or sets flag = false if it is not complete. simple as that, periodt.

if the operation is complete, it returns the request status in status. and here's the key part, don't miss it β€” it does not deallocate or deactivate the request. so a subsequent call to test, wait, or free should be executed with that request. like, you peeked, you didn't consume it, so you still gotta deal with it later πŸ’…πŸ”₯

if your application does not need to examine the status field, you can save resources by using the predefined constant MPI_STATUS_IGNORE as a special value for the status argument. lowkey a glow-up for your memory budget πŸŽ€


πŸ’€ ERRORS πŸ’€

almost all MPI routines return an error value β€” C routines as the return result of the function, and Fortran routines in the last argument. classic, iykyk πŸ™ƒ

before the error value is returned, the current MPI error handler associated with the communication object (e.g., communicator, window, file) is called. and if there's no communication object associated with the MPI call, then the call is considered attached to MPI_COMM_SELF and will call the associated MPI error handler. 😭

when MPI_COMM_SELF is not initialized β€” i.e., before MPI_Init/MPI_Init_thread, after MPI_Finalize, or when using the Sessions Model exclusively β€” the error raises the initial error handler. the initial error handler can be changed by calling MPI_Comm_set_errhandler on MPI_COMM_SELF when using the World model, or the mpi_initial_errhandler CLI argument to mpiexec, or the info key to MPI_Comm_spawn/MPI_Comm_spawn_multiple. ngl that's a lot of words but every one of them matters 🧚

if no other appropriate error handler has been set, then the MPI_ERRORS_RETURN error handler is called for MPI I/O functions, and the MPI_ERRORS_ABORT error handler is called for all other MPI functions.

Open MPI includes three predefined error handlers that can be used β€” here they are, all three, no skips:

  • MPI_ERRORS_ARE_FATAL β€” causes the program to abort all connected MPI processes. πŸ’€ dramatic but effective
  • MPI_ERRORS_ABORT β€” an error handler that can be invoked on a communicator, window, file, or session. when called on a communicator, it acts as if MPI_Abort was called on that communicator. if called on a window or file, acts as if MPI_Abort was called on a communicator containing the group of processes in the corresponding window or file. if called on a session, aborts only the local process. πŸ‘‘
  • MPI_ERRORS_RETURN β€” returns an error code to the application. the chill one, honestly πŸ“

MPI applications can also implement their own error handlers by calling β€” yes, all four, here we go:

  • MPI_Comm_create_errhandler then MPI_Comm_set_errhandler
  • MPI_File_create_errhandler then MPI_File_set_errhandler
  • MPI_Session_create_errhandler then MPI_Session_set_errhandler or at MPI_Session_init
  • MPI_Win_create_errhandler then MPI_Win_set_errhandler
⚠️ note that MPI does not guarantee that an MPI program can continue past an error. fr fr, important. don't assume you can just keep going after a failure 😭

see the MPI man page for a full list of MPI error codes. and see the Error Handling section of the MPI-3.1 standard for more information. the receipts are all there πŸ“šβœ¨


2003-2026, The Open MPI Community


and that's the whole thing, bestie πŸŽ€ you understood it, you ate, no crumbs. this page dropped on Sep 11, 2026, courtesy of the Open MPI crew, and it's the MPI_REQUEST_GET_STATUS(3) page β€” go forth and check your requests without freeing them πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from