Changeset 1071 for XIOS/dev/dev_olga/src/server.cpp
- Timestamp:
- 03/13/17 17:21:04 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_olga/src/server.cpp
r1054 r1071 22 22 // list<MPI_Comm> CServer::interComm ; 23 23 std::list<MPI_Comm> CServer::contextInterComms; 24 std::list<MPI_Comm> CServer::contextIntraComms; 24 25 int CServer::serverLevel = 0 ; 25 int CServer::serverLeader = 0;26 int CServer::serverSize = 0;26 int CServer::serverLeader_ = 0; 27 int CServer::serverSize_ = 0; 27 28 int CServer::nbPools = 0; 28 29 int CServer::poolId = 0; 30 int CServer::nbContexts_ = 0; 29 31 bool CServer::isRoot = false ; 30 32 int CServer::rank = INVALID_RANK; … … 103 105 { 104 106 int serverRank = rank - leaders[hashServer]; // server proc rank starting 0 105 serverSize = size - leaders[hashServer];106 nbPools = serverSize * CXios::ratioServer2 / 100;107 if ( serverRank < (serverSize - nbPools) )107 serverSize_ = size - leaders[hashServer]; 108 nbPools = serverSize_ * CXios::ratioServer2 / 100; 109 if ( serverRank < (serverSize_ - nbPools) ) 108 110 { 109 111 serverLevel = 1; … … 112 114 { 113 115 serverLevel = 2; 114 poolId = serverRank - serverSize + nbPools;116 poolId = serverRank - serverSize_ + nbPools; 115 117 myColor = rank; 116 118 } … … 156 158 } 157 159 else 158 serverLeader = it->second;160 serverLeader_ = it->second; 159 161 } 160 162 161 163 for (int i = 0; i < nbPools; ++i) 162 164 { 163 srvSndLeader = serverLeader + serverSize- nbPools + i;165 srvSndLeader = serverLeader_ + serverSize_ - nbPools + i; 164 166 int intraCommSize, intraCommRank ; 165 167 MPI_Comm_size(intraComm, &intraCommSize) ; … … 239 241 240 242 for (std::list<MPI_Comm>::iterator it = contextInterComms.begin(); it != contextInterComms.end(); it++) 243 MPI_Comm_free(&(*it)); 244 245 for (std::list<MPI_Comm>::iterator it = contextIntraComms.begin(); it != contextIntraComms.end(); it++) 241 246 MPI_Comm_free(&(*it)); 242 247 … … 310 315 { 311 316 MPI_Send(&msg,1,MPI_INT,0,0,*itr) ; 312 // itr = interCommRight.erase(itr) ;313 317 } 314 318 MPI_Comm_free(&(*it)); … … 488 492 contextList[contextId]=context; 489 493 490 // All type of servers initialize its own server (CContextServer) 494 // Primary or classical server: initialize its own server (CContextServer) 495 MPI_Comm inter; 491 496 if (serverLevel < 2) 492 497 { 493 498 MPI_Comm contextInterComm; 494 499 MPI_Intercomm_create(intraComm, 0, CXios::globalComm, leaderRank, 10+leaderRank, &contextInterComm); 495 MPI_Comm inter;496 500 MPI_Intercomm_merge(contextInterComm,1,&inter); 497 501 MPI_Barrier(inter); … … 499 503 context->initServer(intraComm,contextInterComm); 500 504 contextInterComms.push_back(contextInterComm); 501 } 505 506 } 507 // Secondary server: initialize its own server (CContextServer) 502 508 else if (serverLevel == 2) 503 509 { 504 context->initServer(intraComm, interCommLeft.front()); 510 MPI_Comm_dup(interCommLeft.front(), &inter); 511 contextInterComms.push_back(inter); 512 context->initServer(intraComm, contextInterComms.back()); 513 // context->initServer(intraComm, interCommLeft.front()); 505 514 } 506 515 … … 520 529 CBufferOut buffer(buff,messageSize) ; 521 530 buffer<<msg ; 522 int sndServerGloRanks = serverSize -nbPools+serverLeader+i; // the assumption is that there is only one proc per secondary server pool531 int sndServerGloRanks = serverSize_-nbPools+serverLeader_ +i; // the assumption is that there is only one proc per secondary server pool 523 532 MPI_Send(buff, buffer.count(), MPI_CHAR, sndServerGloRanks, 1, CXios::globalComm) ; 524 context->initClient(intraComm, *it) ; 533 MPI_Comm_dup(*it, &inter); 534 contextInterComms.push_back(inter); 535 MPI_Comm_dup(intraComm, &inter); 536 contextIntraComms.push_back(inter); 537 context->initClient(contextIntraComms.back(), contextInterComms.back()) ; 538 // context->initClient(intraComm, contextPrimInterComms.back()) ; 539 // context->initClient(intraComm, *it) ; 525 540 delete [] buff ; 526 541 } 542 ++nbContexts_; 527 543 } 528 544 } … … 539 555 if (finished) 540 556 { 557 // it->second->freeComms(); // deallocate internally allcoated context communicators 541 558 contextList.erase(it) ; 542 559 break ; 543 560 } 544 561 else 562 { 545 563 finished=it->second->checkBuffersAndListen(); 564 } 546 565 } 547 566 } … … 579 598 { 580 599 if (serverLevel == 1) 581 id = rank-serverLeader ;600 id = rank-serverLeader_; 582 601 else 583 602 id = poolId;
Note: See TracChangeset
for help on using the changeset viewer.