Ignore:
Timestamp:
11/13/14 15:09:14 (9 years ago)
Author:
mhnguyen
Message:

Implementing buffer size auto-detection for mode client -server

+) Process xml tree in client side then send all the information to server
+) Only information enabled fields in enabled files are sent to server
+) Some important change in structure of code which must be refactored

Test
+) On Curie
+) Only mode client-server
+) Passed for all tests

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/context_server.cpp

    r501 r509  
    3737    scheduled=false ; 
    3838    finished=false ; 
    39      
     39 
    4040    boost::hash<string> hashString ; 
    4141    hashId=hashString(context->getId()) ; 
     
    8080          it=buffers.find(rank) ; 
    8181          if (it==buffers.end()) 
    82             it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer))).first ; 
    83           MPI_Get_count(&status,MPI_CHAR,&count) ; 
    84           if (it->second->isBufferFree(count)) 
    8582          { 
    86             addr=(char*)it->second->getBuffer(count) ; 
    87             MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]) ; 
    88             bufferRequest[rank]=addr ; 
     83            StdSize buffSize = 0; 
     84            MPI_Recv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &status); 
     85            it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first ; 
     86          } 
     87          else 
     88          { 
     89            MPI_Get_count(&status,MPI_CHAR,&count) ; 
     90            if (it->second->isBufferFree(count)) 
     91            { 
     92              addr=(char*)it->second->getBuffer(count) ; 
     93              MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]) ; 
     94              bufferRequest[rank]=addr ; 
     95            } 
    8996          } 
    9097        } 
     
    158165    { 
    159166      event=it->second ; 
    160        
     167 
    161168      if (event->isFull()) 
    162169      { 
    163170        if (!scheduled && !CXios::isServer) 
    164171        { 
    165           CServer::eventScheduler->registerEvent(currentTimeLine,hashId) ;   
     172          CServer::eventScheduler->registerEvent(currentTimeLine,hashId) ; 
    166173          scheduled=true ; 
    167174        } 
    168         else if (CXios::isServer || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) )  
     175        else if (CXios::isServer || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) ) 
    169176        { 
    170177         CTimer::get("Process events").resume() ; 
Note: See TracChangeset for help on using the changeset viewer.