Changeset 2547 for XIOS3/trunk/src/server.cpp
- Timestamp:
- 08/29/23 17:24:04 (10 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/server.cpp
r2535 r2547 25 25 #include "workflow_graph.hpp" 26 26 #include "release_static_allocation.hpp" 27 #include "thread_manager.hpp" 27 28 #include <sys/stat.h> 28 29 #include <unistd.h> … … 68 69 if (!CXios::usingOasis) 69 70 { 70 if (!is_MPI_Initialized) MPI_Init(NULL, NULL); 71 if (!is_MPI_Initialized) 72 { 73 int required = MPI_THREAD_SERIALIZED ; 74 int provided ; 75 MPI_Init_thread(NULL,NULL, required, &provided) ; 76 } 71 77 72 78 // split the global communicator … … 99 105 else // using OASIS 100 106 { 101 if (!is_MPI_Initialized) driver_ = new CThirdPartyDriver(); 107 108 if (!is_MPI_Initialized) 109 { 110 int required = MPI_THREAD_SERIALIZED ; 111 int provided ; 112 MPI_Init_thread(NULL,NULL, required, &provided) ; 113 } 114 115 driver_ = new CThirdPartyDriver(); 102 116 103 117 driver_->getComponentCommunicator( serverComm ); … … 200 214 { 201 215 ressourcesManager->createPool(CXios::defaultPoolId, nbRessources) ; 202 ressourcesManager->waitPoolRegistration(CXios::defaultPoolId) ; 216 if (CThreadManager::isUsingThreads()) 217 while(!ressourcesManager->hasPool(CXios::defaultPoolId)) 218 { 219 daemonsManager->eventLoop() ; 220 CThreadManager::yield() ; 221 } 222 else ressourcesManager->waitPoolRegistration(CXios::defaultPoolId) ; 223 203 224 servicesManager->createServices(CXios::defaultPoolId, CXios::defaultWriterId, CServicesManager::WRITER,nbRessources,1) ; 204 servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultWriterId) ; 225 if (CThreadManager::isUsingThreads()) 226 while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultWriterId,0)) 227 { 228 daemonsManager->eventLoop() ; 229 CThreadManager::yield() ; 230 } 231 else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultWriterId) ; 232 205 233 servicesManager->createServicesOnto(CXios::defaultPoolId, CXios::defaultReaderId, CServicesManager::READER, CXios::defaultWriterId) ; 206 servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 234 if (CThreadManager::isUsingThreads()) 235 { 236 daemonsManager->eventLoop() ; 237 while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultReaderId, 0)) CThreadManager::yield() ; 238 } 239 else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 207 240 } 208 241 else … … 214 247 if (nbPoolsServer2 == 0) nbPoolsServer2 = nprocsServer; 215 248 ressourcesManager->createPool(CXios::defaultPoolId, nbRessources) ; 216 ressourcesManager->waitPoolRegistration(CXios::defaultPoolId) ; 249 if (CThreadManager::isUsingThreads()) 250 while(!ressourcesManager->hasPool(CXios::defaultPoolId)) 251 { 252 daemonsManager->eventLoop() ; 253 CThreadManager::yield() ; 254 } 255 else ressourcesManager->waitPoolRegistration(CXios::defaultPoolId) ; 256 217 257 servicesManager->createServices(CXios::defaultPoolId, CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ; 218 servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultGathererId) ; 258 if (CThreadManager::isUsingThreads()) 259 while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultGathererId,0)) 260 { 261 daemonsManager->eventLoop() ; 262 CThreadManager::yield() ; 263 } 264 else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultGathererId) ; 265 219 266 servicesManager->createServicesOnto(CXios::defaultPoolId, CXios::defaultReaderId, CServicesManager::READER, CXios::defaultGathererId) ; 220 servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 267 if (CThreadManager::isUsingThreads()) 268 while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultReaderId, 0)) 269 { 270 daemonsManager->eventLoop() ; 271 CThreadManager::yield() ; 272 } 273 else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultReaderId) ; 274 221 275 servicesManager->createServices(CXios::defaultPoolId, CXios::defaultWriterId, CServicesManager::WRITER, nprocsServer, nbPoolsServer2) ; 222 servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultWriterId) ; 276 if (CThreadManager::isUsingThreads()) 277 for(int i=0; i<nbPoolsServer2; i++) 278 while(!servicesManager->hasService(CXios::defaultPoolId, CXios::defaultWriterId,i)) 279 { 280 daemonsManager->eventLoop() ; 281 CThreadManager::yield() ; 282 } 283 else servicesManager->waitServiceRegistration(CXios::defaultPoolId, CXios::defaultWriterId) ; 223 284 } 224 285 } … … 233 294 { 234 295 daemonsManager->eventLoop() ; 296 if (CThreadManager::isUsingThreads()) CThreadManager::yield(); 235 297 MPI_Test(&req,&ok,&status) ; 236 298 } 237 299 238 300 239 testingEventScheduler() ;301 //testingEventScheduler() ; 240 302 /* 241 303 MPI_Request req ; … … 262 324 { 263 325 finished=daemonsManager->eventLoop() ; 326 if (CThreadManager::isUsingThreads()) CThreadManager::yield() ; 264 327 } 265 328 CTimer::get("XIOS event loop").suspend() ;
Note: See TracChangeset
for help on using the changeset viewer.