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

One sided protocol improvment.
YM

Location:
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager
Files:
5 edited

Legend:

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

    r2246 r2258  
    109109  void CContextsManager::sendNotification(int rank) 
    110110  { 
    111     winNotify_->lockWindow(rank,0) ; 
    112     winNotify_->pushToWindow(rank, this, &CContextsManager::notificationsDumpOut) ; 
    113     winNotify_->unlockWindow(rank,0) ; 
     111    winNotify_->lockWindowExclusive(rank) ; 
     112    winNotify_->pushToLockedWindow(rank, this, &CContextsManager::notificationsDumpOut) ; 
     113    winNotify_->unlockWindow(rank) ; 
    114114  } 
    115115 
     
    168168    int commRank ; 
    169169    MPI_Comm_rank(xiosComm_, &commRank) ; 
    170     winNotify_->lockWindow(commRank,0) ; 
    171     winNotify_->popFromWindow(commRank, this, &CContextsManager::notificationsDumpIn) ; 
    172     winNotify_->unlockWindow(commRank,0) ; 
     170    winNotify_->lockWindowExclusive(commRank) ; 
     171    winNotify_->popFromLockedWindow(commRank, this, &CContextsManager::notificationsDumpIn) ; 
     172    winNotify_->unlockWindow(commRank) ; 
    173173    if (notifyType_==NOTIFY_CREATE_CONTEXT) createServerContext() ; 
    174174    else if (notifyType_==NOTIFY_CREATE_INTERCOMM) createServerContextIntercomm() ; 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/ressources_manager.cpp

    r2246 r2258  
    7272  void CRessourcesManager::sendNotification(int rank) 
    7373  { 
    74     winNotify_->lockWindow(rank,0) ; 
    75     winNotify_->pushToWindow(rank, this, &CRessourcesManager::notificationsDumpOut) ; 
    76     winNotify_->unlockWindow(rank,0) ; 
     74    winNotify_->lockWindowExclusive(rank) ; 
     75    winNotify_->pushToLockedWindow(rank, this, &CRessourcesManager::notificationsDumpOut) ; 
     76    winNotify_->unlockWindow(rank) ; 
    7777  } 
    7878 
     
    128128    MPI_Comm_rank(xiosComm_, &commRank) ; 
    129129    CTimer::get("CRessourcesManager::checkNotifications lock").resume(); 
    130     winNotify_->lockWindow(commRank,0) ; 
     130    winNotify_->lockWindowExclusive(commRank) ; 
    131131    CTimer::get("CRessourcesManager::checkNotifications lock").suspend(); 
    132132    CTimer::get("CRessourcesManager::checkNotifications pop").resume(); 
    133     winNotify_->popFromWindow(commRank, this, &CRessourcesManager::notificationsDumpIn) ; 
     133    winNotify_->popFromLockedWindow(commRank, this, &CRessourcesManager::notificationsDumpIn) ; 
    134134    CTimer::get("CRessourcesManager::checkNotifications pop").suspend(); 
    135135    CTimer::get("CRessourcesManager::checkNotifications unlock").resume(); 
    136     winNotify_->unlockWindow(commRank,0) ; 
     136    winNotify_->unlockWindow(commRank) ; 
    137137    CTimer::get("CRessourcesManager::checkNotifications unlock").suspend(); 
    138138    if (notifyType_==NOTIFY_CREATE_POOL) createPool() ; 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/server_context.cpp

    r2246 r2258  
    160160  void CServerContext::sendNotification(int rank) 
    161161  { 
    162     winNotify_->lockWindow(rank,0) ; 
    163     winNotify_->pushToWindow(rank, this, &CServerContext::notificationsDumpOut) ; 
    164     winNotify_->unlockWindow(rank,0) ; 
     162    winNotify_->lockWindowExclusive(rank) ; 
     163    winNotify_->pushToLockedWindow(rank, this, &CServerContext::notificationsDumpOut) ; 
     164    winNotify_->unlockWindow(rank) ; 
    165165  } 
    166166 
     
    201201        int commRank ; 
    202202        MPI_Comm_rank(contextComm_, &commRank) ; 
    203         winNotify_->lockWindow(commRank,0) ; 
    204         winNotify_->popFromWindow(commRank, this, &CServerContext::notificationsDumpIn) ; 
    205         winNotify_->unlockWindow(commRank,0) ; 
     203        winNotify_->lockWindowExclusive(commRank) ; 
     204        winNotify_->popFromLockedWindow(commRank, this, &CServerContext::notificationsDumpIn) ; 
     205        winNotify_->unlockWindow(commRank) ; 
    206206       
    207207        if (notifyInType_!= NOTIFY_NOTHING) 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services.cpp

    r2246 r2258  
    131131  void CService::sendNotification(int rank) 
    132132  { 
    133     winNotify_->lockWindow(rank,0) ; 
    134     winNotify_->pushToWindow(rank, this, &CService::notificationsDumpOut) ; 
    135     winNotify_->unlockWindow(rank,0) ; 
     133    winNotify_->lockWindowExclusive(rank) ; 
     134    winNotify_->pushToLockedWindow(rank, this, &CService::notificationsDumpOut) ; 
     135    winNotify_->unlockWindow(rank) ; 
    136136  } 
    137137 
     
    175175        int commRank ; 
    176176        MPI_Comm_rank(serviceComm_, &commRank) ; 
    177         winNotify_->lockWindow(commRank,0) ; 
    178         winNotify_->popFromWindow(commRank, this, &CService::notificationsDumpIn) ; 
    179         winNotify_->unlockWindow(commRank,0) ; 
     177        winNotify_->lockWindowExclusive(commRank) ; 
     178        winNotify_->popFromLockedWindow(commRank, this, &CService::notificationsDumpIn) ; 
     179        winNotify_->unlockWindow(commRank) ; 
    180180       
    181181        if (notifyInType_!= NOTIFY_NOTHING) 
  • XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/window_manager.hpp

    r2246 r2258  
    189189    } 
    190190 
     191    template< class T > 
     192    void pushToLockedWindow(int rank, T* object, void (T::*dumpOut)(CBufferOut&) ) 
     193    { 
     194      size_t size ; 
     195      MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; 
     196      MPI_Win_flush(rank,window_) ; 
     197      CBufferOut buffer ; 
     198      (object->*dumpOut)(buffer) ; 
     199      size_t bufferSize=buffer.count() ; 
     200      size_t newSize = size + bufferSize; 
     201      MPI_Put(&newSize, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; 
     202      MPI_Put(buffer.start(), bufferSize, MPI_CHAR, rank, OFFSET_BUFFER+size, bufferSize, MPI_CHAR, window_) ; 
     203    } 
     204 
    191205    template< typename T > 
    192206    void popFromWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) )  
     
    206220      MPI_Win_unlock(rank, window_) ; 
    207221       
     222    } 
     223 
     224    template< typename T > 
     225    void popFromLockedWindow(int rank, T* object, void (T::*dumpIn)(CBufferIn&) )  
     226    { 
     227      size_t size ; 
     228      MPI_Get(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; 
     229      MPI_Win_flush(rank,window_) ; 
     230      CBufferIn buffer(size) ; 
     231      MPI_Get(buffer.start(), size, MPI_CHAR, rank,OFFSET_BUFFER, size, MPI_CHAR, window_) ; 
     232      MPI_Win_flush(rank,window_) ; 
     233      (object->*dumpIn)(buffer) ; 
     234       
     235      size=buffer.remain() ; 
     236      MPI_Put(&size, SIZE_BUFFER_SIZE, MPI_CHAR, rank, OFFSET_BUFFER_SIZE, SIZE_BUFFER_SIZE, MPI_CHAR, window_) ; 
     237      MPI_Put(buffer.ptr(),buffer.remain(), MPI_CHAR, rank, OFFSET_BUFFER, buffer.remain(), MPI_CHAR, window_) ; 
    208238    } 
    209239 
Note: See TracChangeset for help on using the changeset viewer.