Ignore:
Timestamp:
03/13/17 17:21:04 (7 years ago)
Author:
oabramkina
Message:

dev: test for secondary servers added.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/server.cpp

    r1054 r1071  
    2222//    list<MPI_Comm> CServer::interComm ; 
    2323    std::list<MPI_Comm> CServer::contextInterComms; 
     24    std::list<MPI_Comm> CServer::contextIntraComms; 
    2425    int CServer::serverLevel = 0 ; 
    25     int CServer::serverLeader = 0; 
    26     int CServer::serverSize = 0; 
     26    int CServer::serverLeader_ = 0; 
     27    int CServer::serverSize_ = 0; 
    2728    int CServer::nbPools = 0; 
    2829    int CServer::poolId = 0; 
     30    int CServer::nbContexts_ = 0; 
    2931    bool CServer::isRoot = false ; 
    3032    int CServer::rank = INVALID_RANK; 
     
    103105        { 
    104106          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) ) 
    108110          { 
    109111            serverLevel = 1; 
     
    112114          { 
    113115            serverLevel = 2; 
    114             poolId = serverRank - serverSize + nbPools; 
     116            poolId = serverRank - serverSize_ + nbPools; 
    115117            myColor = rank; 
    116118          } 
     
    156158            } 
    157159            else 
    158               serverLeader = it->second; 
     160              serverLeader_ = it->second; 
    159161          } 
    160162 
    161163          for (int i = 0; i < nbPools; ++i) 
    162164          { 
    163             srvSndLeader = serverLeader + serverSize - nbPools + i; 
     165            srvSndLeader = serverLeader_ + serverSize_ - nbPools + i; 
    164166            int intraCommSize, intraCommRank ; 
    165167            MPI_Comm_size(intraComm, &intraCommSize) ; 
     
    239241 
    240242      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++) 
    241246        MPI_Comm_free(&(*it)); 
    242247 
     
    310315              { 
    311316                MPI_Send(&msg,1,MPI_INT,0,0,*itr) ; 
    312 //                itr = interCommRight.erase(itr) ; 
    313317              } 
    314318              MPI_Comm_free(&(*it)); 
     
    488492       contextList[contextId]=context; 
    489493 
    490        // All type of servers initialize its own server (CContextServer) 
     494       // Primary or classical server: initialize its own server (CContextServer) 
     495       MPI_Comm inter; 
    491496       if (serverLevel < 2) 
    492497       { 
    493498         MPI_Comm contextInterComm; 
    494499         MPI_Intercomm_create(intraComm, 0, CXios::globalComm, leaderRank, 10+leaderRank, &contextInterComm); 
    495          MPI_Comm inter; 
    496500         MPI_Intercomm_merge(contextInterComm,1,&inter); 
    497501         MPI_Barrier(inter); 
     
    499503         context->initServer(intraComm,contextInterComm); 
    500504         contextInterComms.push_back(contextInterComm); 
    501        } 
     505 
     506       } 
     507       // Secondary server: initialize its own server (CContextServer) 
    502508       else if (serverLevel == 2) 
    503509       { 
    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()); 
    505514       } 
    506515 
     
    520529           CBufferOut buffer(buff,messageSize) ; 
    521530           buffer<<msg ; 
    522            int sndServerGloRanks = serverSize-nbPools+serverLeader +i;  // the assumption is that there is only one proc per secondary server pool 
     531           int sndServerGloRanks = serverSize_-nbPools+serverLeader_ +i;  // the assumption is that there is only one proc per secondary server pool 
    523532           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) ; 
    525540           delete [] buff ; 
    526541         } 
     542         ++nbContexts_; 
    527543       } 
    528544     } 
     
    539555         if (finished) 
    540556         { 
     557//           it->second->freeComms();  // deallocate internally allcoated context communicators 
    541558           contextList.erase(it) ; 
    542559           break ; 
    543560         } 
    544561         else 
     562         { 
    545563           finished=it->second->checkBuffersAndListen(); 
     564         } 
    546565       } 
    547566     } 
     
    579598      { 
    580599        if (serverLevel == 1) 
    581           id = rank-serverLeader; 
     600          id = rank-serverLeader_; 
    582601        else 
    583602          id = poolId; 
Note: See TracChangeset for help on using the changeset viewer.