Ignore:
Timestamp:
11/17/21 16:56:04 (3 years ago)
Author:
ymipsl
Message:

Improvment of one-sided protocol.
Windows are now created in the flight for each client-server connection.
YM

File:
1 edited

Legend:

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

    r2258 r2259  
    7373 
    7474 
    75     if (!isAttachedModeEnabled()) 
    76     { 
    77       CTimer::get("create Windows").resume() ; 
    78  
    79       MPI_Intercomm_merge(interComm_,true,&interCommMerged) ; 
    80  
    81       double time ; 
    82       windows_.resize(clientSize_) ; 
    83       MPI_Comm commSelf ; 
    84       MPI_Comm_split(intraComm_, intraCommRank, intraCommRank, &commSelf) ; 
    85       MPI_Comm interComm ; 
    86       winComm_.resize(clientSize_) ; 
    87       for(int rank=0; rank<clientSize_ ; rank++)  
    88       { 
    89         time=MPI_Wtime() ; 
    90         MPI_Intercomm_create(commSelf, 0, interCommMerged, rank, 0 , &interComm) ; 
    91         MPI_Intercomm_merge(interComm, true, &winComm_[rank]) ; 
    92         windows_[rank].resize(2) ; 
    93         MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); 
    94         MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]);   
    95         time=MPI_Wtime()-time ; 
    96         info(100)<< "MPI_Win_create_dynamic : server to client rank "<<rank<<" => "<<time/1e-6<<" us"<<endl ; 
    97       } 
    98       MPI_Comm_free(&commSelf) ; 
    99       CTimer::get("create Windows").suspend() ; 
    100     } 
    101     else  
    102     { 
    103       winComm_.resize(clientSize_) ; 
    104       windows_.resize(clientSize_) ; 
    105       for(int rank=0; rank<clientSize_ ; rank++)  
    106       { 
    107         winComm_[rank] = MPI_COMM_NULL ; 
    108         windows_[rank].resize(2) ; 
    109         windows_[rank][0]=MPI_WIN_NULL ; 
    110         windows_[rank][1]=MPI_WIN_NULL ; 
    111       } 
    112     } 
     75    if (!isAttachedModeEnabled()) MPI_Intercomm_merge(interComm_,true,&interCommMerged_) ; 
     76    MPI_Comm_split(intraComm_, intraCommRank, intraCommRank, &commSelf_) ; // for windows 
    11377     
    11478    itLastTimeLine=lastTimeLine.begin() ; 
     
    183147    if (it==buffers.end()) // Receive the buffer size and allocate the buffer 
    184148    { 
    185        MPI_Aint recvBuff[4] ; 
    186        MPI_Mrecv(recvBuff, 4, MPI_AINT,  &message, &status); 
    187        remoteHashId_ = recvBuff[0] ; 
    188        StdSize buffSize = recvBuff[1]; 
    189        vector<MPI_Aint> winAdress(2) ; 
    190        winAdress[0]=recvBuff[2] ; winAdress[1]=recvBuff[3] ; 
    191        mapBufferSize_.insert(std::make_pair(rank, buffSize)); 
    192        it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows_[rank], winAdress, 0, buffSize)))).first; 
    193        lastTimeLine[rank]=0 ; 
    194        itLastTimeLine=lastTimeLine.begin() ; 
    195        return true; 
     149      MPI_Aint recvBuff[4] ; 
     150      MPI_Mrecv(recvBuff, 4, MPI_AINT,  &message, &status); 
     151      remoteHashId_ = recvBuff[0] ; 
     152      StdSize buffSize = recvBuff[1]; 
     153      vector<MPI_Aint> winAdress(2) ; 
     154      winAdress[0]=recvBuff[2] ; winAdress[1]=recvBuff[3] ; 
     155      mapBufferSize_.insert(std::make_pair(rank, buffSize)); 
     156 
     157      // create windows dynamically for one-sided 
     158      if (!isAttachedModeEnabled()) 
     159      {  
     160        CTimer::get("create Windows").resume() ; 
     161        MPI_Comm interComm ; 
     162        MPI_Intercomm_create(commSelf_, 0, interCommMerged_, rank, 0 , &interComm) ; 
     163        MPI_Intercomm_merge(interComm, true, &winComm_[rank]) ; 
     164        windows_[rank].resize(2) ; 
     165        MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][0]); 
     166        MPI_Win_create_dynamic(MPI_INFO_NULL, winComm_[rank], &windows_[rank][1]); 
     167        CTimer::get("create Windows").suspend() ; 
     168      } 
     169      else 
     170      { 
     171        winComm_[rank] = MPI_COMM_NULL ; 
     172        windows_[rank].resize(2) ; 
     173        windows_[rank][0] = MPI_WIN_NULL ; 
     174        windows_[rank][1] = MPI_WIN_NULL ; 
     175      }    
     176 
     177      it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(windows_[rank], winAdress, 0, buffSize)))).first; 
     178      lastTimeLine[rank]=0 ; 
     179      itLastTimeLine=lastTimeLine.begin() ; 
     180 
     181      return true; 
    196182    } 
    197183    else 
     
    425411    if (!isAttachedModeEnabled()) 
    426412    { 
    427       for(int rank=0; rank<clientSize_; rank++) 
    428       { 
     413      for(auto& it : winComm_) 
     414      { 
     415        int rank = it.first ; 
    429416        MPI_Win_free(&windows_[rank][0]); 
    430417        MPI_Win_free(&windows_[rank][1]); 
Note: See TracChangeset for help on using the changeset viewer.