Ignore:
Timestamp:
10/06/17 13:56:33 (4 years ago)
Author:
yushan
Message:

EP update all

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/extern/src_ep_dev/ep_send.cpp

    r1289 r1295  
    99#include <mpi.h> 
    1010#include "ep_declaration.hpp" 
     11#include "ep_mpi.hpp" 
    1112 
    1213 
     
    1718  { 
    1819    if(!comm.is_ep) 
    19     { 
    20       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    21       ::MPI_Send(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 
    22       return 0; 
    23     } 
     20      return ::MPI_Send(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm)); 
    2421 
    2522    MPI_Request request; 
     
    3835    if(!comm.is_ep) 
    3936    { 
    40       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    41       ::MPI_Ssend(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 
    42       return 0; 
     37      return ::MPI_Ssend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm)); 
    4338    } 
    4439 
     
    5146  } 
    5247   
    53   int MPI_Bsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) 
    54   { 
    55     if(!comm.is_ep) 
    56     { 
    57       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    58       ::MPI_Bsend(buf, count, static_cast< ::MPI_Datatype>(datatype), dest, tag, mpi_comm); 
    59       return 0; 
    60     } 
    61  
    62     MPI_Request request; 
    63     MPI_Status status; 
    64     //MPI_Ibsend(buf, count, datatype, dest, tag, comm, &request); 
    65     MPI_Wait(&request, &status); 
    66  
    67     //check_sum_send(buf, count, datatype, dest, tag, comm); 
    68  
    69     return 0; 
    70   } 
    71   
     48 
    7249 
    7350 
     
    8461    { 
    8562      ::MPI_Request mpi_request; 
    86       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    87       ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request); 
     63      ::MPI_Isend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
    8864 
    8965      request->mpi_request = mpi_request; 
     
    10480    //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 
    10581 
    106     int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first; 
     82    int ep_src_loc  = comm.ep_comm_ptr->size_rank_info[1].first; 
    10783    int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first; 
    108     int mpi_tag                 = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    109     int mpi_dest        = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 
     84    int mpi_tag     = tag_combine(tag, ep_src_loc, ep_dest_loc); 
     85    int mpi_dest    = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 
    11086 
    11187    request->ep_src  = src_rank; 
     
    11389    request->ep_datatype = datatype; 
    11490 
    115     ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm); 
    11691    ::MPI_Request mpi_request; 
    11792 
    118     ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
     93    ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
    11994 
    12095    request->mpi_request = mpi_request; 
    121     request->type = 1;          // used in wait 
     96    request->type = 1;    // used in wait 
    12297    request->comm = comm; 
    12398    request->buf = const_cast<void*>(buf); 
     
    143118    { 
    144119      ::MPI_Request mpi_request; 
    145       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    146       ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request); 
     120      ::MPI_Issend(buf, count, to_mpi_type(datatype), dest, tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
    147121 
    148122      request->mpi_request = mpi_request; 
     
    162136    //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 
    163137 
    164     int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first; 
     138    int ep_src_loc  = comm.ep_comm_ptr->size_rank_info[1].first; 
    165139    int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first; 
    166     int mpi_tag                 = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    167     int mpi_dest        = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 
     140    int mpi_tag     = tag_combine(tag, ep_src_loc, ep_dest_loc); 
     141    int mpi_dest    = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 
    168142     
    169143    request->ep_src = src_rank; 
     
    171145    request->ep_datatype = datatype; 
    172146 
    173     ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm); 
    174147    ::MPI_Request mpi_request; 
    175148 
    176     ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
     149    ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
    177150 
    178151    request->mpi_request = mpi_request; 
    179     request->type = 1;          // used in wait 
     152    request->type = 1;    // used in wait 
    180153    request->comm = comm; 
    181154    request->buf = NULL; 
     
    187160  } 
    188161   
    189   int MPI_Ibsend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) 
    190   { 
    191     Debug("\nMPI_Isend with EP\n"); 
    192     int src_rank; 
    193     MPI_Comm_rank(comm, &src_rank); 
    194  
    195    
    196  
    197     if(!comm.is_ep) 
    198     { 
    199       ::MPI_Request mpi_request; 
    200       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    201       ::MPI_Ibsend(buf, count, static_cast< ::MPI_Datatype> (datatype), dest, tag, mpi_comm, &mpi_request); 
    202  
    203       request->mpi_request = mpi_request; 
    204  
    205       request->ep_src = src_rank; 
    206       request->ep_tag = tag; 
    207       request->ep_datatype = datatype; 
    208       request->type = 1; 
    209       request->comm = comm; 
    210  
    211       return 0; 
    212     } 
    213  
    214     if(comm.is_intercomm) return 0;//MPI_Ibsend_intercomm(buf, count, datatype, dest, tag, comm, request); 
    215  
    216    // EP intracomm 
    217  
    218     //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 
    219  
    220     int ep_src_loc = comm.ep_comm_ptr->size_rank_info[1].first; 
    221     int ep_dest_loc = comm.ep_comm_ptr->comm_list->rank_map->at(dest).first; 
    222     int mpi_tag                 = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    223     int mpi_dest        = comm.ep_comm_ptr->comm_list->rank_map->at(dest).second; 
    224  
    225     request->ep_src  = src_rank; 
    226     request->ep_tag  = tag; 
    227     request->ep_datatype = datatype; 
    228  
    229     ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm> (comm.mpi_comm); 
    230     ::MPI_Request mpi_request; 
    231  
    232     ::MPI_Ibsend(buf, count, static_cast< ::MPI_Datatype>(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    233  
    234     request->mpi_request = mpi_request; 
    235     request->type = 1;          // used in wait 
    236     request->comm = comm; 
    237     request->buf = const_cast<void*>(buf); 
    238  
    239     //Message_Check(comm); 
    240  
    241     return 0;   
    242   } 
    243162 
    244163 
     
    256175    int src_comm_label; 
    257176 
    258     for(int i=0; i<comm.ep_comm_ptr->intercomm->local_rank_map->size(); i++) 
    259     { 
    260       if(comm.ep_comm_ptr->intercomm->local_rank_map->at(i).first == src_ep_rank) 
    261       { 
    262         src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(i).second; 
    263         break; 
    264       } 
    265     } 
     177    src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).second; 
     178 
     179 
     180     
    266181 
    267182    //Message_Check(comm); 
     
    276191      int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    277192 
    278       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    279       ::MPI_Request mpi_request; 
    280    
    281       ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    282  
    283       request->mpi_request = mpi_request; 
    284       request->type = 1;                // used in wait 
     193      ::MPI_Request mpi_request; 
     194   
     195      ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
     196 
     197      request->mpi_request = mpi_request; 
     198      request->type = 1;    // used in wait 
    285199      request->comm = comm; 
    286200 
     
    298212      int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    299213 
    300       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm); 
    301       ::MPI_Request mpi_request; 
    302  
    303       ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    304  
    305       request->mpi_request = mpi_request; 
    306       request->type = 1;                // used in wait 
     214      ::MPI_Request mpi_request; 
     215 
     216      ::MPI_Isend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.ep_comm_ptr->intercomm->mpi_inter_comm), &mpi_request); 
     217 
     218      request->mpi_request = mpi_request; 
     219      request->type = 1;    // used in wait 
    307220      request->comm = comm; 
    308221    
     
    349262      int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    350263 
    351       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    352       ::MPI_Request mpi_request; 
    353    
    354       ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    355  
    356       request->mpi_request = mpi_request; 
    357       request->type = 1;                // used in wait 
     264      ::MPI_Request mpi_request; 
     265   
     266      ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.mpi_comm), &mpi_request); 
     267 
     268      request->mpi_request = mpi_request; 
     269      request->type = 1;    // used in wait 
    358270      request->comm = comm; 
    359271 
     
    371283      int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    372284 
    373       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm); 
    374       ::MPI_Request mpi_request; 
    375  
    376       ::MPI_Issend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    377  
    378       request->mpi_request = mpi_request; 
    379       request->type = 1;                // used in wait 
     285      ::MPI_Request mpi_request; 
     286 
     287      ::MPI_Issend(buf, count, to_mpi_type(datatype), mpi_dest, mpi_tag, to_mpi_comm(comm.ep_comm_ptr->intercomm->mpi_inter_comm), &mpi_request); 
     288 
     289      request->mpi_request = mpi_request; 
     290      request->type = 1;    // used in wait 
    380291      request->comm = comm; 
    381292    
     
    389300  } 
    390301   
    391   int MPI_Ibsend_intercomm(const void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) 
    392   { 
    393     printf("MPI_Ibsend with intercomm not yet implemented\n"); 
    394     MPI_Abort(comm, 0); 
    395     //check_sum_send(buf, count, datatype, dest, tag, comm, 1); 
    396  
    397     int dest_remote_ep_rank    = comm.ep_comm_ptr->intercomm->remote_rank_map->at(dest).first; 
    398     int dest_remote_comm_label = comm.ep_comm_ptr->intercomm->remote_rank_map->at(dest).second; 
    399  
    400     int src_ep_rank    = comm.ep_comm_ptr->intercomm->size_rank_info[0].first; 
    401     int src_comm_label; 
    402  
    403     for(int i=0; i<comm.ep_comm_ptr->intercomm->local_rank_map->size(); i++) 
    404     { 
    405       if(comm.ep_comm_ptr->intercomm->local_rank_map->at(i).first == src_ep_rank) 
    406       { 
    407         src_comm_label = comm.ep_comm_ptr->intercomm->local_rank_map->at(i).second; 
    408         break; 
    409       } 
    410     } 
    411  
    412     //Message_Check(comm); 
    413  
    414  
    415     if(dest_remote_comm_label == src_comm_label)       // mpi_dest differs 
    416     { 
    417       int inter_src = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).first; 
    418       int ep_src_loc = comm.rank_map->at(inter_src).first; 
    419       int ep_dest_loc = comm.rank_map->at(dest_remote_ep_rank).first; 
    420       int mpi_dest    = comm.rank_map->at(dest_remote_ep_rank).second; 
    421       int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    422  
    423       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm > (comm.mpi_comm); 
    424       ::MPI_Request mpi_request; 
    425    
    426       ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    427  
    428       request->mpi_request = mpi_request; 
    429       request->type = 1;                // used in wait 
    430       request->comm = comm; 
    431  
    432       request->ep_src = src_ep_rank; 
    433       request->ep_tag = tag; 
    434       request->ep_datatype = datatype; 
    435     } 
    436  
    437     else   // dest_remote_comm_label != src_comm_label 
    438     {  
    439       int inter_src = comm.ep_comm_ptr->intercomm->local_rank_map->at(src_ep_rank).first; 
    440       int ep_src_loc = comm.rank_map->at(inter_src).first; 
    441       int ep_dest_loc = comm.ep_comm_ptr->intercomm->intercomm_rank_map->at(dest_remote_ep_rank).first; 
    442       int mpi_dest    = comm.ep_comm_ptr->intercomm->intercomm_rank_map->at(dest_remote_ep_rank).second; 
    443       int mpi_tag = tag_combine(tag, ep_src_loc, ep_dest_loc); 
    444  
    445       ::MPI_Comm mpi_comm = static_cast< ::MPI_Comm >(comm.ep_comm_ptr->intercomm->mpi_inter_comm); 
    446       ::MPI_Request mpi_request; 
    447  
    448       ::MPI_Isend(buf, count, static_cast< ::MPI_Datatype >(datatype), mpi_dest, mpi_tag, mpi_comm, &mpi_request); 
    449  
    450       request->mpi_request = mpi_request; 
    451       request->type = 1;                // used in wait 
    452       request->comm = comm; 
    453     
    454       request->ep_src = src_ep_rank; 
    455       request->ep_tag = tag; 
    456       request->ep_datatype = datatype; 
    457     } 
    458  
    459     return 0; 
    460  
    461   } 
    462302} 
    463303 
Note: See TracChangeset for help on using the changeset viewer.