Ignore:
Timestamp:
12/18/18 17:34:59 (2 years ago)
Author:
yushan
Message:

bug fix (Nb of files less than Nb of servers)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_trunk_omp/extern/src_ep_dev/ep_probe.cpp

    r1603 r1628  
    6868    *flag = false; 
    6969     
    70     Message_Check(comm); 
    71  
    72     #pragma omp flush 
    73  
    7470    #pragma omp critical (_query) 
    7571    for(Message_list::iterator it = comm->ep_comm_ptr->message_queue->begin(); it!= comm->ep_comm_ptr->message_queue->end(); ++it) 
     
    9894      } 
    9995    } 
     96    if(*flag) return 0; 
     97     
     98    Message_Check(comm); 
     99 
     100    #pragma omp flush 
     101 
     102    #pragma omp critical (_query) 
     103    for(Message_list::iterator it = comm->ep_comm_ptr->message_queue->begin(); it!= comm->ep_comm_ptr->message_queue->end(); ++it) 
     104    { 
     105      bool src_matched = src<0? true: (*it)->ep_src == src; 
     106      bool tag_matched = tag<0? true: (*it)->ep_tag == tag; 
     107       
     108      if(src_matched && tag_matched)         
     109      { 
     110        Debug("find message\n"); 
     111          
     112        status->mpi_status = new ::MPI_Status(*static_cast< ::MPI_Status*>((*it)->mpi_status)); 
     113        status->ep_src = (*it)->ep_src; 
     114        status->ep_tag = (*it)->ep_tag; 
     115         
     116        if(comm->is_intercomm) 
     117        { 
     118          for(INTER_RANK_MAP::iterator iter = comm->inter_rank_map->begin(); iter != comm->inter_rank_map->end(); iter++) 
     119          { 
     120            if(iter->second == (*it)->ep_src) status->ep_src=iter->first; 
     121          } 
     122        } 
     123 
     124        *flag = true; 
     125        break; 
     126      } 
     127    } 
     128    if(*flag) return 0; 
    100129  } 
    101130 
     
    129158    *flag = false; 
    130159     
    131     Message_Check(comm); 
    132      
    133     #pragma omp flush 
    134  
    135160    #pragma omp critical (_query) 
    136161    if(! comm->ep_comm_ptr->message_queue->empty()) 
     
    179204      } 
    180205    } 
     206 
     207    if(*flag) return 0; 
     208    
     209    Message_Check(comm); 
     210     
     211    #pragma omp flush 
     212 
     213    #pragma omp critical (_query) 
     214    if(! comm->ep_comm_ptr->message_queue->empty()) 
     215    { 
     216      for(Message_list::iterator it = comm->ep_comm_ptr->message_queue->begin(); it!= comm->ep_comm_ptr->message_queue->end(); ++it) 
     217      { 
     218                                           
     219        bool src_matched = src<0? true: (*it)->ep_src == src; 
     220        bool tag_matched = tag<0? true: (*it)->ep_tag == tag; 
     221         
     222        if(src_matched && tag_matched) 
     223        { 
     224          *flag = true; 
     225 
     226          status->mpi_status = new ::MPI_Status(*static_cast< ::MPI_Status*>((*it)->mpi_status)); 
     227          memcheck("new "<< status->mpi_status << " : in ep_lib::MPI_Improbe, status->mpi_status = new ::MPI_Status"); 
     228          status->ep_src = (*it)->ep_src; 
     229          status->ep_tag = (*it)->ep_tag; 
     230 
     231          (*message)->mpi_message = new ::MPI_Message(*static_cast< ::MPI_Message*>((*it)->mpi_message)); 
     232          memcheck("new "<< (*message)->mpi_message <<" : in ep_lib::MPI_Improbe, (*message)->mpi_message = new ::MPI_Message"); 
     233          (*message)->ep_src = (*it)->ep_src; 
     234          (*message)->ep_tag = (*it)->ep_tag; 
     235                                       
     236 
     237          #pragma omp critical (_query2) 
     238          {               
     239            memcheck("delete "<< (*it)->mpi_message <<" : in ep_lib::Message_Check, delete (*it)->mpi_message"); 
     240            memcheck("delete "<< (*it)->mpi_status <<" : in ep_lib::Message_Check, delete (*it)->mpi_status"); 
     241            memcheck("delete "<< (*it) <<" : in ep_lib::Message_Check, delete (*it)"); 
     242             
     243             
     244            delete (*it)->mpi_message;      
     245            delete (*it)->mpi_status;  
     246            delete *it; 
     247             
     248                        
     249            comm->ep_comm_ptr->message_queue->erase(it); 
     250            memcheck("message_queue["<<mpi_rank<<","<<ep_rank_loc<<"]->size = "<<comm->ep_comm_ptr->message_queue->size()); 
     251            #pragma omp flush 
     252          } 
     253           
     254          break; 
     255        } 
     256 
     257      } 
     258    } 
     259 
     260    if(*flag) return 0; 
     261 
    181262  } 
    182263 
Note: See TracChangeset for help on using the changeset viewer.