Changeset 1520 for XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp
- Timestamp:
- 06/04/18 19:25:08 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp
r1374 r1520 22 22 23 23 24 if( request->type == 1) // isend24 if((*request)->type == 1) // isend 25 25 { 26 26 ::MPI_Status mpi_status; 27 ::MPI_Test(static_cast< ::MPI_Request*>( request->mpi_request), flag, &mpi_status);27 ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 28 28 29 29 if(*flag) 30 30 { 31 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; 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; 35 38 } 36 39 … … 38 41 } 39 42 40 if( request->type == 2) // irecv message not probed43 if((*request)->type == 2) // irecv message not probed 41 44 { 42 45 Request_Check(); … … 46 49 } 47 50 48 if( request->type == 3) // imrecv51 if((*request)->type == 3) // imrecv 49 52 { 53 if((*request)->state == 2) 54 { 55 return *flag = true; 56 } 50 57 ::MPI_Status mpi_status; 51 58 52 ::MPI_Test(static_cast< ::MPI_Request*>( request->mpi_request), flag, &mpi_status);59 ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 53 60 54 61 … … 56 63 { 57 64 status->mpi_status = new ::MPI_Status(mpi_status); 58 status->ep_src = request->ep_src; 59 status->ep_tag = request->ep_tag; 60 status->ep_datatype = request->ep_datatype; 65 status->ep_src = (*request)->ep_src; 66 status->ep_tag = (*request)->ep_tag; 67 status->ep_datatype = (*request)->ep_datatype; 68 69 (*request)->state = 2; 70 71 delete (*request)->mpi_request; 72 delete *request; 61 73 //int count; 62 74 //MPI_Get_count(status, request->ep_datatype, &count); … … 64 76 } 65 77 66 return 0;78 return Request_Check(); 67 79 } 68 80 … … 73 85 { 74 86 Debug("MPI_Testall with EP"); 75 *flag = true; 76 int i=0; 77 while(*flag && i<count ) 87 88 ::MPI_Request* mpi_request = new ::MPI_Request[count]; 89 ::MPI_Status* mpi_status = new ::MPI_Status[count]; 90 91 92 for(int i=0; i<count; i++) 78 93 { 79 MPI_Test(&array_of_requests[i], flag, &array_of_statuses[i]); 80 i++; 94 mpi_request[i] = *static_cast< ::MPI_Request*>(array_of_requests[i]->mpi_request); 81 95 } 96 97 ::MPI_Testall(count, mpi_request, flag, mpi_status); 98 99 if(*flag) 100 { 101 for(int i=0; i<count; i++) 102 { 103 array_of_statuses[i].mpi_status = &mpi_status[i]; 104 array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 105 array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; 106 array_of_statuses[i].ep_datatype = array_of_requests[i]->ep_datatype; 107 108 array_of_requests[i]->state = 2; 109 110 memcheck("delete "<< array_of_requests[i]->mpi_request <<" : in ep_lib::MPI_Waitall, array_of_requests["<<i<<"]->mpi_request"); 111 delete array_of_requests[i]->mpi_request; 112 delete array_of_requests[i]; 113 } 114 115 } 116 117 return Request_Check(); 82 118 } 83 119 84 120 85 121 } 122
Note: See TracChangeset
for help on using the changeset viewer.