- Timestamp:
- 09/26/23 17:24:35 (17 months ago)
- Location:
- XIOS3/trunk/src
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/client.cpp
r2576 r2580 106 106 107 107 MPI_Comm_split(globalComm, color, commRank, &clientComm) ; 108 CXios::getMpiGarbageCollector().registerCommunicator(clientComm) ; 108 109 } 109 110 else … … 115 116 { 116 117 MPI_Comm_dup(localComm,&clientComm) ; 118 CXios::getMpiGarbageCollector().registerCommunicator(clientComm) ; 117 119 MPI_Comm_dup(localComm,&intraComm_) ; 120 CXios::getMpiGarbageCollector().registerCommunicator(intraComm_) ; 118 121 119 122 if (CXios::usingServer) … … 175 178 MPI_Comm_rank(CXios::getXiosComm(), &commRank) ; 176 179 MPI_Comm_split(CXios::getXiosComm(),false,commRank, &clientsComm_) ; 180 CXios::getMpiGarbageCollector().registerCommunicator(clientsComm_) ; 177 181 178 182 // is using server or not ? … … 277 281 { 278 282 MPI_Intercomm_create(intraComm, 0, globalComm, serverRank, 3141, &interComm); 283 CXios::getMpiGarbageCollector().registerCommunicator(interComm) ; 279 284 MPI_Comm_free(&intraComm) ; 280 285 MPI_Intercomm_merge(interComm,high, &intraComm ) ; … … 341 346 CXios::setXiosComm(xiosGlobalComm) ; 342 347 343 MPI_Comm commUnfree ;344 MPI_Comm_dup(clientComm, &commUnfree ) ;345 346 348 } 347 349 … … 519 521 finalizePoolRessource() ; 520 522 CContext::removeAllContexts() ; // free memory for related context 521 522 523 CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources 524 MPI_Comm xiosComm=CXios::getXiosComm() ; 525 MPI_Comm_free(&xiosComm) ; 523 526 CCommTrack::dumpComm() ; 524 527 if (!is_MPI_Initialized) -
XIOS3/trunk/src/cxios.hpp
r2547 r2580 125 125 static CPoolRessource* getPoolRessource(void) ; 126 126 127 static MPI_Comm getGlobalComm(void) { return globalComm ;}128 static MPI_Comm getXiosComm(void) { return xiosComm ;}127 static MPI_Comm& getGlobalComm(void) { return globalComm ;} 128 static MPI_Comm& getXiosComm(void) { return xiosComm ;} 129 129 static void setXiosComm(MPI_Comm comm) { xiosComm=comm ;} 130 130 static CRegistry* getGlobalRegistry(void) { return globalRegistry ;} -
XIOS3/trunk/src/manager/contexts_manager.cpp
r2517 r2580 26 26 27 27 MPI_Comm_rank(xiosComm_, &commRank) ; 28 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;28 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_,"CContextsManager::winNotify_") ; 29 29 winNotify_->updateToExclusiveWindow(commRank, this, &CContextsManager::notificationsDumpOut) ; 30 30 31 31 32 winContexts_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;32 winContexts_ = new CWindowManager(xiosComm_, maxBufferSize_,"CContextsManager::winContexts_") ; 33 33 winContexts_->updateToExclusiveWindow(commRank, this, &CContextsManager::contextsDumpOut) ; 34 34 -
XIOS3/trunk/src/manager/coupler_manager.cpp
r2517 r2580 19 19 MPI_Comm_rank(xiosComm_, &commRank) ; 20 20 21 winRegistredCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;22 winNextCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;21 winRegistredCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_,"CCouplerManager::winRegistredCoupling_") ; 22 winNextCoupling_ = new CWindowManager(xiosComm_, maxBufferSize_,"CCouplerManager::winNextCoupling_") ; 23 23 if (commRank==managerGlobalLeader_) 24 24 { -
XIOS3/trunk/src/manager/pool_ressource.cpp
r2571 r2580 16 16 int commRank, commSize ; 17 17 MPI_Comm_dup(poolComm, &poolComm_) ; 18 winNotify_ = new CWindowManager(poolComm_, maxBufferSize_) ; 18 CXios::getMpiGarbageCollector().registerCommunicator(poolComm_) ; 19 winNotify_ = new CWindowManager(poolComm_, maxBufferSize_,"CPoolRessource::winNotify_") ; 19 20 MPI_Comm_rank(poolComm, &commRank) ; 20 21 MPI_Comm_size(poolComm, &commSize) ; … … 404 405 MPI_Comm newServiceComm ; 405 406 MPI_Comm_dup(serviceComm, &newServiceComm) ; 407 CXios::getMpiGarbageCollector().registerCommunicator(newServiceComm) ; 406 408 int nbPartitions = service.second->getNbPartitions() ; 407 409 int partitionId = service.second->getPartitionId() ; -
XIOS3/trunk/src/manager/ressources_manager.cpp
r2562 r2580 22 22 if (commRank==0 && isXiosServer) MPI_Comm_rank(xiosComm_, &commRank) ; 23 23 else commRank=0 ; 24 tokenManager_ = new CTokenManager(xiosComm_,commRank) ;24 //tokenManager_ = new CTokenManager(xiosComm_,commRank) ; 25 25 26 26 MPI_Allreduce(&commRank, &managerGlobalLeader_, 1, MPI_INT, MPI_SUM, xiosComm_) ; 27 27 28 28 MPI_Comm_rank(xiosComm_, &commRank) ; 29 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;30 31 32 winRessources_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;29 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_,"CRessourcesManager::winNotify_") ; 30 31 32 winRessources_ = new CWindowManager(xiosComm_, maxBufferSize_,"CRessourcesManager::winRessources_") ; 33 33 winRessources_->lockWindow(commRank,0) ; 34 34 serverLeader_=-1 ; … … 43 43 delete winNotify_ ; 44 44 delete winRessources_ ; 45 delete tokenManager_ ;45 //delete tokenManager_ ; 46 46 } 47 47 -
XIOS3/trunk/src/manager/ressources_manager.hpp
r2523 r2580 59 59 void registerPoolClient(const std::string& poolId,int size,int leader) ; 60 60 void registerPoolServer(const std::string& poolId,int size,int leader) ; 61 CTokenManager* getTokenManager(void) {return tokenManager_ ;}61 //CTokenManager* getTokenManager(void) {return tokenManager_ ;} 62 62 63 63 int managerGlobalLeader_ ; … … 66 66 67 67 CWindowManager* winNotify_ ; 68 CTokenManager* tokenManager_ ;68 //CTokenManager* tokenManager_ ; 69 69 70 70 const size_t maxBufferSize_=1024*1024 ; -
XIOS3/trunk/src/manager/server_context.cpp
r2547 r2580 24 24 25 25 MPI_Comm_dup(contextComm, &contextComm_) ; 26 CXios::getMpiGarbageCollector().registerCommunicator(contextComm_) ; 26 27 xiosComm_=CXios::getXiosComm() ; 27 28 … … 29 30 MPI_Comm_rank(contextComm_,&localRank) ; 30 31 31 winNotify_ = new CWindowManager(contextComm_, maxBufferSize_ ) ;32 winNotify_ = new CWindowManager(contextComm_, maxBufferSize_,"CServerContext::winNotify_") ; 32 33 MPI_Barrier(contextComm_) ; 33 34 … … 57 58 CServerContext::~CServerContext() 58 59 { 60 delete winNotify_ ; 59 61 cout<<"Server Context destructor"<<endl; 60 62 } … … 126 128 { 127 129 MPI_Intercomm_create(intraComm, 0, xiosComm_, contextLeader, 3141, &interCommClient) ; 130 CXios::getMpiGarbageCollector().registerCommunicator(interCommClient) ; 128 131 MPI_Comm_dup(interCommClient, &interCommServer) ; 132 CXios::getMpiGarbageCollector().registerCommunicator(interCommServer) ; 129 133 MPI_Comm_free(&newInterCommClient) ; 130 134 MPI_Comm_free(&newInterCommServer) ; … … 315 319 info(10)<<"CServerContext::createIntercomm : No overlap ==> context in server mode"<<endl ; 316 320 MPI_Intercomm_create(contextComm_, 0, xiosComm_, remoteLeader, 3141, &interCommServer) ; 321 CXios::getMpiGarbageCollector().registerCommunicator(interCommServer) ; 317 322 MPI_Comm_dup(interCommServer,&interCommClient) ; 323 CXios::getMpiGarbageCollector().registerCommunicator(interCommClient) ; 318 324 context_ -> createClientInterComm(interCommClient,interCommServer) ; 319 325 clientsInterComm_.push_back(interCommClient) ; … … 329 335 void CServerContext::freeComm(void) 330 336 { 331 delete winNotify_ ;332 winNotify_=nullptr ;333 MPI_Comm_free(&contextComm_) ;337 //delete winNotify_ ; 338 //winNotify_=nullptr ; 339 //MPI_Comm_free(&contextComm_) ; 334 340 // don't forget intercomm -> later 335 341 } -
XIOS3/trunk/src/manager/servers_ressource.cpp
r2547 r2580 23 23 24 24 MPI_Comm_dup(serverComm, &serverComm_) ; 25 CXios::getMpiGarbageCollector().registerCommunicator(serverComm_) ; 25 26 MPI_Comm xiosComm=CXios::getXiosComm() ; 26 27 … … 29 30 MPI_Comm_rank(serverComm_,&localRank) ; 30 31 31 winNotify_ = new CWindowManager(serverComm_, maxBufferSize_ ) ;32 winNotify_ = new CWindowManager(serverComm_, maxBufferSize_,"CServersRessource::winNotify_") ; 32 33 MPI_Barrier(serverComm_) ; 33 34 if (localRank==localLeader_) … … 42 43 43 44 MPI_Comm_dup(serverComm_, &freeRessourcesComm_) ; 45 CXios::getMpiGarbageCollector().registerCommunicator(freeRessourcesComm_) ; 44 46 eventScheduler_ = make_shared<CEventScheduler>(freeRessourcesComm_) ; 45 47 freeRessourceEventScheduler_ = eventScheduler_ ; -
XIOS3/trunk/src/manager/services.cpp
r2547 r2580 22 22 23 23 MPI_Comm_dup(serviceComm, &serviceComm_) ; 24 CXios::getMpiGarbageCollector().registerCommunicator(serviceComm_) ; 24 25 MPI_Comm globalComm_=CXios::getXiosComm() ; 25 26 … … 27 28 MPI_Comm_rank(serviceComm_,&localRank) ; 28 29 29 winNotify_ = new CWindowManager(serviceComm_, maxBufferSize_ ) ;30 winNotify_ = new CWindowManager(serviceComm_, maxBufferSize_,"CService::winNotify_") ; 30 31 winNotify_->updateToExclusiveWindow(localRank, this, &CService::createContextDumpOut) ; 31 32 MPI_Barrier(serviceComm_) ; -
XIOS3/trunk/src/manager/services_manager.cpp
r2523 r2580 30 30 31 31 MPI_Comm_rank(xiosComm_, &commRank) ; 32 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;32 winNotify_ = new CWindowManager(xiosComm_, maxBufferSize_,"CServicesManager::winNotify_") ; 33 33 winNotify_->updateToExclusiveWindow(commRank, this, &CServicesManager::notificationsDumpOut) ; 34 34 35 winServices_ = new CWindowManager(xiosComm_, maxBufferSize_ ) ;35 winServices_ = new CWindowManager(xiosComm_, maxBufferSize_,"CServicesManager::winServices_") ; 36 36 winServices_->updateToExclusiveWindow(commRank, this, &CServicesManager::servicesDumpOut) ; 37 37 -
XIOS3/trunk/src/manager/window_base.cpp
r2570 r2580 4 4 namespace xios 5 5 { 6 CWindowBase::CWindowBase(MPI_Comm winComm, size_t bufferSize )6 CWindowBase::CWindowBase(MPI_Comm winComm, size_t bufferSize, const string name) : name_(name) 7 7 { 8 8 bufferSize_ = bufferSize ; … … 13 13 lock=0 ; 14 14 MPI_Win_lock_all(0, window_) ; 15 info(100)<<"CWindowBase constructor : "<<name_<<endl ; 15 16 MPI_Barrier(winComm) ; 16 17 } -
XIOS3/trunk/src/manager/window_base.hpp
r2570 r2580 3 3 4 4 #include <map> 5 #include <string> 6 5 7 #include "exception.hpp" 6 8 #include "mpi.hpp" 9 #include <string> 7 10 8 11 namespace xios … … 21 24 const double maxLatency_ = 1e-3 ; // 1ms latency maximum 22 25 MPI_Win window_ ; 26 std::string name_ ; 23 27 24 28 public : 25 29 26 CWindowBase(MPI_Comm winComm, size_t bufferSize );30 CWindowBase(MPI_Comm winComm, size_t bufferSize, const string name); 27 31 28 32 bool tryLockExclusive(int rank) … … 143 147 { 144 148 MPI_Win_unlock_all(window_); 149 info(100)<<"CWindowBase destructor : "<<name_<<endl ; 145 150 } 146 151 -
XIOS3/trunk/src/manager/window_manager.hpp
r2517 r2580 31 31 public : 32 32 33 CWindowManager(MPI_Comm winComm, size_t bufferSize ) : CWindowBase(winComm, bufferSize + OFFSET_BUFFER_SIZE)33 CWindowManager(MPI_Comm winComm, size_t bufferSize, const string name) : CWindowBase(winComm, bufferSize + OFFSET_BUFFER_SIZE, name) 34 34 { 35 35 int lock=0 ; -
XIOS3/trunk/src/mpi_garbage_collector.hpp
r2569 r2580 2 2 #define __MPI_GARBAGE_COLLECTOR_HPP__ 3 3 #include "mpi.hpp" 4 #include "backtrace.hpp" 4 5 namespace xios 5 6 { … … 20 21 public: 21 22 22 void registerCommunicator(MPI_Comm& comm, std::string str="") { stack_.push_back(SType{SType::COMM, comm, MPI_WIN_NULL, str}) ;} 23 void registerWindow(MPI_Win& win, std::string str="") { stack_.push_back(SType{SType::WIN, MPI_COMM_NULL, win, str}) ;} 23 void registerCommunicator(MPI_Comm& comm, std::string str) { stack_.push_front(SType{SType::COMM, comm, MPI_WIN_NULL, str}) ;} 24 void registerCommunicator(MPI_Comm& comm) { stack_.push_front(SType{SType::COMM, comm, MPI_WIN_NULL, MemTrack::backTrace(2)}) ;} 25 void registerWindow(MPI_Win& win, std::string str) { stack_.push_front(SType{SType::WIN, MPI_COMM_NULL, win, str}) ;} 26 void registerWindow(MPI_Win& win) { stack_.push_front(SType{SType::WIN, MPI_COMM_NULL, win, MemTrack::backTrace(2)}) ;} 24 27 void release(void) 25 28 { -
XIOS3/trunk/src/mpi_tools.cpp
r2578 r2580 22 22 { 23 23 auto it = commTrack_.find(comm) ; 24 if (it == commTrack_.end()) ERROR("CCommtrack::releaseComm", << "Communicator not allocated : " << endl)24 if (it == commTrack_.end()) info(100)<<"WARNING : CCommtrack::releaseComm => Communicator not allocated !" << endl ; 25 25 else commTrack_.erase(it) ; 26 26 } -
XIOS3/trunk/src/node/context.cpp
r2564 r2580 599 599 intraCommClient=intraComm_ ; 600 600 MPI_Comm_dup(intraComm_, &intraCommServer) ; 601 CXios::getMpiGarbageCollector().registerCommunicator(intraCommServer) ; 601 602 602 603 CContextClient* client = CContextClient::getNew(this, intraCommClient, interCommClient) ; -
XIOS3/trunk/src/server.cpp
r2576 r2580 102 102 103 103 MPI_Comm_split(globalComm, color, commRank, &serverComm) ; 104 CXios::getMpiGarbageCollector().registerCommunicator(serverComm) ; 105 104 106 } 105 107 else // using OASIS … … 118 120 } 119 121 MPI_Comm_dup(serverComm, &intraComm_); 122 CXios::getMpiGarbageCollector().registerCommunicator(intraComm_) ; 120 123 121 124 CTimer::get("XIOS").resume() ; … … 165 168 MPI_Comm_rank(CXios::getXiosComm(), &commRank) ; 166 169 MPI_Comm_split(CXios::getXiosComm(),true,commRank,&serversComm_) ; 170 CXios::getMpiGarbageCollector().registerCommunicator(serversComm_) ; 167 171 168 172 CXios::setUsingServer() ; … … 443 447 { 444 448 MPI_Intercomm_create(intraComm, 0, globalComm, clientsRank[i], 3141, &interComm); 449 CXios::getMpiGarbageCollector().registerCommunicator(interComm) ; 445 450 interCommLeft.push_back(interComm) ; 446 451 MPI_Comm_free(&intraComm) ; … … 598 603 599 604 CContext::removeAllContexts() ; // free memory for related context 600 605 601 606 CXios::getMpiGarbageCollector().release() ; // release unfree MPI ressources 602 607 MPI_Comm xiosComm=CXios::getXiosComm() ; 608 MPI_Comm_free(&xiosComm) ; 603 609 CMemChecker::logMem( "CServer::finalize", true ); 604 610 -
XIOS3/trunk/src/transport/p2p_context_client.cpp
r2556 r2580 32 32 33 33 MPI_Intercomm_merge(interComm_,false, &interCommMerged_) ; 34 CXios::getMpiGarbageCollector().registerCommunicator(interCommMerged_) ; 34 35 35 36 MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf_) ; // for windows 37 CXios::getMpiGarbageCollector().registerCommunicator(commSelf_) ; 36 38 eventScheduler_ = parent->getEventScheduler() ; 37 39 timeLine = 1; -
XIOS3/trunk/src/transport/p2p_context_server.cpp
r2566 r2580 37 37 38 38 MPI_Comm_dup(intraComm, &processEventBarrier_) ; 39 39 CXios::getMpiGarbageCollector().registerCommunicator(processEventBarrier_) ; 40 40 41 currentTimeLine=1; 41 42 scheduled=false; … … 43 44 44 45 MPI_Intercomm_merge(interComm_,true,&interCommMerged_) ; 46 CXios::getMpiGarbageCollector().registerCommunicator(interCommMerged_) ; 45 47 MPI_Comm_split(intraComm_, intraCommRank, intraCommRank, &commSelf_) ; // for windows 48 CXios::getMpiGarbageCollector().registerCommunicator(commSelf_) ; 46 49 47 50 itLastTimeLine=lastTimeLine.begin() ;
Note: See TracChangeset
for help on using the changeset viewer.