Changeset 1639 for XIOS/trunk/src/context_server.cpp
- Timestamp:
- 01/22/19 16:43:32 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/context_server.cpp
r1638 r1639 23 23 { 24 24 25 CContextServer::CContextServer(CContext* parent, ep_lib::MPI_Comm intraComm_,ep_lib::MPI_Comm interComm_)25 CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) 26 26 { 27 27 context=parent; 28 28 intraComm=intraComm_; 29 ep_lib::MPI_Comm_size(intraComm,&intraCommSize);30 ep_lib::MPI_Comm_rank(intraComm,&intraCommRank);29 MPI_Comm_size(intraComm,&intraCommSize); 30 MPI_Comm_rank(intraComm,&intraCommRank); 31 31 32 32 interComm=interComm_; 33 33 int flag; 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);34 MPI_Comm_test_inter(interComm,&flag); 35 if (flag) MPI_Comm_remote_size(interComm,&commSize); 36 else MPI_Comm_size(interComm,&commSize); 37 37 38 38 currentTimeLine=0; … … 76 76 int count; 77 77 char * addr; 78 ep_lib::MPI_Status status;78 MPI_Status status; 79 79 map<int,CServerBuffer*>::iterator it; 80 80 bool okLoop; 81 81 82 82 traceOff(); 83 #ifdef _usingMPI84 83 MPI_Iprobe(MPI_ANY_SOURCE, 20,interComm,&flag,&status); 85 #elif _usingEP86 ep_lib::MPI_Iprobe(-2, 20,interComm,&flag,&status);87 #endif88 84 traceOn(); 89 85 90 86 if (flag==true) 91 87 { 92 #ifdef _usingMPI93 88 rank=status.MPI_SOURCE ; 94 #elif _usingEP95 rank=status.ep_src ;96 #endif97 89 okLoop = true; 98 90 if (pendingRequest.find(rank)==pendingRequest.end()) … … 106 98 107 99 traceOff(); 108 ep_lib::MPI_Iprobe(rank, 20,interComm,&flag,&status);100 MPI_Iprobe(rank, 20,interComm,&flag,&status); 109 101 traceOn(); 110 102 if (flag==true) listenPendingRequest(status) ; … … 115 107 } 116 108 117 bool CContextServer::listenPendingRequest( ep_lib::MPI_Status& status)109 bool CContextServer::listenPendingRequest(MPI_Status& status) 118 110 { 119 111 int count; 120 112 char * addr; 121 113 map<int,CServerBuffer*>::iterator it; 122 #ifdef _usingMPI123 114 int rank=status.MPI_SOURCE ; 124 #elif _usingEP125 int rank=status.ep_src ;126 #endif127 115 128 116 it=buffers.find(rank); … … 130 118 { 131 119 StdSize buffSize = 0; 132 ep_lib::MPI_Recv(&buffSize, 1, EP_LONG, rank, 20, interComm, &status);120 MPI_Recv(&buffSize, 1, MPI_LONG, rank, 20, interComm, &status); 133 121 mapBufferSize_.insert(std::make_pair(rank, buffSize)); 134 122 it=(buffers.insert(pair<int,CServerBuffer*>(rank,new CServerBuffer(buffSize)))).first; … … 137 125 else 138 126 { 139 ep_lib::MPI_Get_count(&status,EP_CHAR,&count);127 MPI_Get_count(&status,MPI_CHAR,&count); 140 128 if (it->second->isBufferFree(count)) 141 129 { 142 130 addr=(char*)it->second->getBuffer(count); 143 ep_lib::MPI_Irecv(addr,count,EP_CHAR,rank,20,interComm,&pendingRequest[rank]);131 MPI_Irecv(addr,count,MPI_CHAR,rank,20,interComm,&pendingRequest[rank]); 144 132 bufferRequest[rank]=addr; 145 133 return true; … … 153 141 void CContextServer::checkPendingRequest(void) 154 142 { 155 map<int, ep_lib::MPI_Request>::iterator it;143 map<int,MPI_Request>::iterator it; 156 144 list<int> recvRequest; 157 145 list<int>::iterator itRecv; … … 159 147 int flag; 160 148 int count; 161 ep_lib::MPI_Status status;149 MPI_Status status; 162 150 163 151 for(it=pendingRequest.begin();it!=pendingRequest.end();it++) … … 165 153 rank=it->first; 166 154 traceOff(); 167 ep_lib::MPI_Test(& it->second, &flag, &status);155 MPI_Test(& it->second, &flag, &status); 168 156 traceOn(); 169 157 if (flag==true) 170 158 { 171 159 recvRequest.push_back(rank); 172 ep_lib::MPI_Get_count(&status,EP_CHAR,&count);160 MPI_Get_count(&status,MPI_CHAR,&count); 173 161 processRequest(rank,bufferRequest[rank],count); 174 162 } … … 230 218 // The best way to properly solve this problem will be to use the event scheduler also in attached mode 231 219 // for now just set up a MPI barrier 232 if (!CServer::eventScheduler && CXios::isServer) ep_lib::MPI_Barrier(intraComm) ;220 if (!CServer::eventScheduler && CXios::isServer) MPI_Barrier(intraComm) ; 233 221 234 222 CTimer::get("Process events").resume();
Note: See TracChangeset
for help on using the changeset viewer.