Ignore:
Timestamp:
02/17/17 19:51:36 (7 years ago)
Author:
oabramkina
Message:

dev: intermediate commit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/node/context.cpp

    r1030 r1054  
    249249 
    250250     hasClient = true; 
     251 
    251252     if (CServer::serverLevel != 1) 
    252 //     if (CXios::serverLevel != 1) 
    253      // initClient is called by client pool 
     253     // initClient is called by client 
    254254     { 
    255255       client = new CContextClient(this, intraComm, interComm, cxtServer); 
    256256       server = new CContextServer(this, intraComm, interComm); 
    257      } 
     257       MPI_Comm intraCommServer, interCommServer; 
     258       if (cxtServer) // Attached mode 
     259       { 
     260         intraCommServer = intraComm; 
     261         interCommServer = interComm; 
     262       } 
     263       else 
     264       { 
     265//         MPI_Comm_dup(intraComm, &intraCommServer); 
     266//         comms.push_back(intraCommServer); 
     267//         MPI_Comm_dup(interComm, &interCommServer); 
     268//         comms.push_back(interCommServer); 
     269       } 
     270     } 
     271 
    258272     else 
    259      // initClient is called by primary server pool 
     273     // initClient is called by primary server 
    260274     { 
    261275       clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); 
     
    263277     } 
    264278 
    265      registryIn=new CRegistry(intraComm); 
    266      registryIn->setPath(getId()) ; 
    267      if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; 
    268      registryIn->bcastRegistry() ; 
    269  
    270      registryOut=new CRegistry(intraComm) ; 
    271      registryOut->setPath(getId()) ; 
    272  
    273      MPI_Comm intraCommServer, interCommServer; 
    274      if (cxtServer) // Attached mode 
    275      { 
    276        intraCommServer = intraComm; 
    277        interCommServer = interComm; 
    278      } 
    279      else 
    280      { 
    281        MPI_Comm_dup(intraComm, &intraCommServer); 
    282        comms.push_back(intraCommServer); 
    283        MPI_Comm_dup(interComm, &interCommServer); 
    284        comms.push_back(interCommServer); 
    285      } 
     279 
     280 
     281//     registryIn=new CRegistry(intraComm); 
     282//     registryIn->setPath(getId()) ; 
     283//     if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; 
     284//     registryIn->bcastRegistry() ; 
     285// 
     286//     registryOut=new CRegistry(intraComm) ; 
     287//     registryOut->setPath(getId()) ; 
     288 
     289 
    286290   } 
    287291 
     
    353357//     client = new CContextClient(this,intraComm,interComm, cxtClient); 
    354358 
    355      registryIn=new CRegistry(intraComm); 
    356      registryIn->setPath(getId()) ; 
    357      if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; 
    358      registryIn->bcastRegistry() ; 
    359      registryOut=new CRegistry(intraComm) ; 
    360      registryOut->setPath(getId()) ; 
     359//     registryIn=new CRegistry(intraComm); 
     360//     registryIn->setPath(getId()) ; 
     361//     if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; 
     362//     registryIn->bcastRegistry() ; 
     363//     registryOut=new CRegistry(intraComm) ; 
     364//     registryOut->setPath(getId()) ; 
    361365 
    362366     MPI_Comm intraCommClient, interCommClient; 
     
    368372     else 
    369373     { 
    370        MPI_Comm_dup(intraComm, &intraCommClient); 
    371        comms.push_back(intraCommClient); 
    372        MPI_Comm_dup(interComm, &interCommClient); 
    373        comms.push_back(interCommClient); 
     374//       MPI_Comm_dup(intraComm, &intraCommClient); 
     375//       comms.push_back(intraCommClient); 
     376//       MPI_Comm_dup(interComm, &interCommClient); 
     377//       comms.push_back(interCommClient); 
    374378     } 
    375379 
     
    377381 
    378382   //! Server side: Put server into a loop in order to listen message from client 
    379    bool CContext::eventLoop(void) 
    380    { 
    381      if (CServer::serverLevel == 0) 
    382      { 
    383        return server->eventLoop(); 
    384      } 
    385      else if (CServer::serverLevel == 1) 
    386      { 
    387        bool serverFinished = server->eventLoop(); 
    388        bool serverPrimFinished = true; 
    389        for (int i = 0; i < serverPrimServer.size(); ++i) 
    390        { 
    391          serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
    392        } 
    393        return ( serverFinished && serverPrimFinished); 
    394      } 
    395      else 
    396      { 
    397        return server->eventLoop(); 
    398      } 
    399    } 
     383//   bool CContext::eventLoop(void) 
     384//   { 
     385//     if (CServer::serverLevel == 0) 
     386//     { 
     387//       return server->eventLoop(); 
     388//     } 
     389//     else if (CServer::serverLevel == 1) 
     390//     { 
     391//       bool serverFinished = server->eventLoop(); 
     392//       bool serverPrimFinished = true; 
     393//       for (int i = 0; i < serverPrimServer.size(); ++i) 
     394//       { 
     395//         serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     396//       } 
     397//       return ( serverFinished && serverPrimFinished); 
     398//     } 
     399//     else 
     400//     { 
     401//       return server->eventLoop(); 
     402//     } 
     403//   } 
    400404 
    401405   //! Try to send the buffers and receive possible answers 
     
    405409     { 
    406410       client->checkBuffers(); 
    407        return server->eventLoop(); 
    408      } 
     411       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     412       if (hasTmpBufferedEvent) 
     413         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     414 
     415       // Don't process events if there is a temporarily buffered event 
     416       return server->eventLoop(!hasTmpBufferedEvent); 
     417     } 
     418 
    409419     else if (CServer::serverLevel == 1) 
    410420     { 
    411421       client->checkBuffers(); 
     422       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     423       if (hasTmpBufferedEvent) 
     424         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     425       bool serverFinished = server->eventLoop(!hasTmpBufferedEvent); 
     426 
     427       bool serverPrimFinished = true; 
    412428       for (int i = 0; i < clientPrimServer.size(); ++i) 
     429       { 
    413430         clientPrimServer[i]->checkBuffers(); 
    414        bool serverFinished = server->eventLoop(); 
    415        bool serverPrimFinished = true; 
    416        for (int i = 0; i < serverPrimServer.size(); ++i) 
    417        { 
    418          serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     431         bool hasTmpBufferedEventPrim = clientPrimServer[i]->hasTemporarilyBufferedEvent(); 
     432         if (hasTmpBufferedEventPrim) 
     433           hasTmpBufferedEventPrim = !clientPrimServer[i]->sendTemporarilyBufferedEvent(); 
     434         serverPrimFinished *= serverPrimServer[i]->eventLoop(hasTmpBufferedEventPrim); 
    419435       } 
    420436       return ( serverFinished && serverPrimFinished); 
    421437     } 
     438 
    422439     else if (CServer::serverLevel == 2) 
    423440     { 
    424441       client->checkBuffers(); 
    425        return server->eventLoop(); 
     442       bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 
     443       if (hasTmpBufferedEvent) 
     444         hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 
     445       return server->eventLoop(!hasTmpBufferedEvent); 
    426446     } 
    427447   } 
     
    433453     { 
    434454       finalized = true; 
    435        if (hasClient) sendRegistry() ; 
     455//       if (hasClient) sendRegistry() ; 
     456 
     457       client->finalize(); 
     458       while (!server->hasFinished()) 
     459       { 
     460         server->eventLoop(); 
     461       } 
    436462 
    437463       if ((hasClient) && (hasServer)) 
     
    450476       } 
    451477 
    452        client->finalize(); 
    453        while (!server->hasFinished()) 
    454        { 
    455          server->eventLoop(); 
    456        } 
    457  
    458        if (hasServer) 
     478       report(0)<< " Memory report : Context <"<<getId()<<"> : server side : total memory used for buffers "<<CContextServer::getTotalBuf()<<" bytes"<<endl; 
     479 
     480//       if (hasServer) 
     481       if (hasServer && !hasClient) 
    459482       { 
    460483         closeAllFile(); 
    461          registryOut->hierarchicalGatherRegistry() ; 
    462          if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
     484//         registryOut->hierarchicalGatherRegistry() ; 
     485//         if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
    463486       } 
    464487 
     
    472495         MPI_Comm_free(&(*it)); 
    473496       comms.clear(); 
    474  
    475497 
    476498      } 
     
    16271649  } 
    16281650 
     1651  bool CContext::isFinalized(void) 
     1652  { 
     1653    return finalized; 
     1654  } 
     1655 
    16291656} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.