Ignore:
Timestamp:
06/12/18 11:54:13 (3 years ago)
Author:
yushan
Message:

update intercomm_merge and remove redundant files

File:
1 edited

Legend:

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

    r1533 r1539  
    3232    std::list<MPI_Request* >::iterator it; 
    3333     
    34 //    show_EP_PendingRequests(EP_PendingRequests); 
     34    show_EP_PendingRequests(EP_PendingRequests); 
    3535     
    3636     
     
    8181      } 
    8282       
    83       if((*(*it))->state == 0) 
     83      if((*(*it))->probed == false) 
    8484      { 
    8585        #pragma omp critical (_query0) 
    8686        { 
    87           MPI_Iprobe((*(*it))->ep_src, (*(*it))->ep_tag, ((*(*it))->comm), &probed, &status); 
     87          MPI_Iprobe_endpoint((*(*it))->ep_src, (*(*it))->ep_tag, ((*(*it))->comm), &probed, &status); 
    8888          if(probed) 
    8989          { 
     
    9595           
    9696           
    97             MPI_Improbe((*(*it))->ep_src, (*(*it))->ep_tag, (*(*it))->comm, &probed, message, &status); 
     97            MPI_Improbe_endpoint((*(*it))->ep_src, (*(*it))->ep_tag, (*(*it))->comm, &probed, message, &status); 
    9898         
    9999          } 
     
    107107          MPI_Imrecv((*(*it))->buf, recv_count, (*(*it))->ep_datatype, message, *it); 
    108108          (*(*it))->type = 3; 
    109           (*(*it))->state = 1; 
     109          (*(*it))->probed = true; 
    110110 
    111111          memcheck("delete "<< status.mpi_status <<" : in ep_lib::Request_Check, delete status.mpi_status"); 
     
    133133  int Message_Check(MPI_Comm comm) 
    134134  { 
    135     if(!comm->is_ep) return MPI_SUCCESS; 
    136  
    137     if(comm->is_intercomm) 
    138     { 
    139       Message_Check_intercomm(comm); 
    140     } 
    141      
    142     return Message_Check_intracomm(comm); 
    143  
    144   } 
    145    
    146    
    147   int Message_Check_intracomm(MPI_Comm comm) 
     135    if(comm->is_ep) return Message_Check_endpoint(comm); 
     136  } 
     137   
     138   
     139  int Message_Check_endpoint(MPI_Comm comm) 
    148140  { 
    149141     
     
    204196  } 
    205197 
    206  
    207   int Message_Check_intercomm(MPI_Comm comm) 
    208   { 
    209     if(!comm->ep_comm_ptr->intercomm->mpi_inter_comm) return 0; 
    210  
    211     Debug("Message probing for intercomm\n"); 
    212  
    213     int flag = true; 
    214     ::MPI_Message message; 
    215     ::MPI_Status status; 
    216     int current_ep_rank; 
    217     MPI_Comm_rank(comm, &current_ep_rank); 
    218  
    219     while(flag) // loop until the end of global queue "comm->ep_comm_ptr->intercomm->mpi_inter_comm" 
    220     { 
    221       Debug("Message probing for intracomm\n"); 
    222  
    223       #pragma omp critical (_mpi_call) 
    224       { 
    225         ::MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm), &flag, &status); 
    226         if(flag) 
    227         { 
    228           Debug("find message in mpi comm \n"); 
    229           ::MPI_Mprobe(status.MPI_SOURCE, status.MPI_TAG, to_mpi_comm(comm->ep_comm_ptr->intercomm->mpi_inter_comm), &message, &status); 
    230         } 
    231       } 
    232        
    233  
    234       if(flag) 
    235       { 
    236  
    237         MPI_Message msg = new ep_message;  
    238         msg->mpi_message = new ::MPI_Message(message); 
    239  
    240         memcheck("new "<< msg <<" : in ep_lib::Message_Check, msg = new ep_message"); 
    241         memcheck("new "<< msg->mpi_message <<" : in ep_lib::Message_Check, msg->mpi_message = new ::MPI_Message"); 
    242                
    243  
    244         msg->ep_tag  = bitset<15>(status.MPI_TAG >> 16).to_ulong();  
    245         int src_loc  = bitset<8> (status.MPI_TAG >> 8) .to_ulong();  
    246         int dest_loc = bitset<8> (status.MPI_TAG)           .to_ulong(); 
    247         int src_mpi  = status.MPI_SOURCE; 
    248               
    249         msg->ep_src  = get_ep_rank(comm, src_loc,  src_mpi);    
    250 #ifdef _showinfo 
    251         printf("status.MPI_TAG = %d, src_loc = %d, dest_loc = %d, ep_tag = %d\n", status.MPI_TAG, src_loc, dest_loc, msg->ep_tag); 
    252 #endif 
    253  
    254         msg->mpi_status = new ::MPI_Status(status);  
    255         memcheck("new "<< msg->mpi_status <<" : in ep_lib::Message_Check, msg->mpi_status = new ::MPI_Status"); 
    256  
    257         #pragma omp critical (_query) 
    258         { 
    259           #pragma omp flush 
    260           comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->push_back(msg); 
    261           memcheck("comm->ep_comm_ptr->comm_list["<<dest_loc<<"]->ep_comm_ptr->message_queue->size = "<<comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->size()); 
    262           #pragma omp flush 
    263         } 
    264       } 
    265     } 
    266  
    267     Message_Check_intracomm(comm); 
    268  
    269     return MPI_SUCCESS; 
    270   } 
    271    
    272    
    273198   
    274199  void show_EP_PendingRequests(std::list< ep_lib::MPI_Request* > * EP_PendingRequest) 
     
    310235 
    311236} 
     237 
Note: See TracChangeset for help on using the changeset viewer.