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