Changeset 1533 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp
- Timestamp:
- 06/08/18 19:34:51 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp
r1520 r1533 9 9 #include <mpi.h> 10 10 #include "ep_declaration.hpp" 11 #include "ep_mpi.hpp" 11 12 12 13 using namespace std; … … 18 19 { 19 20 Debug("MPI_Test with EP"); 20 21 *flag = false;22 21 23 24 if((*request)->type == 1) // isend 22 if(*request==0) return *flag=true; 23 24 if((*request)->type !=1 && (*request)->type !=2 && (*request)->type !=3) 25 25 { 26 ::MPI_Status mpi_status; 27 ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 28 29 if(*flag) 30 { 31 status->mpi_status = new ::MPI_Status(mpi_status); 32 status->ep_src = (*request)->ep_src; 33 status->ep_tag = (*request)->ep_tag; 34 status->ep_datatype = (*request)->ep_datatype; 35 (*request)->state = 2; 36 delete (*request)->mpi_request; 37 delete *request; 38 } 39 40 return 0; 26 printf("MPI_Test : Error in request type\n"); 27 28 exit(1); 41 29 } 42 30 43 31 if((*request)->type == 2) // irecv message not probed 44 32 { 45 Request_Check(); 33 *flag = false; 34 return Request_Check(); 35 } 36 37 else //(*request)->type == 1 || (*request)->type == 3 // isend or imrecv 38 { 46 39 47 #pragma omp flush48 49 }50 51 if((*request)->type == 3) // imrecv52 {53 if((*request)->state == 2)54 {55 return *flag = true;56 }57 40 ::MPI_Status mpi_status; 58 41 59 ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status);60 42 43 ::MPI_Test(to_mpi_request_ptr(*request), flag, &mpi_status); 61 44 62 if(*flag) 45 if(*flag) 63 46 { 64 status->mpi_status = new ::MPI_Status(mpi_status); 47 48 status->mpi_status=new ::MPI_Status(mpi_status); 65 49 status->ep_src = (*request)->ep_src; 66 50 status->ep_tag = (*request)->ep_tag; … … 68 52 69 53 (*request)->state = 2; 70 54 55 memcheck("delete "<< (*request)->mpi_request << " : in ep_lib::MPI_Test, delete (*request)->mpi_request"); 71 56 delete (*request)->mpi_request; 72 57 delete *request; 73 //int count; 74 //MPI_Get_count(status, request->ep_datatype, &count); 75 //check_sum_recv(request->buf, count, request->ep_datatype, request->ep_src, request->ep_tag, request->comm, 2); 76 } 77 78 return Request_Check(); 58 *request=0; 59 } 79 60 } 61 62 return Request_Check(); 80 63 81 64 } … … 85 68 { 86 69 Debug("MPI_Testall with EP"); 87 70 *flag = false; 71 72 int rank = array_of_requests[0]->comm->ep_comm_ptr->size_rank_info[0].first; 73 74 for(int i=0; i<count; i++) 75 { 76 if(array_of_requests[i]->type == 2) 77 { 78 *flag=false; 79 return Request_Check(); 80 } 81 } 82 88 83 ::MPI_Request* mpi_request = new ::MPI_Request[count]; 89 84 ::MPI_Status* mpi_status = new ::MPI_Status[count]; … … 101 96 for(int i=0; i<count; i++) 102 97 { 103 array_of_statuses[i].mpi_status = &mpi_status[i];98 array_of_statuses[i].mpi_status = new ::MPI_Status(mpi_status[i]); 104 99 array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 105 100 array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; … … 108 103 array_of_requests[i]->state = 2; 109 104 110 memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_ Waitall, array_of_requests["<<i<<"]->mpi_request");105 memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_Testall, array_of_requests["<<i<<"]->mpi_request"); 111 106 delete array_of_requests[i]->mpi_request; 112 delete array_of_requests[i]; 107 delete array_of_requests[i]; 108 array_of_requests[i]=0; 109 113 110 } 114 111 115 112 } 113 114 return Request_Check(); 116 115 117 return Request_Check();118 116 } 119 117
Note: See TracChangeset
for help on using the changeset viewer.