Ignore:
Timestamp:
05/28/18 17:28:07 (6 years ago)
Author:
yushan
Message:

rank_map is passed from vector to map, in order to have more flexibility in comm_split

File:
1 edited

Legend:

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

    r1500 r1503  
    2020  int Request_Check() 
    2121  { 
     22    if(EP_PendingRequests == 0 ) EP_PendingRequests = new std::list< MPI_Request* >; 
     23     
     24    if(EP_PendingRequests->size() == 0) return 0; 
     25     
    2226    MPI_Status status; 
    2327    MPI_Message *message; 
     
    2630    std::list<MPI_Request* >::iterator it; 
    2731     
    28     if(EP_PendingRequests == 0 ) return 0; 
    2932     
    3033    for(it = EP_PendingRequests->begin(); it!=EP_PendingRequests->end(); it++) 
     
    3841      if((*(*it))->state == 0) 
    3942      { 
    40            
    41         message = new MPI_Message; 
    42         *message = new ep_message; 
    43          
    44         printf("new %p : in ep_lib::Request_Check, message = new MPI_Message\n", message); 
    45         printf("new %p : in ep_lib::Request_Check, *message = new ep_message\n", *message); 
     43        #pragma omp critical (_query0) 
     44        { 
     45          MPI_Iprobe((*(*it))->ep_src, (*(*it))->ep_tag, ((*(*it))->comm), &probed, &status); 
     46          if(probed) 
     47          { 
     48            message = new MPI_Message; 
     49            *message = new ep_message; 
     50         
     51            memcheck("new "<< message <<" : in ep_lib::Request_Check, message = new MPI_Message"); 
     52            memcheck("new "<< *message <<" : in ep_lib::Request_Check, *message = new ep_message"); 
    4653           
    4754           
    48         MPI_Improbe((*(*it))->ep_src, (*(*it))->ep_tag, ((*(*it))->comm), &probed, message, &status); 
    49         printf("in Request_Check, after improbe, mpi_status = %p\n", to_mpi_status_ptr(status)); 
     55            MPI_Improbe((*(*it))->ep_src, (*(*it))->ep_tag, (*(*it))->comm, &probed, message, &status); 
     56         
     57          } 
     58        } 
    5059       
    5160         
     
    5463          ::MPI_Get_count(to_mpi_status_ptr(status), to_mpi_type((*(*it))->ep_datatype), &recv_count); 
    5564           
    56           printf("in Request_Check, imrecv, buf = %p, recv_count = %d, status = %p\n", (*(*it))->buf, recv_count, to_mpi_status_ptr(status)); 
    5765          MPI_Imrecv((*(*it))->buf, recv_count, (*(*it))->ep_datatype, message, *it); 
    5866          (*(*it))->type = 3; 
    5967          (*(*it))->state = 1; 
    60            
    61  
    62           printf("delete %p : in ep_lib::Request_Check, delete *message\n", *message); 
    63           printf("delete %p : in ep_lib::Request_Check, delete message\n", message); 
     68 
     69          memcheck("delete "<< status.mpi_status <<" : in ep_lib::Request_Check, delete status.mpi_status"); 
     70          delete status.mpi_status;           
     71 
     72          memcheck("delete "<< *message <<" : in ep_lib::Request_Check, delete *message"); 
     73          memcheck("delete "<< message <<" : in ep_lib::Request_Check, delete message"); 
    6474 
    6575          delete *message; 
     
    6878          it++; 
    6979          continue;       
    70         }       
     80        }               
    7181      } 
    7282       
    7383      if((*(*it))->state == 2) 
    7484      { 
    75         printf("delete %p : in ep_lib::Request_Check, delete (*(*it))\n", (*(*it))); 
     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))"); 
    7687        delete (*(*it)); 
    7788         
    7889        EP_PendingRequests->erase(it); 
    79         printf("EP_PendingRequests->size() = %lu\n", EP_PendingRequests->size()); 
     90        memcheck("EP_PendingRequests["<<ep_rank<<"]->size() = " << EP_PendingRequests->size()); 
    8091        it = EP_PendingRequests->begin(); 
    8192        continue; 
     
    128139        msg->mpi_message = new ::MPI_Message(message); 
    129140 
    130         printf("new %p : in ep_lib::Message_Check, msg = new ep_message\n", msg); 
    131         printf("new %p : in ep_lib::Message_Check, msg->mpi_message = new ::MPI_Message\n", msg->mpi_message); 
     141        memcheck("new "<< msg <<" : in ep_lib::Message_Check, msg = new ep_message"); 
     142        memcheck("new "<< msg->mpi_message <<" : in ep_lib::Message_Check, msg->mpi_message = new ::MPI_Message"); 
    132143               
    133144 
     
    139150        msg->ep_src  = get_ep_rank(comm, src_loc,  src_mpi);        
    140151        msg->mpi_status = new ::MPI_Status(status);   
    141         printf("new %p : in ep_lib::Message_Check, msg->mpi_status = new ::MPI_Status\n", msg->mpi_status); 
     152        memcheck("new "<< msg->mpi_status <<" : in ep_lib::Message_Check, msg->mpi_status = new ::MPI_Status"); 
    142153 
    143154        #pragma omp critical (_query) 
     
    145156          #pragma omp flush 
    146157          comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->push_back(msg);   
    147           int test_count; 
    148           ::MPI_Get_count(static_cast< ::MPI_Status* >(msg->mpi_status), 1275070475, &test_count); 
    149           printf("status1 = %p, test_count2 = %d\n", static_cast< ::MPI_Status* >(msg->mpi_status), test_count); 
    150            
    151           ::MPI_Get_count(static_cast< ::MPI_Status* >(comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->back()->mpi_status), 1275070475, &test_count); 
    152           printf("status2 = %p, test_count2 = %d\n", static_cast< ::MPI_Status* >(comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->back()->mpi_status), test_count); 
    153                     
     158          int dest_mpi = comm->ep_comm_ptr->size_rank_info[2].first; 
     159          memcheck("message_queue["<<dest_mpi<<","<<dest_loc<<"]->size = "<<comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->size()); 
    154160          #pragma omp flush 
    155161        } 
     
    199205        msg->mpi_message = new ::MPI_Message(message); 
    200206 
    201         printf("new %p : in ep_lib::Message_Check, msg = new ep_message\n", msg); 
    202         printf("new %p : in ep_lib::Message_Check, msg->mpi_message = new ::MPI_Message\n", msg->mpi_message); 
     207        memcheck("new "<< msg <<" : in ep_lib::Message_Check, msg = new ep_message"); 
     208        memcheck("new "<< msg->mpi_message <<" : in ep_lib::Message_Check, msg->mpi_message = new ::MPI_Message"); 
    203209               
    204210 
     
    210216              
    211217        msg->ep_src  = get_ep_rank(comm, src_loc,  src_mpi);        
    212         msg->mpi_status = new ::MPI_Status(status);   
    213         printf("new %p : in ep_lib::Message_Check, msg->mpi_status = new ::MPI_Status\n", msg->mpi_status); 
     218        msg->mpi_status = new ::MPI_Status(status);  
     219        memcheck("new "<< msg->mpi_status <<" : in ep_lib::Message_Check, msg->mpi_status = new ::MPI_Status"); 
    214220 
    215221        #pragma omp critical (_query) 
     
    217223          #pragma omp flush 
    218224          comm->ep_comm_ptr->comm_list[dest_loc]->ep_comm_ptr->message_queue->push_back(msg); 
     225          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()); 
    219226          #pragma omp flush 
    220227        } 
Note: See TracChangeset for help on using the changeset viewer.