Ignore:
Timestamp:
10/18/19 15:40:35 (5 years ago)
Author:
ymipsl
Message:

implementing first guess for service functionnalities.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_SERVICES/src/context_client.cpp

    r1757 r1761  
    2424     : mapBufferSize_(), parentServer(cxtSer), maxBufferedEvents(4) 
    2525    { 
    26       pureOneSided=CXios::getin<bool>("pure_one_sided",false); // pure one sided communication (for test) 
    27       if (isAttachedModeEnabled()) pureOneSided=false ; // no one sided in attach mode 
    2826       
    2927      context = parent; 
     
    3533      int flag; 
    3634      MPI_Comm_test_inter(interComm, &flag); 
     35      if (flag) isAttached_=false ; 
     36      else  isAttached_=true ; 
     37 
     38      pureOneSided=CXios::getin<bool>("pure_one_sided",false); // pure one sided communication (for test) 
     39      if (isAttachedModeEnabled()) pureOneSided=false ; // no one sided in attach mode 
     40       
     41 
     42 
    3743      if (flag) MPI_Comm_remote_size(interComm, &serverSize); 
    3844      else  MPI_Comm_size(interComm, &serverSize); 
     
    151157           
    152158        checkBuffers(ranks); 
    153  
    154         if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode 
    155         { 
    156           waitEvent(ranks); 
    157           CContext::setCurrent(context->getId()); 
    158         } 
    159       } 
    160  
     159      } 
     160       
     161      if (isAttachedModeEnabled()) // couldBuffer is always true in attached mode 
     162      { 
     163        waitEvent(ranks); 
     164        CContext::setCurrent(context->getId()); 
     165      } 
     166       
    161167      timeLine++; 
    162168    } 
     
    168174    */ 
    169175    void CContextClient::waitEvent(list<int>& ranks) 
     176    { 
     177      while (checkBuffers(ranks)) 
     178      { 
     179        CXios::getDaemonsManager()->eventLoop() ; 
     180      } 
     181 
     182      MPI_Request req ; 
     183      MPI_Status status ; 
     184 
     185      MPI_Ibarrier(intraComm,&req) ; 
     186      int flag=false ; 
     187 
     188      do   
     189      { 
     190        CXios::getDaemonsManager()->eventLoop() ; 
     191        MPI_Test(&req,&flag,&status) ; 
     192      } while (!flag) ; 
     193 
     194 
     195    } 
     196 
     197 
     198    void CContextClient::waitEvent_old(list<int>& ranks) 
    170199    { 
    171200      parentServer->server->setPendingEvent(); 
     
    227256          for (itBuffer = bufferList.begin(); itBuffer != bufferList.end(); itBuffer++) (*itBuffer)->unlockBuffer(); 
    228257          checkBuffers(); 
    229           if (CServer::serverLevel == 0)  context->server->listen(); 
    230           else if (CServer::serverLevel == 1) 
     258           
     259          context->server->listen(); 
     260 
     261          if (context->serverPrimServer.size()>0) 
    231262          { 
    232             context->server->listen(); 
    233263            for (int i = 0; i < context->serverPrimServer.size(); ++i)  context->serverPrimServer[i]->listen(); 
    234264            CServer::contextEventLoop(false) ; // avoid dead-lock at finalize... 
    235265          } 
    236  
    237           else if (CServer::serverLevel == 2) context->server->listen(); 
    238266 
    239267        } 
     
    320348        } 
    321349      }  
    322    } 
    323350*/ 
     351   } 
     352 
    324353       
    325354  /*! 
     
    402431  { 
    403432    return !ranksServerLeader.empty(); 
    404   } 
    405  
    406   /*! 
    407    * Check if the attached mode is used. 
    408    * 
    409    * \return true if and only if attached mode is used 
    410    */ 
    411   bool CContextClient::isAttachedModeEnabled() const 
    412   { 
    413     return (parentServer != 0); 
    414433  } 
    415434 
Note: See TracChangeset for help on using the changeset viewer.