Blocks until all operations in the request array complete. All requests are freed after completion.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(request_t), | intent(inout) | :: | requests(:) | |||
| type(MPI_Status), | intent(out), | optional | :: | statuses(:) |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=int32), | private | :: | count | ||||
| integer(kind=int32), | private | :: | i | ||||
| integer(kind=int32), | private | :: | ierr | ||||
| type(MPI_Request), | private, | allocatable | :: | mpi_requests(:) | |||
| type(MPI_Status), | private, | allocatable | :: | temp_statuses(:) |
subroutine request_waitall(requests, statuses) !! Blocks until all operations in the request array complete. !! All requests are freed after completion. type(request_t), intent(inout) :: requests(:) type(MPI_Status), intent(out), optional :: statuses(:) type(MPI_Request), allocatable :: mpi_requests(:) type(MPI_Status), allocatable :: temp_statuses(:) integer(int32) :: i, count, ierr count = size(requests) allocate (mpi_requests(count)) do i = 1, count if (requests(i)%is_valid) then mpi_requests(i) = requests(i)%m_request else mpi_requests(i) = MPI_REQUEST_NULL end if end do if (present(statuses)) then call MPI_Waitall(count, mpi_requests, statuses, ierr) else allocate (temp_statuses(count)) call MPI_Waitall(count, mpi_requests, temp_statuses, ierr) end if do i = 1, count call requests(i)%free() end do end subroutine request_waitall