Changeset 2458 for XIOS3/trunk/src/transport/legacy_context_client.cpp
- Timestamp:
- 01/25/23 16:59:46 (16 months ago)
- Location:
- XIOS3/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk
-
Property
svn:mergeinfo
set to
False
/XIOS3/dev/XIOS_FILE_SERVICES merged eligible
-
Property
svn:mergeinfo
set to
False
-
XIOS3/trunk/src/transport/legacy_context_client.cpp
r2343 r2458 13 13 #include "server.hpp" 14 14 #include "services.hpp" 15 #include "ressources_manager.hpp" 15 16 #include <boost/functional/hash.hpp> 16 17 #include <random> … … 110 111 } 111 112 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 112 125 timeLine++; 113 126 } … … 126 139 * \return whether the already allocated buffers could be used 127 140 */ 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) 130 142 { 131 143 list<int>::const_iterator itServer, itSize; … … 134 146 list<CClientBuffer*>::iterator itBuffer; 135 147 bool areBuffersFree; 136 148 137 149 for (itServer = serverList.begin(); itServer != serverList.end(); itServer++) 138 150 { … … 140 152 if (it == buffers.end()) 141 153 { 154 CTokenManager* tokenManager = CXios::getRessourcesManager()->getTokenManager() ; 155 size_t token = tokenManager->getToken() ; 156 while (!tokenManager->lockToken(token)) callGlobalEventLoop() ; 142 157 newBuffer(*itServer); 143 158 it = buffers.find(*itServer); 159 checkAttachWindows(it->second,it->first) ; 160 tokenManager->unlockToken(token) ; 144 161 } 145 162 bufferList.push_back(it->second); … … 177 194 } 178 195 179 } while (!areBuffersFree && !nonBlocking);196 } while (!areBuffersFree); 180 197 CTimer::get("Blocking time").suspend(); 181 198 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)); 188 201 } 189 202 … … 225 238 bufOut->put(sendBuff, 4); 226 239 buffer->checkBuffer(true); 227 240 /* 228 241 // create windows dynamically for one-sided 229 242 if (!isAttachedModeEnabled()) … … 254 267 buffer->attachWindows(windows_[rank]) ; 255 268 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 259 311 /*! 260 312 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.