Changeset 1638 for XIOS/trunk/src/context_server.cpp
- Timestamp:
- 01/22/19 16:15:03 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/context_server.cpp
r1230 r1638 23 23 { 24 24 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_) 26 26 { 27 27 context=parent; 28 28 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); 31 31 32 32 interComm=interComm_; 33 33 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); 37 37 38 38 currentTimeLine=0; … … 76 76 int count; 77 77 char * addr; 78 MPI_Status status;78 ep_lib::MPI_Status status; 79 79 map<int,CServerBuffer*>::iterator it; 80 80 bool okLoop; 81 81 82 82 traceOff(); 83 #ifdef _usingMPI 83 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 84 88 traceOn(); 85 89 86 90 if (flag==true) 87 91 { 92 #ifdef _usingMPI 88 93 rank=status.MPI_SOURCE ; 94 #elif _usingEP 95 rank=status.ep_src ; 96 #endif 89 97 okLoop = true; 90 98 if (pendingRequest.find(rank)==pendingRequest.end()) … … 98 106 99 107 traceOff(); 100 MPI_Iprobe(rank, 20,interComm,&flag,&status);108 ep_lib::MPI_Iprobe(rank, 20,interComm,&flag,&status); 101 109 traceOn(); 102 110 if (flag==true) listenPendingRequest(status) ; … … 107 115 } 108 116 109 bool CContextServer::listenPendingRequest( MPI_Status& status)117 bool CContextServer::listenPendingRequest(ep_lib::MPI_Status& status) 110 118 { 111 119 int count; 112 120 char * addr; 113 121 map<int,CServerBuffer*>::iterator it; 122 #ifdef _usingMPI 114 123 int rank=status.MPI_SOURCE ; 124 #elif _usingEP 125 int rank=status.ep_src ; 126 #endif 115 127 116 128 it=buffers.find(rank); … … 118 130 { 119 131 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); 121 133 mapBufferSize_.insert(std::make_pair(rank, buffSize)); 122 134 it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first; … … 125 137 else 126 138 { 127 MPI_Get_count(&status,MPI_CHAR,&count);139 ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 128 140 if (it->second->isBufferFree(count)) 129 141 { 130 142 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]); 132 144 bufferRequest[rank]=addr; 133 145 return true; … … 141 153 void CContextServer::checkPendingRequest(void) 142 154 { 143 map<int, MPI_Request>::iterator it;155 map<int,ep_lib::MPI_Request>::iterator it; 144 156 list<int> recvRequest; 145 157 list<int>::iterator itRecv; … … 147 159 int flag; 148 160 int count; 149 MPI_Status status;161 ep_lib::MPI_Status status; 150 162 151 163 for(it=pendingRequest.begin();it!=pendingRequest.end();it++) … … 153 165 rank=it->first; 154 166 traceOff(); 155 MPI_Test(& it->second, &flag, &status);167 ep_lib::MPI_Test(& it->second, &flag, &status); 156 168 traceOn(); 157 169 if (flag==true) 158 170 { 159 171 recvRequest.push_back(rank); 160 MPI_Get_count(&status,MPI_CHAR,&count);172 ep_lib::MPI_Get_count(&status,EP_CHAR,&count); 161 173 processRequest(rank,bufferRequest[rank],count); 162 174 } … … 218 230 // The best way to properly solve this problem will be to use the event scheduler also in attached mode 219 231 // 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) ; 221 233 222 234 CTimer::get("Process events").resume();
Note: See TracChangeset
for help on using the changeset viewer.