Changeset 1533
- Timestamp:
- 06/08/18 19:34:51 (7 years ago)
- Location:
- XIOS/dev/branch_openmp
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/bld.cfg
r1520 r1533 32 32 #src::src_ep_dev $PWD/extern/ep_dev 33 33 bld::lib xios 34 bld::target libxios.a34 #bld::target libxios.a 35 35 #bld::target generate_fortran_interface.exe 36 bld::target xios_server.exe36 #bld::target xios_server.exe 37 37 #bld::target test_regular.exe 38 38 #bld::target test_expand_domain.exe … … 40 40 #bld::target test_unstruct_complete.exe 41 41 bld::target test_omp.exe 42 bld::target test_complete_omp.exe42 #bld::target test_complete_omp.exe 43 43 #bld::target test_remap.exe 44 44 #bld::target test_remap_ref.exe 45 bld::target test_remap_omp.exe45 #bld::target test_remap_omp.exe 46 46 #bld::target test_unstruct_omp.exe 47 47 #bld::target test_netcdf_omp.exe … … 52 52 #bld::target test_connectivity_expand.exe 53 53 #bld::target toy_cmip6.exe 54 bld::target toy_cmip6_omp.exe54 #bld::target toy_cmip6_omp.exe 55 55 bld::exe_dep 56 56 -
XIOS/dev/branch_openmp/extern/ep_dev/ep_intercomm.cpp
r1527 r1533 296 296 297 297 298 int remote_num_ep ;298 int remote_num_ep = 0; 299 299 for(int i=0; i<remote_mpi_size; i++) 300 300 { -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_free.cpp
r1520 r1533 118 118 int newcomm_num_ep = (*comm)->ep_comm_ptr->intercomm->size_rank_info[1].second; 119 119 120 return 0; 120 121 MPI_Barrier(*comm); 121 122 -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_init.cpp
r1520 r1533 28 28 } 29 29 } 30 31 int EP_group_init() 32 { 33 34 } 30 35 31 36 int MPI_Initialized(int *flag) -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_lib.hpp
r1520 r1533 82 82 83 83 int Request_Check(); 84 85 void show_EP_PendingRequests(std::list< ep_lib::MPI_Request* > * EP_PendingRequest); 84 86 85 87 int test_sendrecv(MPI_Comm comm); 88 89 int EP_group_init(); 86 90 87 91 -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_message.cpp
r1520 r1533 23 23 24 24 if(EP_PendingRequests->size() == 0) return 0; 25 26 show_EP_PendingRequests(EP_PendingRequests); 25 27 26 28 MPI_Status status; … … 30 32 std::list<MPI_Request* >::iterator it; 31 33 34 // show_EP_PendingRequests(EP_PendingRequests); 35 32 36 33 37 for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); it++) 34 38 { 39 if(*(*it) == 0) 40 { 41 EP_PendingRequests->erase(it); 42 43 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 44 it = EP_PendingRequests->begin(); 45 continue; 46 } 47 48 if((*(*it))->state == 2) 49 { 50 EP_PendingRequests->erase(it); 51 52 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 53 it = EP_PendingRequests->begin(); 54 continue; 55 } 56 35 57 Message_Check(((*(*it))->comm)); 36 58 } 59 60 37 61 38 62 39 63 for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); ) 40 64 { 65 if(*(*it) == 0) 66 { 67 EP_PendingRequests->erase(it); 68 69 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 70 it = EP_PendingRequests->begin(); 71 continue; 72 } 73 74 if((*(*it))->state == 2) 75 { 76 EP_PendingRequests->erase(it); 77 78 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 79 it = EP_PendingRequests->begin(); 80 continue; 81 } 82 41 83 if((*(*it))->state == 0) 42 84 { … … 81 123 } 82 124 83 if((*(*it))->state == 2) 84 { 85 int ep_rank = ((*(*it))->comm)->ep_comm_ptr->size_rank_info[0].first; 86 memcheck("delete "<< (*(*it)) <<" : in ep_lib::Request_Check, delete (*(*it))"); 87 88 89 int world_rank; 90 MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 91 if(world_rank==2) 92 { 93 printf("ep %d erased one pending request %p\n", world_rank,*(*it)); 94 } 95 96 EP_PendingRequests->erase(it); 97 98 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 99 it = EP_PendingRequests->begin(); 100 continue; 101 } 102 else it++; 103 } 125 it++; 126 } 127 128 show_EP_PendingRequests(EP_PendingRequests); 104 129 } 105 130 … … 178 203 return MPI_SUCCESS; 179 204 } 180 181 182 183 184 185 205 186 206 … … 249 269 return MPI_SUCCESS; 250 270 } 271 272 273 274 void show_EP_PendingRequests(std::list< ep_lib::MPI_Request* > * EP_PendingRequest) 275 { 276 #ifdef _showinfo 277 std::list<MPI_Request* >::iterator it; 278 279 int i=0; 280 281 for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); it++) 282 { 283 if(*(*it) == 0) 284 { 285 EP_PendingRequests->erase(it); 286 287 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 288 it = EP_PendingRequests->begin(); 289 continue; 290 } 291 292 if((*(*it))->state == 2) 293 { 294 EP_PendingRequests->erase(it); 295 296 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 297 it = EP_PendingRequests->begin(); 298 continue; 299 } 300 301 if((*(*it))->ep_src>6) 302 printf("EP_PendingRequests[%d] : ep_src = %d, ep_tag = %d, type = %d, state = %d, comm = %d\n", i, (*(*it))->ep_src, (*(*it))->ep_tag, (*(*it))->type, (*(*it))->state, to_mpi_comm(((*(*it))->comm)->mpi_comm)); 303 i++; 304 } 305 #endif 306 307 } 251 308 252 309 -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_recv.cpp
r1520 r1533 65 65 EP_PendingRequests->push_back(request); 66 66 67 int world_rank; 68 MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 69 if(world_rank==2) 70 { 71 printf("ep %d inserted one pending request %p\n", world_rank, *request); 72 } 67 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 73 68 74 memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size());69 show_EP_PendingRequests(EP_PendingRequests); 75 70 76 71 #ifdef _showinfo -
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 -
XIOS/dev/branch_openmp/extern/src_ep_dev/ep_wait.cpp
r1520 r1533 25 25 if((*request)->type !=1 && (*request)->type !=2 && (*request)->type !=3) 26 26 { 27 printf(" Error in request type\n");27 printf("MPI_Wait : Error in request type\n"); 28 28 29 29 exit(1); … … 32 32 while((*request)->type == 2) Request_Check(); 33 33 34 ::MPI_Wait(to_mpi_request_ptr(*request), to_mpi_status_ptr(status)); 34 ::MPI_Status mpi_status; 35 36 ::MPI_Wait(to_mpi_request_ptr(*request), &mpi_status); 35 37 36 38 status->mpi_status = new ::MPI_Status(mpi_status); 37 39 status->ep_src = (*request)->ep_src; 38 40 status->ep_tag = (*request)->ep_tag; … … 42 44 43 45 memcheck("delete "<< (*request)->mpi_request << " : in ep_lib::MPI_Wait, delete (*request)->mpi_request"); 46 44 47 delete (*request)->mpi_request; 45 48 delete *request; 49 *request=0; 46 50 47 48 51 return Request_Check(); 49 52 … … 87 90 for(int i=0; i<count; i++) 88 91 { 89 array_of_statuses[i].mpi_status = &mpi_status[i];92 array_of_statuses[i].mpi_status = new ::MPI_Status(mpi_status[i]); 90 93 array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 91 94 array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; … … 97 100 delete array_of_requests[i]->mpi_request; 98 101 delete array_of_requests[i]; 102 array_of_requests[i] = 0; 99 103 } 100 104 -
XIOS/dev/branch_openmp/src/cxios.cpp
r1520 r1533 107 107 MPI_Comm *ep_comm; 108 108 MPI_Comm_create_endpoints(MPI_COMM_WORLD->mpi_comm, num_ep, info, ep_comm); // servers should reach here too. 109 passage = ep_comm; 109 passage = ep_comm; 110 EP_group_init(); 111 //::MPI_Comm_group(to_mpi_comm(MPI_COMM_WORLD->mpi_comm), &MPI_GROUP_WORLD); 110 112 } 111 113 -
XIOS/dev/branch_openmp/src/event_scheduler.cpp
r1520 r1533 140 140 if (received) 141 141 { 142 printf("probed a message coming from parent\n"),143 142 recvRequest=new SPendingRequest ; 144 143 MPI_Irecv(recvRequest->buffer, 3, MPI_UNSIGNED_LONG, -2, 1, communicator, &(recvRequest->request)) ; -
XIOS/dev/branch_openmp/src/server.cpp
r1520 r1533 658 658 MPI_Get_count(&status,MPI_CHAR,&(counts.back())) ; 659 659 buffers.push_back(new char[counts.back()]) ; 660 //requests.push_back(request); 661 //MPI_Irecv((void*)(buffers.back()),counts.back(),MPI_CHAR,root,2,intraComm,&(requests.back())) ; 662 MPI_Irecv((void*)(buffers.back()),counts.back(),MPI_CHAR,root,2,intraComm,&request) ; 660 663 requests.push_back(request); 661 MPI_Irecv((void*)(buffers.back()),counts.back(),MPI_CHAR,root,2,intraComm,&(requests.back())) ;662 664 isEventRegistered.push_back(false); 663 665 isEventQueued.push_back(false); … … 668 670 { 669 671 // (2) If context id is received, register an event 670 MPI_Test(&requests[ctxNb],&flag,&status) ;672 if(!isEventRegistered[ctxNb]) MPI_Test(&requests[ctxNb],&flag,&status) ; 671 673 if (flag==true && !isEventRegistered[ctxNb]) 672 674 {
Note: See TracChangeset
for help on using the changeset viewer.