Ignore:
Timestamp:
11/16/21 17:37:42 (2 years ago)
Author:
ymipsl
Message:

One sided protocol improvment.
YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/context_client.cpp

    r2246 r2258  
    6060        // Why ? Just because on openMPI, it reduce the creation time of windows otherwhise which increase quadratically 
    6161        // We don't know the reason 
    62        
     62        double time ; 
    6363        MPI_Comm commSelf ; 
    6464        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        } 
    8479        MPI_Comm_free(&commSelf) ; 
    85  
    8680        CTimer::get("create Windows").resume() ; 
    8781     } 
     
    345339       
    346340      vector<MPI_Win> Wins(2,MPI_WIN_NULL) ; 
    347       if (!isAttachedModeEnabled()) Wins=windows[rank] ; 
     341      if (!isAttachedModeEnabled()) Wins=windows_[rank] ; 
    348342   
    349343      CClientBuffer* buffer = buffers[rank] = new CClientBuffer(interComm, Wins, clientRank, rank, mapBufferSize_[rank], maxEventSizes[rank]); 
     
    392386        for(int rank=0; rank<serverSize; rank++) 
    393387        { 
    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]) ; 
    396391        } 
    397392      }  
Note: See TracChangeset for help on using the changeset viewer.