Changeset 1533


Ignore:
Timestamp:
06/08/18 19:34:51 (2 years ago)
Author:
yushan
Message:

save dev

Location:
XIOS/dev/branch_openmp
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/bld.cfg

    r1520 r1533  
    3232#src::src_ep_dev $PWD/extern/ep_dev 
    3333bld::lib xios 
    34 bld::target libxios.a  
     34#bld::target libxios.a  
    3535#bld::target generate_fortran_interface.exe  
    36 bld::target xios_server.exe  
     36#bld::target xios_server.exe  
    3737#bld::target test_regular.exe 
    3838#bld::target test_expand_domain.exe 
     
    4040#bld::target test_unstruct_complete.exe  
    4141bld::target test_omp.exe  
    42 bld::target test_complete_omp.exe  
     42#bld::target test_complete_omp.exe  
    4343#bld::target test_remap.exe  
    4444#bld::target test_remap_ref.exe  
    45 bld::target test_remap_omp.exe  
     45#bld::target test_remap_omp.exe  
    4646#bld::target test_unstruct_omp.exe 
    4747#bld::target test_netcdf_omp.exe 
     
    5252#bld::target test_connectivity_expand.exe 
    5353#bld::target toy_cmip6.exe 
    54 bld::target toy_cmip6_omp.exe 
     54#bld::target toy_cmip6_omp.exe 
    5555bld::exe_dep 
    5656 
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_intercomm.cpp

    r1527 r1533  
    296296     
    297297 
    298     int remote_num_ep; 
     298    int remote_num_ep = 0; 
    299299    for(int i=0; i<remote_mpi_size; i++) 
    300300    { 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_free.cpp

    r1520 r1533  
    118118    int newcomm_num_ep = (*comm)->ep_comm_ptr->intercomm->size_rank_info[1].second; 
    119119 
     120    return 0; 
    120121    MPI_Barrier(*comm); 
    121122 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_init.cpp

    r1520 r1533  
    2828    } 
    2929  } 
     30   
     31  int EP_group_init() 
     32  { 
     33   
     34  } 
    3035 
    3136  int MPI_Initialized(int *flag) 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_lib.hpp

    r1520 r1533  
    8282 
    8383  int Request_Check(); 
     84   
     85  void show_EP_PendingRequests(std::list< ep_lib::MPI_Request* > * EP_PendingRequest); 
    8486 
    8587  int test_sendrecv(MPI_Comm comm); 
     88   
     89  int EP_group_init(); 
    8690 
    8791 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_message.cpp

    r1520 r1533  
    2323     
    2424    if(EP_PendingRequests->size() == 0) return 0; 
     25     
     26    show_EP_PendingRequests(EP_PendingRequests); 
    2527     
    2628    MPI_Status status; 
     
    3032    std::list<MPI_Request* >::iterator it; 
    3133     
     34//    show_EP_PendingRequests(EP_PendingRequests); 
     35     
    3236     
    3337    for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); it++) 
    3438    {  
     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       
    3557      Message_Check(((*(*it))->comm)); 
    3658    } 
     59     
     60     
    3761 
    3862 
    3963    for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); ) 
    4064    { 
     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       
    4183      if((*(*it))->state == 0) 
    4284      { 
     
    81123      } 
    82124       
    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); 
    104129  } 
    105130   
     
    178203    return MPI_SUCCESS; 
    179204  } 
    180  
    181  
    182    
    183    
    184    
    185205 
    186206 
     
    249269    return MPI_SUCCESS; 
    250270  } 
     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  } 
    251308 
    252309   
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_recv.cpp

    r1520 r1533  
    6565    EP_PendingRequests->push_back(request);   
    6666     
    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());     
    7368     
    74     memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size());     
     69    show_EP_PendingRequests(EP_PendingRequests); 
    7570 
    7671#ifdef _showinfo 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_test.cpp

    r1520 r1533  
    99#include <mpi.h> 
    1010#include "ep_declaration.hpp" 
     11#include "ep_mpi.hpp" 
    1112 
    1213using namespace std; 
     
    1819  { 
    1920    Debug("MPI_Test with EP"); 
    20  
    21     *flag = false; 
    2221     
    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)  
    2525    { 
    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); 
    4129    } 
    4230 
    4331    if((*request)->type == 2)   // irecv message not probed 
    4432    { 
    45       Request_Check(); 
     33      *flag = false; 
     34      return Request_Check(); 
     35    } 
     36     
     37    else //(*request)->type == 1 || (*request)->type == 3      // isend or imrecv 
     38    { 
    4639       
    47       #pragma omp flush 
    48        
    49     } 
    50  
    51     if((*request)->type == 3)  // imrecv 
    52     { 
    53       if((*request)->state == 2) 
    54       { 
    55         return *flag = true; 
    56       } 
    5740      ::MPI_Status mpi_status; 
    5841       
    59       ::MPI_Test(static_cast< ::MPI_Request*>((*request)->mpi_request), flag, &mpi_status); 
    6042       
     43      ::MPI_Test(to_mpi_request_ptr(*request), flag, &mpi_status); 
    6144       
    62       if(*flag) 
     45      if(*flag)  
    6346      { 
    64         status->mpi_status = new ::MPI_Status(mpi_status); 
     47 
     48        status->mpi_status=new ::MPI_Status(mpi_status); 
    6549        status->ep_src = (*request)->ep_src; 
    6650        status->ep_tag = (*request)->ep_tag; 
     
    6852         
    6953        (*request)->state = 2; 
    70          
     54                 
     55        memcheck("delete "<< (*request)->mpi_request << " : in ep_lib::MPI_Test, delete (*request)->mpi_request"); 
    7156        delete (*request)->mpi_request; 
    7257        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      } 
    7960    } 
     61     
     62    return Request_Check(); 
    8063 
    8164  } 
     
    8568  { 
    8669    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     
    8883    ::MPI_Request* mpi_request = new ::MPI_Request[count]; 
    8984    ::MPI_Status* mpi_status = new ::MPI_Status[count]; 
     
    10196      for(int i=0; i<count; i++) 
    10297      { 
    103         array_of_statuses[i].mpi_status = &mpi_status[i]; 
     98        array_of_statuses[i].mpi_status = new ::MPI_Status(mpi_status[i]); 
    10499        array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 
    105100        array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; 
     
    108103        array_of_requests[i]->state = 2; 
    109104       
    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"); 
    111106        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         
    113110      } 
    114111       
    115112    } 
     113     
     114    return Request_Check(); 
    116115 
    117     return Request_Check(); 
    118116  } 
    119117 
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_wait.cpp

    r1520 r1533  
    2525    if((*request)->type !=1 && (*request)->type !=2 && (*request)->type !=3)  
    2626    { 
    27       printf("Error in request type\n"); 
     27      printf("MPI_Wait : Error in request type\n"); 
    2828  
    2929      exit(1); 
     
    3232    while((*request)->type == 2) Request_Check(); 
    3333     
    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); 
    3537 
    36      
     38    status->mpi_status = new ::MPI_Status(mpi_status); 
    3739    status->ep_src = (*request)->ep_src; 
    3840    status->ep_tag = (*request)->ep_tag; 
     
    4244 
    4345    memcheck("delete "<< (*request)->mpi_request << " : in ep_lib::MPI_Wait, delete (*request)->mpi_request"); 
     46 
    4447    delete (*request)->mpi_request; 
    4548    delete *request; 
     49    *request=0; 
    4650     
    47  
    4851    return Request_Check(); 
    4952 
     
    8790    for(int i=0; i<count; i++) 
    8891    { 
    89       array_of_statuses[i].mpi_status = &mpi_status[i]; 
     92      array_of_statuses[i].mpi_status = new ::MPI_Status(mpi_status[i]); 
    9093      array_of_statuses[i].ep_src = array_of_requests[i]->ep_src; 
    9194      array_of_statuses[i].ep_tag = array_of_requests[i]->ep_tag; 
     
    97100      delete array_of_requests[i]->mpi_request; 
    98101      delete array_of_requests[i]; 
     102      array_of_requests[i] = 0; 
    99103    } 
    100104 
  • XIOS/dev/branch_openmp/src/cxios.cpp

    r1520 r1533  
    107107      MPI_Comm *ep_comm; 
    108108      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);  
    110112    } 
    111113         
  • XIOS/dev/branch_openmp/src/event_scheduler.cpp

    r1520 r1533  
    140140      if (received) 
    141141      { 
    142         printf("probed a message coming from parent\n"), 
    143142        recvRequest=new SPendingRequest ; 
    144143        MPI_Irecv(recvRequest->buffer, 3, MPI_UNSIGNED_LONG, -2, 1, communicator, &(recvRequest->request)) ; 
  • XIOS/dev/branch_openmp/src/server.cpp

    r1520 r1533  
    658658         MPI_Get_count(&status,MPI_CHAR,&(counts.back())) ; 
    659659         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) ; 
    660663         requests.push_back(request); 
    661          MPI_Irecv((void*)(buffers.back()),counts.back(),MPI_CHAR,root,2,intraComm,&(requests.back())) ; 
    662664         isEventRegistered.push_back(false); 
    663665         isEventQueued.push_back(false); 
     
    668670       { 
    669671         // (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) ; 
    671673         if (flag==true && !isEventRegistered[ctxNb]) 
    672674         { 
Note: See TracChangeset for help on using the changeset viewer.