Changeset 2258 for XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp
- Timestamp:
- 11/16/21 17:37:42 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp
r2246 r2258 60 60 // Why ? Just because on openMPI, it reduce the creation time of windows otherwhise which increase quadratically 61 61 // We don't know the reason 62 62 double time ; 63 63 MPI_Comm commSelf ; 64 64 MPI_Comm_split(intraComm_,clientRank,clientRank, &commSelf) ; 65 vector<MPI_Comm> dummyComm(serverSize) ; 66 for(int rank=0; rank<serverSize; rank++) MPI_Intercomm_create(commSelf, 0, interCommMerged, clientSize+rank, 0, &dummyComm[rank]) ; 67 68 // create windows for one-sided 69 windows.resize(serverSize) ; 70 MPI_Comm winComm ; 71 for(int rank=0; rank<serverSize; rank++) 72 { 73 windows[rank].resize(2) ; 74 MPI_Comm_split(interCommMerged, rank, clientRank, &winComm); 75 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm, &windows[rank][0]); 76 MPI_Win_create_dynamic(MPI_INFO_NULL, winComm, &windows[rank][1]); 77 // ym : Warning : intelMPI doesn't support that communicator of windows be deallocated before the windows deallocation, crash at MPI_Win_lock 78 // Bug or not ? 79 // MPI_Comm_free(&winComm) ; 80 } 81 82 // free dummy intercommunicator => take times ? 83 for(int rank=0; rank<serverSize; rank++) MPI_Comm_free(&dummyComm[rank]) ; 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 } 84 79 MPI_Comm_free(&commSelf) ; 85 86 80 CTimer::get("create Windows").resume() ; 87 81 } … … 345 339 346 340 vector<MPI_Win> Wins(2,MPI_WIN_NULL) ; 347 if (!isAttachedModeEnabled()) Wins=windows [rank] ;341 if (!isAttachedModeEnabled()) Wins=windows_[rank] ; 348 342 349 343 CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, Wins, clientRank, rank, mapBufferSize_[rank], maxEventSizes[rank]); … … 392 386 for(int rank=0; rank<serverSize; rank++) 393 387 { 394 MPI_Win_free(&windows[rank][0]); 395 MPI_Win_free(&windows[rank][1]); 388 MPI_Win_free(&windows_[rank][0]); 389 MPI_Win_free(&windows_[rank][1]); 390 MPI_Comm_free(&winComm_[rank]) ; 396 391 } 397 392 }
Note: See TracChangeset
for help on using the changeset viewer.