/*! \file ep_test.cpp \since 2 may 2016 \brief Definitions of MPI test function: MPI_Test, MPI_Testsome, MPI_Testany, MPI_Testall */ #include "ep_lib.hpp" #include #include "ep_declaration.hpp" using namespace std; namespace ep_lib { int MPI_Test(MPI_Request *request, int *flag, MPI_Status *status) { Debug("MPI_Test with EP"); *flag = false; if((*request)->type == 1) // isend { ::MPI_Status mpi_status; ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); if(*flag) { status->mpi_status = new ::MPI_Status(mpi_status); status->ep_src = (*request)->ep_src; status->ep_tag = (*request)->ep_tag; status->ep_datatype = (*request)->ep_datatype; //delete request->mpi_request; } return 0; } if((*request)->type == 2) // irecv message not probed { Request_Check(); #pragma omp flush } if((*request)->type == 3) // imrecv { ::MPI_Status mpi_status; ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); if(*flag) { status->mpi_status = new ::MPI_Status(mpi_status); status->ep_src = (*request)->ep_src; status->ep_tag = (*request)->ep_tag; status->ep_datatype = (*request)->ep_datatype; //delete request->mpi_request; //int count; //MPI_Get_count(status, request->ep_datatype, &count); //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); } return 0; } } int MPI_Testall(int count, MPI_Request *array_of_requests, int *flag, MPI_Status *array_of_statuses) { Debug("MPI_Testall with EP"); *flag = true; int i=0; while(*flag && i