int MPIR_Test_impl(MPIR_Request * request_ptr, int *flag, MPI_Status * status) { int mpi_errno = MPI_SUCCESS; mpi_errno = MPID_Progress_test(); if (mpi_errno) MPIR_ERR_POP(mpi_errno); if (MPIR_Request_has_poll_fn(request_ptr)) { mpi_errno = MPIR_Grequest_poll(request_ptr, status); if (mpi_errno) MPIR_ERR_POP(mpi_errno); } if (MPIR_Request_is_complete(request_ptr)) *flag = TRUE; else *flag = FALSE; fn_exit: return mpi_errno; fn_fail: goto fn_exit; }
int MPIR_Testsome_impl(int incount, MPIR_Request * request_ptrs[], int *outcount, int array_of_indices[], MPI_Status array_of_statuses[]) { int i; int n_inactive; int mpi_errno = MPI_SUCCESS; mpi_errno = MPID_Progress_test(); /* --BEGIN ERROR HANDLING-- */ if (mpi_errno != MPI_SUCCESS) MPIR_ERR_POP(mpi_errno); /* --END ERROR HANDLING-- */ n_inactive = 0; *outcount = 0; for (i = 0; i < incount; i++) { if ((i + 1) % MPIR_CVAR_REQUEST_POLL_FREQ == 0) { mpi_errno = MPID_Progress_test(); if (mpi_errno) MPIR_ERR_POP(mpi_errno); } if (request_ptrs[i] != NULL && MPIR_Request_has_poll_fn(request_ptrs[i])) { mpi_errno = MPIR_Grequest_poll(request_ptrs[i], &array_of_statuses[i]); if (mpi_errno != MPI_SUCCESS) goto fn_fail; } if (!MPIR_Request_is_active(request_ptrs[i])) { n_inactive += 1; } else if (MPIR_Request_is_complete(request_ptrs[i])) { array_of_indices[*outcount] = i; *outcount += 1; } } if (n_inactive == incount) *outcount = MPI_UNDEFINED; fn_exit: return mpi_errno; fn_fail: goto fn_exit; }
int MPIR_Testany_impl(int count, MPIR_Request * request_ptrs[], int *indx, int *flag, MPI_Status * status) { int i; int n_inactive = 0; int mpi_errno = MPI_SUCCESS; mpi_errno = MPID_Progress_test(); /* --BEGIN ERROR HANDLING-- */ if (mpi_errno) MPIR_ERR_POP(mpi_errno); /* --END ERROR HANDLING-- */ for (i = 0; i < count; i++) { if ((i + 1) % MPIR_CVAR_REQUEST_POLL_FREQ == 0) { mpi_errno = MPID_Progress_test(); if (mpi_errno) MPIR_ERR_POP(mpi_errno); } if (request_ptrs[i] != NULL && MPIR_Request_has_poll_fn(request_ptrs[i])) { mpi_errno = MPIR_Grequest_poll(request_ptrs[i], status); if (mpi_errno != MPI_SUCCESS) goto fn_fail; } if (!MPIR_Request_is_active(request_ptrs[i])) { n_inactive += 1; } else if (MPIR_Request_is_complete(request_ptrs[i])) { *flag = TRUE; *indx = i; goto fn_exit; } } if (n_inactive == count) { *flag = TRUE; *indx = MPI_UNDEFINED; } fn_exit: return mpi_errno; fn_fail: goto fn_exit; }