Changeset 2259 for XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp
- Timestamp:
- 11/17/21 16:56:04 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp
r2258 r2259 50 50 computeLeader(clientRank, clientSize, serverSize, ranksServerLeader, ranksServerNotLeader); 51 51 52 if (flag) MPI_Intercomm_merge(interComm_,false, &interCommMerged) ; 53 54 if (!isAttachedModeEnabled()) 55 { 56 57 CTimer::get("create Windows").resume() ; 58 59 // We create dummy pair of intercommunicator between clients and server 60 // Why ? Just because on openMPI, it reduce the creation time of windows otherwhise which increase quadratically 61 // We don't know the reason 62 double time ; 63 MPI_Comm commSelf ; 64 MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf) ; 65 MPI_Comm interComm ; 66 winComm_.resize(serverSize) ; 67 windows_.resize(serverSize) ; 68 for(int rank=0; rank<serverSize; rank++) 69 { 70 time=MPI_Wtime() ; 71 MPI_Intercomm_create(commSelf, 0, interCommMerged, clientSize+rank, 0, &interComm) ; 72 MPI_Intercomm_merge(interComm, false, &winComm_[rank]) ; 73 windows_[rank].resize(2) ; 74 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); 75 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]); 76 time=MPI_Wtime()-time ; 77 info(100)<< "MPI_Win_create_dynamic : client to server rank "<<rank<<" => "<<time/1e-6<<" us"<<endl ; 78 } 79 MPI_Comm_free(&commSelf) ; 80 CTimer::get("create Windows").resume() ; 81 } 52 if (flag) MPI_Intercomm_merge(interComm_,false, &interCommMerged_) ; 53 54 MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf_) ; // for windows 82 55 83 56 auto time=chrono::system_clock::now().time_since_epoch().count() ; … … 338 311 } 339 312 340 vector<MPI_Win> Wins(2,MPI_WIN_NULL) ; 341 if (!isAttachedModeEnabled()) Wins=windows_[rank] ; 342 343 CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, Wins, clientRank, rank, mapBufferSize_[rank], maxEventSizes[rank]); 313 CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, rank, mapBufferSize_[rank], maxEventSizes[rank]); 344 314 if (isGrowableBuffer_) buffer->setGrowableBuffer(1.2) ; 345 315 else buffer->fixBuffer() ; … … 354 324 bufOut->put(sendBuff, 4); 355 325 buffer->checkBuffer(true); 356 326 327 // create windows dynamically for one-sided 328 if (!isAttachedModeEnabled()) 329 { 330 CTimer::get("create Windows").resume() ; 331 MPI_Comm interComm ; 332 MPI_Intercomm_create(commSelf_, 0, interCommMerged_, clientSize+rank, 0, &interComm) ; 333 MPI_Intercomm_merge(interComm, false, &winComm_[rank]) ; 334 MPI_Comm_free(&interComm) ; 335 windows_[rank].resize(2) ; 336 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); 337 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]); 338 CTimer::get("create Windows").suspend() ; 339 } 340 else 341 { 342 winComm_[rank] = MPI_COMM_NULL ; 343 windows_[rank].resize(2) ; 344 windows_[rank][0] = MPI_WIN_NULL ; 345 windows_[rank][1] = MPI_WIN_NULL ; 346 } 347 buffer->attachWindows(windows_[rank]) ; 357 348 } 358 349 … … 384 375 if (!isAttachedModeEnabled()) 385 376 { 386 for(int rank=0; rank<serverSize; rank++) 387 { 377 for(auto& it : winComm_) 378 { 379 int rank = it.first ; 388 380 MPI_Win_free(&windows_[rank][0]); 389 381 MPI_Win_free(&windows_[rank][1]);
Note: See TracChangeset
for help on using the changeset viewer.