Changeset 1054 for XIOS/dev/dev_olga/src/node/context.cpp
- Timestamp:
- 02/17/17 19:51:36 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/node/context.cpp
r1030 r1054 249 249 250 250 hasClient = true; 251 251 252 if (CServer::serverLevel != 1) 252 // if (CXios::serverLevel != 1) 253 // initClient is called by client pool 253 // initClient is called by client 254 254 { 255 255 client = new CContextClient(this, intraComm, interComm, cxtServer); 256 256 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 258 272 else 259 // initClient is called by primary server pool273 // initClient is called by primary server 260 274 { 261 275 clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); … … 263 277 } 264 278 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 286 290 } 287 291 … … 353 357 // client = new CContextClient(this,intraComm,interComm, cxtClient); 354 358 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()) ; 361 365 362 366 MPI_Comm intraCommClient, interCommClient; … … 368 372 else 369 373 { 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); 374 378 } 375 379 … … 377 381 378 382 //! 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 else396 {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 // } 400 404 401 405 //! Try to send the buffers and receive possible answers … … 405 409 { 406 410 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 409 419 else if (CServer::serverLevel == 1) 410 420 { 411 421 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; 412 428 for (int i = 0; i < clientPrimServer.size(); ++i) 429 { 413 430 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); 419 435 } 420 436 return ( serverFinished && serverPrimFinished); 421 437 } 438 422 439 else if (CServer::serverLevel == 2) 423 440 { 424 441 client->checkBuffers(); 425 return server->eventLoop(); 442 bool hasTmpBufferedEvent = client->hasTemporarilyBufferedEvent(); 443 if (hasTmpBufferedEvent) 444 hasTmpBufferedEvent = !client->sendTemporarilyBufferedEvent(); 445 return server->eventLoop(!hasTmpBufferedEvent); 426 446 } 427 447 } … … 433 453 { 434 454 finalized = true; 435 if (hasClient) sendRegistry() ; 455 // if (hasClient) sendRegistry() ; 456 457 client->finalize(); 458 while (!server->hasFinished()) 459 { 460 server->eventLoop(); 461 } 436 462 437 463 if ((hasClient) && (hasServer)) … … 450 476 } 451 477 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) 459 482 { 460 483 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) ; 463 486 } 464 487 … … 472 495 MPI_Comm_free(&(*it)); 473 496 comms.clear(); 474 475 497 476 498 } … … 1627 1649 } 1628 1650 1651 bool CContext::isFinalized(void) 1652 { 1653 return finalized; 1654 } 1655 1629 1656 } // namespace xios
Note: See TracChangeset
for help on using the changeset viewer.