Ignore:
Timestamp:
01/23/19 10:31:44 (5 years ago)
Author:
yushan
Message:

dev on ADA. add flag switch _usingEP/_usingMPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/branch_openmp/src/context_server.cpp

    r1545 r1642  
    1818#include <boost/functional/hash.hpp> 
    1919 
    20 using namespace ep_lib; 
     20 
    2121 
    2222namespace xios 
    2323{ 
    2424 
    25   CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) 
     25  CContextServer::CContextServer(CContext* parent,ep_lib::MPI_Comm intraComm_,ep_lib::MPI_Comm interComm_) 
    2626  { 
    2727    context=parent; 
    2828    intraComm=intraComm_; 
    29     MPI_Comm_size(intraComm,&intraCommSize); 
    30     MPI_Comm_rank(intraComm,&intraCommRank); 
     29    ep_lib::MPI_Comm_size(intraComm,&intraCommSize); 
     30    ep_lib::MPI_Comm_rank(intraComm,&intraCommRank); 
    3131 
    3232    interComm=interComm_; 
    3333    int flag; 
    34     MPI_Comm_test_inter(interComm,&flag); 
    35     if (flag) MPI_Comm_remote_size(interComm,&commSize); 
    36     else  MPI_Comm_size(interComm,&commSize); 
     34    ep_lib::MPI_Comm_test_inter(interComm,&flag); 
     35    if (flag) ep_lib::MPI_Comm_remote_size(interComm,&commSize); 
     36    else  ep_lib::MPI_Comm_size(interComm,&commSize); 
    3737 
    3838    currentTimeLine=0; 
     
    7676    int count; 
    7777    char * addr; 
    78     MPI_Status status; 
     78    ep_lib::MPI_Status status; 
    7979    map<int,CServerBuffer*>::iterator it; 
    8080    bool okLoop; 
    8181 
    8282    traceOff(); 
    83     MPI_Iprobe(-2, 20,interComm,&flag,&status); 
     83    #ifdef _usingMPI 
     84    MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm,&flag,&status); 
     85    #elif _usingEP 
     86    ep_lib::MPI_Iprobe(-2, 20,interComm,&flag,&status); 
     87    #endif 
    8488    traceOn(); 
    8589 
     
    102106 
    103107            traceOff(); 
    104             MPI_Iprobe(rank, 20,interComm,&flag,&status); 
     108            ep_lib::MPI_Iprobe(rank, 20,interComm,&flag,&status); 
    105109            traceOn(); 
    106110            if (flag==true) listenPendingRequest(status) ; 
     
    111115  } 
    112116 
    113   bool CContextServer::listenPendingRequest(MPI_Status& status) 
     117  bool CContextServer::listenPendingRequest(ep_lib::MPI_Status& status) 
    114118  { 
    115119    int count; 
     
    119123    int rank=status.MPI_SOURCE ; 
    120124    #elif _usingEP 
    121     int rank=status.ep_src; 
    122     #endif     
     125    int rank=status.ep_src ; 
     126    #endif 
    123127 
    124128    it=buffers.find(rank); 
     
    126130    { 
    127131       StdSize buffSize = 0; 
    128        MPI_Request request; 
    129         
    130        MPI_Irecv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &request); 
    131        MPI_Wait(&request, &status); 
     132       ep_lib::MPI_Recv(&buffSize, 1, EP_LONG, rank, 20, interComm, &status); 
    132133       mapBufferSize_.insert(std::make_pair(rank, buffSize)); 
    133134       it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first; 
     
    136137    else 
    137138    { 
    138       MPI_Get_count(&status,MPI_CHAR,&count); 
     139      ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 
    139140      if (it->second->isBufferFree(count)) 
    140141      { 
    141142         addr=(char*)it->second->getBuffer(count); 
    142          MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]); 
     143         ep_lib::MPI_Irecv(addr,count,EP_CHAR,rank,20,interComm,&pendingRequest[rank]); 
    143144         bufferRequest[rank]=addr; 
    144145         return true; 
    145       } 
     146       } 
    146147      else 
    147148        return false; 
     
    152153  void CContextServer::checkPendingRequest(void) 
    153154  { 
    154     map<int,MPI_Request>::iterator it; 
     155    map<int,ep_lib::MPI_Request>::iterator it; 
    155156    list<int> recvRequest; 
    156157    list<int>::iterator itRecv; 
     
    158159    int flag; 
    159160    int count; 
    160     MPI_Status status; 
     161    ep_lib::MPI_Status status; 
    161162 
    162163    for(it=pendingRequest.begin();it!=pendingRequest.end();it++) 
     
    164165      rank=it->first; 
    165166      traceOff(); 
    166       MPI_Test(& it->second, &flag, &status); 
     167      ep_lib::MPI_Test(& it->second, &flag, &status); 
    167168      traceOn(); 
    168169      if (flag==true) 
    169170      { 
    170171        recvRequest.push_back(rank); 
    171         MPI_Get_count(&status,MPI_CHAR,&count); 
     172        ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 
    172173        processRequest(rank,bufferRequest[rank],count); 
    173174      } 
     
    229230         // The best way to properly solve this problem will be to use the event scheduler also in attached mode 
    230231         // for now just set up a MPI barrier 
    231          if (!CServer::eventScheduler && CXios::isServer) MPI_Barrier(intraComm) ; 
     232         if (!CServer::eventScheduler && CXios::isServer) ep_lib::MPI_Barrier(intraComm) ; 
    232233 
    233234         CTimer::get("Process events").resume(); 
     
    264265    { 
    265266      finished=true; 
    266       #pragma omp critical (_output) 
    267267      info(20)<<" CContextServer: Receive context <"<<context->getId()<<"> finalize."<<endl; 
    268268      context->finalize(); 
     
    272272      { 
    273273        rank = itMap->first; 
    274         #pragma omp critical (_output) 
    275274        report(10)<< " Memory report : Context <"<<ctxId<<"> : server side : memory used for buffer of each connection to client" << endl 
    276275            << "  +) With client of rank " << rank << " : " << itMap->second << " bytes " << endl; 
    277276        totalBuf += itMap->second; 
    278277      } 
    279       #pragma omp critical (_output) 
    280278      report(0)<< " Memory report : Context <"<<ctxId<<"> : server side : total memory used for buffer "<<totalBuf<<" bytes"<<endl; 
    281279    } 
Note: See TracChangeset for help on using the changeset viewer.