Ignore:
Timestamp:
01/22/19 16:15:03 (5 years ago)
Author:
yushan
Message:

dev on ADA

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/context_server.cpp

    r1230 r1638  
    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    #ifdef _usingMPI 
    8384    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 
    8690    if (flag==true) 
    8791    { 
     92      #ifdef _usingMPI 
    8893      rank=status.MPI_SOURCE ; 
     94      #elif _usingEP 
     95      rank=status.ep_src ; 
     96      #endif 
    8997      okLoop = true; 
    9098      if (pendingRequest.find(rank)==pendingRequest.end()) 
     
    98106 
    99107            traceOff(); 
    100             MPI_Iprobe(rank, 20,interComm,&flag,&status); 
     108            ep_lib::MPI_Iprobe(rank, 20,interComm,&flag,&status); 
    101109            traceOn(); 
    102110            if (flag==true) listenPendingRequest(status) ; 
     
    107115  } 
    108116 
    109   bool CContextServer::listenPendingRequest(MPI_Status& status) 
     117  bool CContextServer::listenPendingRequest(ep_lib::MPI_Status& status) 
    110118  { 
    111119    int count; 
    112120    char * addr; 
    113121    map<int,CServerBuffer*>::iterator it; 
     122    #ifdef _usingMPI 
    114123    int rank=status.MPI_SOURCE ; 
     124    #elif _usingEP 
     125    int rank=status.ep_src ; 
     126    #endif 
    115127 
    116128    it=buffers.find(rank); 
     
    118130    { 
    119131       StdSize buffSize = 0; 
    120        MPI_Recv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &status); 
     132       ep_lib::MPI_Recv(&buffSize, 1, EP_LONG, rank, 20, interComm, &status); 
    121133       mapBufferSize_.insert(std::make_pair(rank, buffSize)); 
    122134       it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first; 
     
    125137    else 
    126138    { 
    127       MPI_Get_count(&status,MPI_CHAR,&count); 
     139      ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 
    128140      if (it->second->isBufferFree(count)) 
    129141      { 
    130142         addr=(char*)it->second->getBuffer(count); 
    131          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]); 
    132144         bufferRequest[rank]=addr; 
    133145         return true; 
     
    141153  void CContextServer::checkPendingRequest(void) 
    142154  { 
    143     map<int,MPI_Request>::iterator it; 
     155    map<int,ep_lib::MPI_Request>::iterator it; 
    144156    list<int> recvRequest; 
    145157    list<int>::iterator itRecv; 
     
    147159    int flag; 
    148160    int count; 
    149     MPI_Status status; 
     161    ep_lib::MPI_Status status; 
    150162 
    151163    for(it=pendingRequest.begin();it!=pendingRequest.end();it++) 
     
    153165      rank=it->first; 
    154166      traceOff(); 
    155       MPI_Test(& it->second, &flag, &status); 
     167      ep_lib::MPI_Test(& it->second, &flag, &status); 
    156168      traceOn(); 
    157169      if (flag==true) 
    158170      { 
    159171        recvRequest.push_back(rank); 
    160         MPI_Get_count(&status,MPI_CHAR,&count); 
     172        ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 
    161173        processRequest(rank,bufferRequest[rank],count); 
    162174      } 
     
    218230         // The best way to properly solve this problem will be to use the event scheduler also in attached mode 
    219231         // for now just set up a MPI barrier 
    220          if (!CServer::eventScheduler && CXios::isServer) MPI_Barrier(intraComm) ; 
     232         if (!CServer::eventScheduler && CXios::isServer) ep_lib::MPI_Barrier(intraComm) ; 
    221233 
    222234         CTimer::get("Process events").resume(); 
Note: See TracChangeset for help on using the changeset viewer.