Ignore:
Timestamp:
11/19/18 15:52:54 (5 years ago)
Author:
yushan
Message:

branch_openmp merged with trunk r1597

File:
1 edited

Legend:

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

    r1542 r1601  
    2121#include "distribute_file_server2.hpp" 
    2222 
     23using namespace ep_lib; 
     24 
    2325namespace xios { 
    2426 
    25   std::shared_ptr<CContextGroup> CContext::root; 
     27  std::shared_ptr<CContextGroup> * CContext::root_ptr = 0; 
    2628 
    2729   /// ////////////////////// Définitions ////////////////////// /// 
     
    6668   CContextGroup* CContext::getRoot(void) 
    6769   { 
    68       if (root.get()==NULL) root=std::shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())); 
    69       return root.get(); 
     70      if(root_ptr == 0) root_ptr = new std::shared_ptr<CContextGroup>(new CContextGroup(xml::CXMLNode::GetRootName())); 
     71      return root_ptr->get(); 
    7072   } 
    7173 
     
    248250 
    249251   //! Initialize client side 
    250    void CContext::initClient(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtServer /*= 0*/) 
     252   void CContext::initClient(ep_lib::MPI_Comm intraComm, ep_lib::MPI_Comm interComm, CContext* cxtServer /*= 0*/) 
    251253   { 
    252254 
    253255     hasClient = true; 
    254      MPI_Comm intraCommServer, interCommServer; 
     256     ep_lib::MPI_Comm intraCommServer, interCommServer; 
    255257      
    256258 
    257      if (CServer::serverLevel != 1) 
    258       // initClient is called by client 
     259     if (CServer::serverLevel != 1) // initClient is called by client 
    259260     { 
    260261       client = new CContextClient(this, intraComm, interComm, cxtServer); 
     
    266267       else 
    267268       { 
    268          MPI_Comm_dup(intraComm, &intraCommServer); 
     269         ep_lib::MPI_Comm_dup(intraComm, &intraCommServer); 
    269270         comms.push_back(intraCommServer); 
    270          MPI_Comm_dup(interComm, &interCommServer); 
     271         ep_lib::MPI_Comm_dup(interComm, &interCommServer); 
    271272         comms.push_back(interCommServer); 
    272273       } 
     
    287288       server = new CContextServer(this, intraCommServer, interCommServer); 
    288289     } 
    289      else 
    290      // initClient is called by primary server 
     290 
     291     else // initClient is called by primary server 
    291292     { 
    292293       clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); 
    293        MPI_Comm_dup(intraComm, &intraCommServer); 
     294       ep_lib::MPI_Comm_dup(intraComm, &intraCommServer); 
    294295       comms.push_back(intraCommServer); 
    295        MPI_Comm_dup(interComm, &interCommServer); 
     296       ep_lib::MPI_Comm_dup(interComm, &interCommServer); 
    296297       comms.push_back(interCommServer); 
    297298       serverPrimServer.push_back(new CContextServer(this, intraCommServer, interCommServer)); 
     
    361362   } 
    362363 
    363    void CContext::initServer(MPI_Comm intraComm, MPI_Comm interComm, CContext* cxtClient /*= 0*/) 
     364   void CContext::initServer(ep_lib::MPI_Comm intraComm, ep_lib::MPI_Comm interComm, CContext* cxtClient /*= 0*/) 
    364365   { 
    365366     hasServer=true; 
     
    379380     registryOut->setPath(contextRegistryId) ; 
    380381 
    381      MPI_Comm intraCommClient, interCommClient; 
     382     ep_lib::MPI_Comm intraCommClient, interCommClient; 
    382383     if (cxtClient) // Attached mode 
    383384     { 
     
    387388     else 
    388389     { 
    389        MPI_Comm_dup(intraComm, &intraCommClient); 
     390       ep_lib::MPI_Comm_dup(intraComm, &intraCommClient); 
    390391       comms.push_back(intraCommClient); 
    391        MPI_Comm_dup(interComm, &interCommClient); 
     392       ep_lib::MPI_Comm_dup(interComm, &interCommClient); 
    392393       comms.push_back(interCommClient); 
    393394     } 
     
    475476 
    476477         //! Free internally allocated communicators 
    477          for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
    478            MPI_Comm_free(&(*it)); 
     478         for (std::list<ep_lib::MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
     479           ep_lib::MPI_Comm_free(&(*it)); 
    479480         comms.clear(); 
    480481 
     482         #pragma omp critical (_output) 
    481483         info(20)<<"CContext: Context <"<<getId()<<"> is finalized."<<endl; 
    482484       } 
     
    494496       { 
    495497         // Blocking send of context finalize message to its client (e.g. primary server or model) 
     498         #pragma omp critical (_output) 
    496499         info(100)<<"DEBUG: context "<<getId()<<" Send client finalize<<"<<endl ; 
    497500         client->finalize(); 
     
    517520 
    518521         //! Free internally allocated communicators 
    519          for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
    520            MPI_Comm_free(&(*it)); 
     522         for (std::list<ep_lib::MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
     523           ep_lib::MPI_Comm_free(&(*it)); 
    521524         comms.clear(); 
    522525 
     526         #pragma omp critical (_output) 
    523527         info(20)<<"CContext: Context <"<<getId()<<"> is finalized."<<endl; 
    524528       } 
     
    531535   void CContext::freeComms(void) 
    532536   { 
    533      for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
    534        MPI_Comm_free(&(*it)); 
     537     for (std::list<ep_lib::MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
     538       ep_lib::MPI_Comm_free(&(*it)); 
    535539     comms.clear(); 
    536540   } 
     
    10021006       } 
    10031007 
    1004        for (std::multimap<double,int>:: iterator it=poolDataSize.begin() ; it!=poolDataSize.end(); ++it) info(30)<<"Load Balancing for servers (perfect=1) : "<<it->second<<" :  ratio "<<it->first*1./dataPerPool<<endl ; 
    1005   
     1008       for (std::multimap<double,int>:: iterator it=poolDataSize.begin() ; it!=poolDataSize.end(); ++it) 
     1009       { 
     1010         #pragma omp critical (_output) 
     1011         info(30)<<"Load Balancing for servers (perfect=1) : "<<it->second<<" :  ratio "<<it->first*1./dataPerPool<<endl ; 
     1012       } 
     1013 
    10061014       for (int i = 0; i < this->enabledReadModeFiles.size(); ++i) 
    10071015       { 
     
    10911099       } 
    10921100 
    1093        for (int i = 0; i < nbPools; ++i) info(100)<<"Pool server level2 "<<i<<"   assigned file bandwith "<<bandwithSize[i]*86400.*4./1024/1024.<<" Mb / days"<<endl ; 
    1094        for (int i = 0; i < nbPools; ++i) info(100)<<"Pool server level2 "<<i<<"   assigned grid memory "<<memorySize[i]*100/1024./1024.<<" Mb"<<endl ; 
    1095  
     1101       for (int i = 0; i < nbPools; ++i) 
     1102       { 
     1103         #pragma omp critical (_output) 
     1104         info(100)<<"Pool server level2 "<<i<<"   assigned file bandwith "<<bandwithSize[i]*86400.*4./1024/1024.<<" Mb / days"<<endl ; 
     1105       } 
     1106       for (int i = 0; i < nbPools; ++i) 
     1107       { 
     1108         #pragma omp critical (_output) 
     1109         info(100)<<"Pool server level2 "<<i<<"   assigned grid memory "<<memorySize[i]*100/1024./1024.<<" Mb"<<endl ; 
     1110       } 
    10961111 
    10971112       for (int i = 0; i < this->enabledReadModeFiles.size(); ++i) 
     
    11441159     for (; it != end; it++) 
    11451160     { 
     1161       #pragma omp critical (_output) 
    11461162       info(30)<<"Closing File : "<<(*it)->getId()<<endl; 
    11471163       (*it)->close(); 
     
    18311847        } 
    18321848 
     1849        #pragma omp critical (_output) 
    18331850        info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl; 
    18341851        calendar->update(step); 
     1852        #pragma omp critical (_output) 
    18351853        info(50) << "updateCalendar : after : " << calendar->getCurrentDate() << endl; 
    18361854  #ifdef XIOS_MEMTRACK_LIGHT 
     1855        #pragma omp critical (_output) 
    18371856        info(50) << " Current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte, at timestep "<<step<<" of context "<<this->getId()<<endl ; 
    18381857  #endif 
     
    18451864      } 
    18461865      else if (prevStep == step) 
     1866      { 
     1867        #pragma omp critical (_output) 
    18471868        info(50) << "updateCalendar: already at step " << step << ", no operation done." << endl; 
     1869      } 
    18481870      else // if (prevStep > step) 
    18491871        ERROR("void CContext::updateCalendar(int step)", 
     
    19011923    CContext* context = CObjectFactory::CreateObject<CContext>(id).get(); 
    19021924    getRoot(); 
    1903     if (!hasctxt) CGroupFactory::AddChild(root, context->getShared()); 
     1925    if (!hasctxt) CGroupFactory::AddChild(*root_ptr, context->getShared()); 
    19041926 
    19051927#define DECLARE_NODE(Name_, name_) \ 
Note: See TracChangeset for help on using the changeset viewer.