Ignore:
Timestamp:
01/25/23 16:59:46 (16 months ago)
Author:
ymipsl
Message:

Merge XIOS_FILE_SERVICE dev branch into trunk

YM

Location:
XIOS3/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/trunk

  • XIOS3/trunk/src/transport/legacy_context_client.cpp

    r2343 r2458  
    1313#include "server.hpp" 
    1414#include "services.hpp" 
     15#include "ressources_manager.hpp" 
    1516#include <boost/functional/hash.hpp> 
    1617#include <random> 
     
    110111      } 
    111112       
     113      MPI_Request req ; 
     114      MPI_Status status ; 
     115      MPI_Ibarrier(intraComm,&req) ; 
     116      int flag ; 
     117      MPI_Test(&req,&flag,&status) ; 
     118      while(!flag)  
     119      { 
     120        callGlobalEventLoop() ; 
     121        MPI_Test(&req,&flag,&status) ; 
     122      } 
     123 
     124 
    112125      timeLine++; 
    113126    } 
     
    126139     * \return whether the already allocated buffers could be used 
    127140    */ 
    128     bool CLegacyContextClient::getBuffers(const size_t timeLine, const list<int>& serverList, const list<int>& sizeList, list<CBufferOut*>& retBuffers, 
    129                                     bool nonBlocking /*= false*/) 
     141    void CLegacyContextClient::getBuffers(const size_t timeLine, const list<int>& serverList, const list<int>& sizeList, list<CBufferOut*>& retBuffers) 
    130142    { 
    131143      list<int>::const_iterator itServer, itSize; 
     
    134146      list<CClientBuffer*>::iterator itBuffer; 
    135147      bool areBuffersFree; 
    136  
     148      
    137149      for (itServer = serverList.begin(); itServer != serverList.end(); itServer++) 
    138150      { 
     
    140152        if (it == buffers.end()) 
    141153        { 
     154          CTokenManager* tokenManager = CXios::getRessourcesManager()->getTokenManager() ; 
     155          size_t token = tokenManager->getToken() ; 
     156          while (!tokenManager->lockToken(token)) callGlobalEventLoop() ; 
    142157          newBuffer(*itServer); 
    143158          it = buffers.find(*itServer); 
     159          checkAttachWindows(it->second,it->first) ; 
     160          tokenManager->unlockToken(token) ; 
    144161        } 
    145162        bufferList.push_back(it->second); 
     
    177194        } 
    178195 
    179       } while (!areBuffersFree && !nonBlocking); 
     196      } while (!areBuffersFree); 
    180197      CTimer::get("Blocking time").suspend(); 
    181198 
    182       if (areBuffersFree) 
    183       { 
    184         for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) 
    185           retBuffers.push_back((*itBuffer)->getBuffer(timeLine, *itSize)); 
    186       } 
    187       return areBuffersFree; 
     199      for (itBuffer = bufferList.begin(), itSize = sizeList.begin(); itBuffer != bufferList.end(); itBuffer++, itSize++) 
     200        retBuffers.push_back((*itBuffer)->getBuffer(timeLine, *itSize)); 
    188201   } 
    189202 
     
    225238      bufOut->put(sendBuff, 4);  
    226239      buffer->checkBuffer(true); 
    227        
     240/* 
    228241       // create windows dynamically for one-sided 
    229242      if (!isAttachedModeEnabled()) 
     
    254267      buffer->attachWindows(windows_[rank]) ; 
    255268      if (!isAttachedModeEnabled()) MPI_Barrier(winComm_[rank]) ; 
    256         
    257    } 
    258  
     269  */      
     270   } 
     271 
     272   void CLegacyContextClient::checkAttachWindows(CClientBuffer* buffer, int rank) 
     273   { 
     274      if (!buffer->isAttachedWindows()) 
     275      { 
     276           // create windows dynamically for one-sided 
     277        if (!isAttachedModeEnabled()) 
     278        {  
     279          CTimer::get("create Windows").resume() ; 
     280          MPI_Comm interComm ; 
     281          MPI_Intercomm_create(commSelf_, 0, interCommMerged_, clientSize+rank, 0, &interComm) ; 
     282          MPI_Intercomm_merge(interComm, false, &winComm_[rank]) ; 
     283          CXios::getMpiGarbageCollector().registerCommunicator(winComm_[rank]) ; 
     284          MPI_Comm_free(&interComm) ; 
     285          windows_[rank].resize(2) ; 
     286       
     287          MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); 
     288          CXios::getMpiGarbageCollector().registerWindow(windows_[rank][0]) ; 
     289       
     290          MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]);    
     291          CXios::getMpiGarbageCollector().registerWindow(windows_[rank][1]) ; 
     292 
     293          CTimer::get("create Windows").suspend() ; 
     294          buffer->attachWindows(windows_[rank]) ; 
     295          MPI_Barrier(winComm_[rank]) ; 
     296        } 
     297        else 
     298        { 
     299          winComm_[rank] = MPI_COMM_NULL ; 
     300          windows_[rank].resize(2) ; 
     301          windows_[rank][0] = MPI_WIN_NULL ; 
     302          windows_[rank][1] = MPI_WIN_NULL ; 
     303          buffer->attachWindows(windows_[rank]) ; 
     304        } 
     305 
     306      } 
     307    } 
     308 
     309 
     310   
    259311   /*! 
    260312   Verify state of buffers. Buffer is under pending state if there is no message on it 
Note: See TracChangeset for help on using the changeset viewer.