Changeset 1638 for XIOS/trunk/src/client.cpp
- Timestamp:
- 01/22/19 16:15:03 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/client.cpp
r1587 r1638 9 9 #include "oasis_cinterface.hpp" 10 10 #include "mpi.hpp" 11 //#include "mpi_wrapper.hpp" 11 12 #include "timer.hpp" 12 13 #include "buffer_client.hpp" … … 16 17 { 17 18 18 MPI_Comm CClient::intraComm ;19 MPI_Comm CClient::interComm ;20 std::list< MPI_Comm> CClient::contextInterComms;19 ep_lib::MPI_Comm CClient::intraComm ; 20 ep_lib::MPI_Comm CClient::interComm ; 21 std::list<ep_lib::MPI_Comm> CClient::contextInterComms; 21 22 int CClient::serverLeader ; 22 23 bool CClient::is_MPI_Initialized ; … … 24 25 StdOFStream CClient::m_infoStream; 25 26 StdOFStream CClient::m_errorStream; 26 MPI_Comm& CClient::getInterComm(void) { return (interComm); }27 ep_lib::MPI_Comm& CClient::getInterComm(void) { return (interComm); } 27 28 28 29 ///--------------------------------------------------------------- … … 35 36 */ 36 37 37 void CClient::initialize(const string& codeId, MPI_Comm& localComm,MPI_Comm& returnComm)38 void CClient::initialize(const string& codeId, ep_lib::MPI_Comm& localComm, ep_lib::MPI_Comm& returnComm) 38 39 { 39 40 int initialized ; 40 MPI_Initialized(&initialized) ;41 ep_lib::MPI_Initialized(&initialized) ; 41 42 if (initialized) is_MPI_Initialized=true ; 42 43 else is_MPI_Initialized=false ; … … 47 48 { 48 49 // localComm isn't given 49 if (localComm == MPI_COMM_NULL)50 if (localComm == EP_COMM_NULL) 50 51 { 51 52 if (!is_MPI_Initialized) 52 53 { 53 MPI_Init(NULL, NULL);54 ep_lib::MPI_Init(NULL, NULL); 54 55 } 55 56 CTimer::get("XIOS").resume() ; … … 63 64 int myColor ; 64 65 int i,c ; 65 MPI_Comm newComm ; 66 67 MPI_Comm_size(CXios::globalComm,&size) ; 68 MPI_Comm_rank(CXios::globalComm,&rank_); 66 ep_lib::MPI_Comm newComm ; 67 68 ep_lib::MPI_Comm_size(CXios::globalComm,&size) ; 69 70 ep_lib::MPI_Comm_rank(CXios::globalComm,&rank_); 69 71 70 72 hashAll=new unsigned long[size] ; 71 73 72 MPI_Allgather(&hashClient,1,MPI_LONG,hashAll,1,MPI_LONG,CXios::globalComm) ;74 ep_lib::MPI_Allgather(&hashClient,1,EP_LONG,hashAll,1,EP_LONG,CXios::globalComm) ; 73 75 74 76 map<unsigned long, int> colors ; … … 97 99 98 100 myColor=colors[hashClient]; 99 MPI_Comm_split(CXios::globalComm,myColor,rank_,&intraComm) ;101 ep_lib::MPI_Comm_split(CXios::globalComm,myColor,rank_,&intraComm) ; 100 102 101 103 if (CXios::usingServer) … … 104 106 serverLeader=leaders[hashServer] ; 105 107 int intraCommSize, intraCommRank ; 106 MPI_Comm_size(intraComm,&intraCommSize) ;107 MPI_Comm_rank(intraComm,&intraCommRank) ;108 ep_lib::MPI_Comm_size(intraComm,&intraCommSize) ; 109 ep_lib::MPI_Comm_rank(intraComm,&intraCommRank) ; 108 110 info(50)<<"intercommCreate::client "<<rank_<<" intraCommSize : "<<intraCommSize 109 111 <<" intraCommRank :"<<intraCommRank<<" clientLeader "<< serverLeader<<endl ; 110 MPI_Intercomm_create(intraComm, 0, CXios::globalComm, serverLeader, 0, &interComm) ;112 ep_lib::MPI_Intercomm_create(intraComm, 0, CXios::globalComm, serverLeader, 0, &interComm) ; 111 113 //rank_ = intraCommRank; 112 114 } 113 115 else 114 116 { 115 MPI_Comm_dup(intraComm,&interComm) ;117 ep_lib::MPI_Comm_dup(intraComm,&interComm) ; 116 118 } 117 119 delete [] hashAll ; … … 126 128 else 127 129 { 128 MPI_Comm_dup(localComm,&intraComm) ;129 MPI_Comm_dup(intraComm,&interComm) ;130 ep_lib::MPI_Comm_dup(localComm,&intraComm) ; 131 ep_lib::MPI_Comm_dup(intraComm,&interComm) ; 130 132 } 131 133 } … … 135 137 { 136 138 // localComm isn't given 137 if (localComm == MPI_COMM_NULL)139 if (localComm == EP_COMM_NULL) 138 140 { 139 141 if (!is_MPI_Initialized) oasis_init(codeId) ; 140 142 oasis_get_localcomm(localComm) ; 141 143 } 142 MPI_Comm_dup(localComm,&intraComm) ;144 ep_lib::MPI_Comm_dup(localComm,&intraComm) ; 143 145 144 146 CTimer::get("XIOS").resume() ; … … 147 149 if (CXios::usingServer) 148 150 { 149 MPI_Status status ;150 MPI_Comm_rank(intraComm,&rank_) ;151 ep_lib::MPI_Status status ; 152 ep_lib::MPI_Comm_rank(intraComm,&rank_) ; 151 153 152 154 oasis_get_intercomm(interComm,CXios::xiosCodeId) ; 153 if (rank_==0) MPI_Recv(&serverLeader,1, MPI_INT, 0, 0, interComm, &status) ;154 MPI_Bcast(&serverLeader,1,MPI_INT,0,intraComm) ;155 } 156 else MPI_Comm_dup(intraComm,&interComm) ;157 } 158 159 MPI_Comm_dup(intraComm,&returnComm) ;155 if (rank_==0) ep_lib::MPI_Recv(&serverLeader,1, EP_INT, 0, 0, interComm, &status) ; 156 ep_lib::MPI_Bcast(&serverLeader,1,EP_INT,0,intraComm) ; 157 } 158 else ep_lib::MPI_Comm_dup(intraComm,&interComm) ; 159 } 160 161 ep_lib::MPI_Comm_dup(intraComm,&returnComm) ; 160 162 } 161 163 … … 168 170 * Function is only called by client. 169 171 */ 170 void CClient::registerContext(const string& id, MPI_Comm contextComm)172 void CClient::registerContext(const string& id, ep_lib::MPI_Comm contextComm) 171 173 { 172 174 CContext::setCurrent(id) ; … … 178 180 // Attached mode 179 181 { 180 MPI_Comm contextInterComm ;181 MPI_Comm_dup(contextComm,&contextInterComm) ;182 ep_lib::MPI_Comm contextInterComm ; 183 ep_lib::MPI_Comm_dup(contextComm,&contextInterComm) ; 182 184 CContext* contextServer = CContext::create(idServer); 183 185 … … 198 200 size_t message_size ; 199 201 int leaderRank ; 200 MPI_Comm contextInterComm ;201 202 MPI_Comm_size(contextComm,&size) ;203 MPI_Comm_rank(contextComm,&rank) ;204 MPI_Comm_rank(CXios::globalComm,&globalRank) ;202 ep_lib::MPI_Comm contextInterComm ; 203 204 ep_lib::MPI_Comm_size(contextComm,&size) ; 205 ep_lib::MPI_Comm_rank(contextComm,&rank) ; 206 ep_lib::MPI_Comm_rank(CXios::globalComm,&globalRank) ; 205 207 if (rank!=0) globalRank=0 ; 206 208 … … 214 216 buffer<<msg ; 215 217 216 MPI_Send((void*)buff,buffer.count(),MPI_CHAR,serverLeader,1,CXios::globalComm) ;217 218 MPI_Intercomm_create(contextComm,0,CXios::globalComm,serverLeader,10+globalRank,&contextInterComm) ;218 ep_lib::MPI_Send((void*)buff,buffer.count(),EP_CHAR,serverLeader,1,CXios::globalComm) ; 219 220 ep_lib::MPI_Intercomm_create(contextComm,0,CXios::globalComm,serverLeader,10+globalRank,&contextInterComm) ; 219 221 info(10)<<"Register new Context : "<<id<<endl ; 220 MPI_Comm inter ;221 MPI_Intercomm_merge(contextInterComm,0,&inter) ;222 MPI_Barrier(inter) ;222 ep_lib::MPI_Comm inter ; 223 ep_lib::MPI_Intercomm_merge(contextInterComm,0,&inter) ; 224 ep_lib::MPI_Barrier(inter) ; 223 225 224 226 context->initClient(contextComm,contextInterComm) ; 225 227 226 228 contextInterComms.push_back(contextInterComm); 227 MPI_Comm_free(&inter);229 ep_lib::MPI_Comm_free(&inter); 228 230 delete [] buff ; 229 231 … … 251 253 int msg=0 ; 252 254 253 MPI_Comm_rank(intraComm,&rank) ;255 ep_lib::MPI_Comm_rank(intraComm,&rank) ; 254 256 if (rank==0) 255 257 { 256 MPI_Send(&msg,1,MPI_INT,0,5,interComm) ; // tags oasis_endded = 5258 ep_lib::MPI_Send(&msg,1,EP_INT,0,5,interComm) ; // tags oasis_endded = 5 257 259 } 258 260 … … 266 268 int msg=0 ; 267 269 268 MPI_Comm_rank(intraComm,&rank) ;270 ep_lib::MPI_Comm_rank(intraComm,&rank) ; 269 271 270 272 if (!CXios::isServer) 271 273 { 272 MPI_Comm_rank(intraComm,&rank) ;274 ep_lib::MPI_Comm_rank(intraComm,&rank) ; 273 275 if (rank==0) 274 276 { 275 MPI_Send(&msg,1,MPI_INT,0,0,interComm) ;276 } 277 } 278 279 for (std::list< MPI_Comm>::iterator it = contextInterComms.begin(); it != contextInterComms.end(); it++)280 MPI_Comm_free(&(*it));281 MPI_Comm_free(&interComm);282 MPI_Comm_free(&intraComm);277 ep_lib::MPI_Send(&msg,1,EP_INT,0,0,interComm) ; 278 } 279 } 280 281 for (std::list<ep_lib::MPI_Comm>::iterator it = contextInterComms.begin(); it != contextInterComms.end(); it++) 282 ep_lib::MPI_Comm_free(&(*it)); 283 ep_lib::MPI_Comm_free(&interComm); 284 ep_lib::MPI_Comm_free(&intraComm); 283 285 284 286 CTimer::get("XIOS init/finalize").suspend() ; … … 288 290 { 289 291 if (CXios::usingOasis) oasis_finalize(); 290 else MPI_Finalize() ;292 else ep_lib::MPI_Finalize() ; 291 293 } 292 294 … … 325 327 int size = 0; 326 328 int rank; 327 MPI_Comm_size(CXios::globalComm, &size);329 ep_lib::MPI_Comm_size(CXios::globalComm, &size); 328 330 while (size) 329 331 { … … 334 336 if (CXios::usingOasis) 335 337 { 336 MPI_Comm_rank(CXios::globalComm,&rank);338 ep_lib::MPI_Comm_rank(CXios::globalComm,&rank); 337 339 fileNameClient << fileName << "_" << std::setfill('0') << std::setw(numDigit) << rank << ext; 338 340 }
Note: See TracChangeset
for help on using the changeset viewer.