Changeset 1601 for XIOS/dev/dev_trunk_omp/src/node/context.cpp
- Timestamp:
- 11/19/18 15:52:54 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_trunk_omp/src/node/context.cpp
r1542 r1601 21 21 #include "distribute_file_server2.hpp" 22 22 23 using namespace ep_lib; 24 23 25 namespace xios { 24 26 25 std::shared_ptr<CContextGroup> CContext::root;27 std::shared_ptr<CContextGroup> * CContext::root_ptr = 0; 26 28 27 29 /// ////////////////////// Définitions ////////////////////// /// … … 66 68 CContextGroup* CContext::getRoot(void) 67 69 { 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(); 70 72 } 71 73 … … 248 250 249 251 //! 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*/) 251 253 { 252 254 253 255 hasClient = true; 254 MPI_Comm intraCommServer, interCommServer;256 ep_lib::MPI_Comm intraCommServer, interCommServer; 255 257 256 258 257 if (CServer::serverLevel != 1) 258 // initClient is called by client 259 if (CServer::serverLevel != 1) // initClient is called by client 259 260 { 260 261 client = new CContextClient(this, intraComm, interComm, cxtServer); … … 266 267 else 267 268 { 268 MPI_Comm_dup(intraComm, &intraCommServer);269 ep_lib::MPI_Comm_dup(intraComm, &intraCommServer); 269 270 comms.push_back(intraCommServer); 270 MPI_Comm_dup(interComm, &interCommServer);271 ep_lib::MPI_Comm_dup(interComm, &interCommServer); 271 272 comms.push_back(interCommServer); 272 273 } … … 287 288 server = new CContextServer(this, intraCommServer, interCommServer); 288 289 } 289 else 290 // initClient is called by primary server290 291 else // initClient is called by primary server 291 292 { 292 293 clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); 293 MPI_Comm_dup(intraComm, &intraCommServer);294 ep_lib::MPI_Comm_dup(intraComm, &intraCommServer); 294 295 comms.push_back(intraCommServer); 295 MPI_Comm_dup(interComm, &interCommServer);296 ep_lib::MPI_Comm_dup(interComm, &interCommServer); 296 297 comms.push_back(interCommServer); 297 298 serverPrimServer.push_back(new CContextServer(this, intraCommServer, interCommServer)); … … 361 362 } 362 363 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*/) 364 365 { 365 366 hasServer=true; … … 379 380 registryOut->setPath(contextRegistryId) ; 380 381 381 MPI_Comm intraCommClient, interCommClient;382 ep_lib::MPI_Comm intraCommClient, interCommClient; 382 383 if (cxtClient) // Attached mode 383 384 { … … 387 388 else 388 389 { 389 MPI_Comm_dup(intraComm, &intraCommClient);390 ep_lib::MPI_Comm_dup(intraComm, &intraCommClient); 390 391 comms.push_back(intraCommClient); 391 MPI_Comm_dup(interComm, &interCommClient);392 ep_lib::MPI_Comm_dup(interComm, &interCommClient); 392 393 comms.push_back(interCommClient); 393 394 } … … 475 476 476 477 //! 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)); 479 480 comms.clear(); 480 481 482 #pragma omp critical (_output) 481 483 info(20)<<"CContext: Context <"<<getId()<<"> is finalized."<<endl; 482 484 } … … 494 496 { 495 497 // Blocking send of context finalize message to its client (e.g. primary server or model) 498 #pragma omp critical (_output) 496 499 info(100)<<"DEBUG: context "<<getId()<<" Send client finalize<<"<<endl ; 497 500 client->finalize(); … … 517 520 518 521 //! 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)); 521 524 comms.clear(); 522 525 526 #pragma omp critical (_output) 523 527 info(20)<<"CContext: Context <"<<getId()<<"> is finalized."<<endl; 524 528 } … … 531 535 void CContext::freeComms(void) 532 536 { 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)); 535 539 comms.clear(); 536 540 } … … 1002 1006 } 1003 1007 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 1006 1014 for (int i = 0; i < this->enabledReadModeFiles.size(); ++i) 1007 1015 { … … 1091 1099 } 1092 1100 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 } 1096 1111 1097 1112 for (int i = 0; i < this->enabledReadModeFiles.size(); ++i) … … 1144 1159 for (; it != end; it++) 1145 1160 { 1161 #pragma omp critical (_output) 1146 1162 info(30)<<"Closing File : "<<(*it)->getId()<<endl; 1147 1163 (*it)->close(); … … 1831 1847 } 1832 1848 1849 #pragma omp critical (_output) 1833 1850 info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl; 1834 1851 calendar->update(step); 1852 #pragma omp critical (_output) 1835 1853 info(50) << "updateCalendar : after : " << calendar->getCurrentDate() << endl; 1836 1854 #ifdef XIOS_MEMTRACK_LIGHT 1855 #pragma omp critical (_output) 1837 1856 info(50) << " Current memory used by XIOS : "<< MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte, at timestep "<<step<<" of context "<<this->getId()<<endl ; 1838 1857 #endif … … 1845 1864 } 1846 1865 else if (prevStep == step) 1866 { 1867 #pragma omp critical (_output) 1847 1868 info(50) << "updateCalendar: already at step " << step << ", no operation done." << endl; 1869 } 1848 1870 else // if (prevStep > step) 1849 1871 ERROR("void CContext::updateCalendar(int step)", … … 1901 1923 CContext* context = CObjectFactory::CreateObject<CContext>(id).get(); 1902 1924 getRoot(); 1903 if (!hasctxt) CGroupFactory::AddChild( root, context->getShared());1925 if (!hasctxt) CGroupFactory::AddChild(*root_ptr, context->getShared()); 1904 1926 1905 1927 #define DECLARE_NODE(Name_, name_) \
Note: See TracChangeset
for help on using the changeset viewer.