Ignore:
Timestamp:
09/09/22 17:23:16 (22 months ago)
Author:
ymipsl
Message:

-Fix performance issue in one_sided protocol

  • better timer instrumentation of the protocol

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/trunk/src/transport/one_sided_context_server.cpp

    r2343 r2399  
    9393    int flag; 
    9494    MPI_Status status; 
    95      
    96     traceOff(); 
    97     MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm, &flag, &status); 
    98     traceOn(); 
    99     if (flag==true) 
    100     { 
    101       requests_.push_back(CRequest(interComm, status)) ; 
    102       if (requests_.back().test())  
    103       { 
    104         processRequest(requests_.back()) ; 
    105         requests_.pop_back() ; 
     95    flag=true ; 
     96 
     97    while(flag) 
     98    { 
     99      traceOff(); 
     100      MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm, &flag, &status); 
     101      traceOn(); 
     102      if (flag==true) 
     103      { 
     104        requests_.push_back(CRequest(interComm, status)) ; 
     105        if (requests_.back().test())  
     106        { 
     107          processRequest(requests_.back()) ; 
     108          requests_.pop_back() ; 
     109        } 
    106110      } 
    107111    } 
     
    139143    if (!pendingEvents_.empty()) 
    140144    { 
     145/* 
    141146      SPendingEvent& nextEvent = pendingEvents_.begin()->second ; 
    142147      for(auto& buffer : nextEvent.buffers ) buffer->eventLoop() ; 
    143148      if (nextEvent.nbSenders==0) pendingEvents_.erase(pendingEvents_.begin()) ; 
     149*/ 
     150      for(auto it=pendingEvents_.begin() ;  it!=pendingEvents_.end() ;) 
     151      { 
     152        SPendingEvent& nextEvent = it->second ; 
     153        for(auto& buffer : nextEvent.buffers ) buffer->eventLoop() ; 
     154        if (nextEvent.nbSenders==0) it=pendingEvents_.erase(it) ; 
     155        else ++it ; 
     156      } 
    144157    } 
    145158  } 
     
    188201          CEventServer event(this) ; 
    189202          for(auto& buffer : it->second.buffers) buffer->fillEventServer(currentTimeLine, event) ; 
    190  
     203          MPI_Barrier(intraComm) ; 
    191204          CTimer::get("Process events").resume(); 
    192205          info(100)<<"Context id "<<context->getId()<<" : Process Event "<<currentTimeLine<<" of class "<<event.classId<<" of type "<<event.type<<endl ; 
     
    281294    else if (event.classId==CGrid::GetType()) CGrid::dispatchEvent(event); 
    282295    else if (event.classId==CGridGroup::GetType()) CGridGroup::dispatchEvent(event); 
    283     else if (event.classId==CField::GetType()) CField::dispatchEvent(event); 
     296    else if (event.classId==CField::GetType())  
     297    { 
     298      if (event.type==CField::EVENT_ID_UPDATE_DATA) CField::dispatchEvent(event); 
     299      else CField::dispatchEvent(event); 
     300    } 
    284301    else if (event.classId==CFieldGroup::GetType()) CFieldGroup::dispatchEvent(event); 
    285302    else if (event.classId==CFile::GetType()) CFile::dispatchEvent(event); 
Note: See TracChangeset for help on using the changeset viewer.