MPI_WAITALL(3)

πŸ’– MPI_WAITALL(3) β€” Open MPI πŸ’–

okay bestie, welcome to the Open MPI manual page for MPI_Waitall. this one's a baddie. it literally waits for all your communication to finish. she's patient, she's thorough, she's the friend who makes sure everyone's got a ride home before the party ends. let's get into it ✨


🌸 NAME 🌸

MPI_Waitall β€” Waits for all given communications to complete. all of them. every single one. she does not leave anyone behind, fr fr.


✨ SYNTAX ✨

πŸ’… C Syntax

#include <mpi.h>

int MPI_Waitall(int count, MPI_Request array_of_requests[],
     MPI_Status *array_of_statuses)

πŸŽ€ Fortran Syntax

USE MPI
! or the older form: INCLUDE 'mpif.h'
MPI_WAITALL(COUNT, ARRAY_OF_REQUESTS, ARRAY_OF_STATUSES, IERROR)
     INTEGER COUNT, ARRAY_OF_REQUESTS(*)
     INTEGER ARRAY_OF_STATUSES(MPI_STATUS_SIZE,*), IERROR

πŸ¦‹ Fortran 2008 Syntax

USE mpi_f08
MPI_Waitall(count, array_of_requests, array_of_statuses, ierror)
     INTEGER, INTENT(IN) :: count
     TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count)
     TYPE(MPI_Status) :: array_of_statuses(*)
     INTEGER, OPTIONAL, INTENT(OUT) :: ierror

πŸ“ INPUT PARAMETERS πŸ“

  • count β€” lists length (integer). basically: how many requests are we talking about here. the headcount for the group chat.
  • array_of_requests β€” array of requests (array of handles). this is the lineup of pending operations, bestie. the roster.

πŸ’œ OUTPUT PARAMETERS πŸ’œ

  • array_of_statuses β€” array of status objects (array of status). it's giving receipts. it's giving "here's how everyone did."
  • ierror β€” Fortran only: error status (integer).

πŸ‘‘ DESCRIPTION πŸ‘‘

okay so here's the whole vibe. MPI_Waitall blocks until every single communication operation attached to the active handles in your list has completed, and then it hands you back the status of all those operations. and yes β€” that includes the case where no handle in the list is active. she still shows up. she still does her job. icon behaviour, honestly. πŸ’…

Both arrays have the same number of valid entries. The ith entry in array_of_statuses gets set to the return status of the ith operation. matchy matchy. adorable.

Requests that were created by nonblocking communication operations are deallocated, and the corresponding handles in the array get set to MPI_REQUEST_NULL. also, your list is allowed to contain null or inactive handles β€” no judgement β€” and the call just sets the status of each of those entries to empty. clean slate energy. ✨

The error-free execution of MPI_Waitall(count, array_of_requests, array_of_statuses) has the same effect as running MPI_Wait(&array_of_request[i], &array_of_statuses[i]) for i=0,…,count-1, in some arbitrary order. and MPI_Waitall with an array of length 1 is equivalent to MPI_Wait. one request? you're just doing MPI_Wait with extra steps, bestie. it's fine. we support you. 🫢

Now β€” the serious part. listen up. When one or more of the communications completed by a call to MPI_Waitall fail, it is desirable to return specific information on each communication. In that case the function will return the error code MPI_ERR_IN_STATUS and will set the error field of each status to a specific error code. That code will be:

  • MPI_SUCCESS if the specific communication completed,
  • another specific error code if it failed,
  • or it can be MPI_ERR_PENDING if it has neither failed nor completed.

MPI_Waitall will return MPI_SUCCESS if no request had an error, or it will return another error code if it failed for other reasons (such as invalid arguments). In those cases, it will not update the error fields of the statuses. noted. don't @ me.

And if your application does not need to examine the array_of_statuses field, you can save resources by using the predefined constant MPI_STATUSES_IGNORE as a special value for the array_of_statuses argument. save those resources, queen. πŸ’Έ


😭 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 Fortran. always the last argument.)

Before the error value is returned, the current MPI error handler associated with the communication object (e.g., communicator, window, file) is called. If no communication object is 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 info key to MPI_Comm_spawn/MPI_Comm_spawn_multiple. 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:

  • MPI_ERRORS_ARE_FATAL β€” Causes the program to abort all connected MPI processes. everybody's going down. dramatic. love that for us. πŸ’€
  • 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. scalable chaos.
  • MPI_ERRORS_RETURN β€” Returns an error code to the application. polite. hands you the L and lets you deal with it.

MPI applications can also implement their own error handlers by calling:

  • 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. we said what we said.

See the MPI man page for a full list of MPI error codes.

See the Error Handling section of the MPI-3.1 standard for more information.

For each invocation of MPI_Waitall, if one or more requests generate an MPI error, only the first MPI request that caused an error will be passed to its corresponding error handler. No other error handlers will be invoked (even if multiple requests generated errors). one handler per call. that's the rule. However, all requests that generate an error will have a relevant error code set in the corresponding status.MPI_ERROR field (unless MPI_STATUSES_IGNORE was used). so the receipts are still there even if nobody got called about it.

If the invoked error handler allows MPI_Waitall to return to the caller, the value MPI_ERR_IN_STATUS will be returned in the C and Fortran bindings.

🧚 See also:

  • MPI_Comm_set_errhandler
  • MPI_File_set_errhandler
  • MPI_Test
  • MPI_Testall
  • MPI_Testany
  • MPI_Testsome
  • MPI_Wait
  • MPI_Waitany
  • MPI_Waitsome
  • MPI_Win_set_errhandler

2003-2026, The Open MPI Community


okay that's the whole page, bestie!! you ate that. πŸ’–βœ¨πŸ‘‘ go forth and wait for all your communications, in the correct order, with the correct error handling. main character energy only.

this was MPI_WAITALL(3) from Open MPI`, dated Sep 10, 2026 β€” mwah, mwah, no notes, periodt. πŸŽ€πŸ¦‹πŸ’…

πŸ“¦ where this page comes from