Ignore:
Timestamp:
05/28/18 09:54:32 (5 years ago)
Author:
yushan
Message:

save dev

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/extern/ep_dev/ep_dup.cpp

    r1499 r1500  
    99  int MPI_Comm_dup(MPI_Comm comm, MPI_Comm *newcomm) 
    1010  { 
    11     if(!comm.is_ep) 
     11    if(!comm->is_ep) 
    1212    { 
    1313      Debug("Comm_dup MPI\n"); 
    1414      newcomm = new MPI_Comm; 
    15       newcomm->is_ep = comm.is_ep; 
     15      (*newcomm)->is_ep = comm->is_ep; 
    1616 
    17       ::MPI_Comm input = to_mpi_comm(comm.mpi_comm); 
     17      ::MPI_Comm input = to_mpi_comm(comm->mpi_comm); 
    1818      ::MPI_Comm *output = new ::MPI_Comm; 
    1919 
     
    2121      ::MPI_Comm_dup(input, output); 
    2222 
    23       newcomm->mpi_comm = output; 
     23      (*newcomm)->mpi_comm = output; 
    2424 
    2525      return 0; 
    2626    } 
    2727 
    28     if(comm.is_intercomm) return MPI_Comm_dup_intercomm(comm, newcomm); 
     28    if(comm->is_intercomm) return MPI_Comm_dup_intercomm(comm, newcomm); 
    2929 
    3030    // for intracomm 
    31     if(comm.mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL.mpi_comm)) return 0; 
     31    if(comm->mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL->mpi_comm)) return 0; 
    3232 
    3333 
    34     int my_rank = comm.ep_comm_ptr->size_rank_info[1].first; 
    35     int num_ep  = comm.ep_comm_ptr->size_rank_info[1].second; 
     34    int my_rank = comm->ep_comm_ptr->size_rank_info[1].first; 
     35    int num_ep  = comm->ep_comm_ptr->size_rank_info[1].second; 
    3636 
    3737 
     
    4242      ::MPI_Comm *mpi_dup = new ::MPI_Comm; 
    4343 
    44       ::MPI_Comm in_comm = to_mpi_comm(comm.mpi_comm); 
     44      ::MPI_Comm in_comm = to_mpi_comm(comm->mpi_comm); 
    4545 
    4646      ::MPI_Comm_dup(in_comm, mpi_dup); 
    4747 
    4848      MPI_Comm_create_endpoints(mpi_dup, num_ep, info, out_comm); 
    49       comm.ep_comm_ptr->comm_list->mem_bridge = out_comm; 
     49      comm->ep_comm_ptr->comm_list[0]->mem_bridge = out_comm; 
    5050    } 
    5151 
    5252    MPI_Barrier(comm); 
    5353 
    54     *newcomm = (comm.ep_comm_ptr->comm_list->mem_bridge[my_rank]); 
     54    *newcomm = (comm->ep_comm_ptr->comm_list[0]->mem_bridge[my_rank]); 
    5555 
    5656    return MPI_SUCCESS; 
     
    6060  { 
    6161     
    62     if(comm.mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL.mpi_comm)) return 0; 
     62    if(comm->mpi_comm == static_cast< ::MPI_Comm* >(MPI_COMM_NULL->mpi_comm)) return 0; 
    6363 
    64     int my_rank = comm.ep_comm_ptr->size_rank_info[1].first; 
    65     int num_ep  = comm.ep_comm_ptr->size_rank_info[1].second; 
     64    int my_rank = comm->ep_comm_ptr->size_rank_info[1].first; 
     65    int num_ep  = comm->ep_comm_ptr->size_rank_info[1].second; 
    6666 
    6767 
     
    7272      ::MPI_Comm *mpi_dup = new ::MPI_Comm; 
    7373 
    74       ::MPI_Comm in_comm = to_mpi_comm(comm.mpi_comm); 
     74      ::MPI_Comm in_comm = to_mpi_comm(comm->mpi_comm); 
    7575 
    7676      ::MPI_Comm_dup(in_comm, mpi_dup); 
     
    8080      ::MPI_Comm *mpi_inter = new ::MPI_Comm; 
    8181 
    82       ::MPI_Comm_dup(to_mpi_comm(comm.ep_comm_ptr->intercomm->mpi_inter_comm), mpi_inter); 
     82      ::MPI_Comm_dup(to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm), mpi_inter); 
    8383       
    8484      for(int i=0; i<num_ep; i++) 
    8585      { 
    86         out_comm[i].ep_comm_ptr->comm_label = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->comm_label; 
    87         out_comm[i].ep_comm_ptr->intercomm = new ep_intercomm; 
     86        out_comm[i]->ep_comm_ptr->comm_label = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->comm_label; 
     87        out_comm[i]->ep_comm_ptr->intercomm = new ep_intercomm; 
    8888 
    89         out_comm[i].ep_comm_ptr->intercomm->mpi_inter_comm = mpi_inter; 
    90         out_comm[i].is_intercomm = true; 
     89        out_comm[i]->ep_comm_ptr->intercomm->mpi_inter_comm = mpi_inter; 
     90        out_comm[i]->is_intercomm = true; 
    9191 
    92         out_comm[i].ep_comm_ptr->intercomm->intercomm_rank_map = new RANK_MAP; 
    93         out_comm[i].ep_comm_ptr->intercomm->local_rank_map = new RANK_MAP; 
    94         out_comm[i].ep_comm_ptr->intercomm->remote_rank_map = new RANK_MAP; 
     92        out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map = new RANK_MAP; 
     93        out_comm[i]->ep_comm_ptr->intercomm->local_rank_map = new RANK_MAP; 
     94        out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map = new RANK_MAP; 
    9595 
    9696        int map_size = 0; 
    97         map_size = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map->size(); 
    98         out_comm[i].ep_comm_ptr->intercomm->intercomm_rank_map->resize(map_size); 
     97        map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map->size(); 
     98        out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map->resize(map_size); 
    9999        for(int ii=0; ii<map_size; ii++) 
    100           out_comm[i].ep_comm_ptr->intercomm->intercomm_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map->at(ii); 
     100          out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map->at(ii); 
    101101 
    102         map_size = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map->size(); 
    103         out_comm[i].ep_comm_ptr->intercomm->local_rank_map->resize(map_size); 
     102        map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map->size(); 
     103        out_comm[i]->ep_comm_ptr->intercomm->local_rank_map->resize(map_size); 
    104104        for(int ii=0; ii<map_size; ii++) 
    105           out_comm[i].ep_comm_ptr->intercomm->local_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map->at(ii); 
     105          out_comm[i]->ep_comm_ptr->intercomm->local_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map->at(ii); 
    106106 
    107         map_size = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map->size(); 
    108         out_comm[i].ep_comm_ptr->intercomm->remote_rank_map->resize(map_size); 
     107        map_size = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map->size(); 
     108        out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map->resize(map_size); 
    109109        for(int ii=0; ii<map_size; ii++) 
    110           out_comm[i].ep_comm_ptr->intercomm->remote_rank_map->at(ii) = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map->at(ii); 
     110          out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map->at(ii) = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map->at(ii); 
    111111 
    112112 
    113         //out_comm[i].ep_comm_ptr->intercomm->intercomm_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_rank_map; 
    114         //out_comm[i].ep_comm_ptr->intercomm->local_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_rank_map; 
    115         //out_comm[i].ep_comm_ptr->intercomm->remote_rank_map = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->remote_rank_map; 
     113        //out_comm[i]->ep_comm_ptr->intercomm->intercomm_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_rank_map; 
     114        //out_comm[i]->ep_comm_ptr->intercomm->local_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_rank_map; 
     115        //out_comm[i]->ep_comm_ptr->intercomm->remote_rank_map = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->remote_rank_map; 
    116116 
    117         out_comm[i].ep_comm_ptr->intercomm->local_comm = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->local_comm;         
    118         out_comm[i].ep_comm_ptr->intercomm->intercomm_tag = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->intercomm_tag; 
     117        out_comm[i]->ep_comm_ptr->intercomm->local_comm = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->local_comm;         
     118        out_comm[i]->ep_comm_ptr->intercomm->intercomm_tag = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->intercomm_tag; 
    119119 
    120120        for(int j =0; j<3; j++) 
    121121        { 
    122           out_comm[i].ep_comm_ptr->intercomm->size_rank_info[j] = comm.ep_comm_ptr->comm_list[i].ep_comm_ptr->intercomm->size_rank_info[j]; 
     122          out_comm[i]->ep_comm_ptr->intercomm->size_rank_info[j] = comm->ep_comm_ptr->comm_list[i]->ep_comm_ptr->intercomm->size_rank_info[j]; 
    123123        } 
    124124 
    125125      } 
    126126 
    127       comm.ep_comm_ptr->comm_list->mem_bridge = out_comm; 
     127      comm->ep_comm_ptr->comm_list[0]->mem_bridge = out_comm; 
    128128    } 
    129129 
    130130    MPI_Barrier(comm); 
    131131 
    132     *newcomm = comm.ep_comm_ptr->comm_list->mem_bridge[my_rank]; 
     132    *newcomm = comm->ep_comm_ptr->comm_list[0]->mem_bridge[my_rank]; 
    133133     
    134134 
Note: See TracChangeset for help on using the changeset viewer.