BIE |
/home/weinberg/src/BIE/include/LikelihoodComputationMPITP.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef LikelihoodComputationMPITP_h 00004 #define LikelihoodComputationMPITP_h 00005 00006 #include "Serializable.h" 00007 00008 00009 #include <BIEmpi.h> 00010 #include <TemperedSimulation.h> 00011 #include "EvaluationRequest.h" 00012 #include "TileRequestHandlerThread.h" 00013 #include "TileMPIThread.h" 00014 #include "TSLog.h" // for performance debugging 00015 00016 00017 #include <cc++/thread.h> 00018 using namespace ost; 00019 00020 namespace BIE { 00021 00022 class TileMasterWorkerThread; 00023 00027 //+ CLICLASS LikelihoodComputationMPITP SUPER LikelihoodComputation 00030 class LikelihoodComputationMPITP : public LikelihoodComputation 00031 { 00032 friend class TileMasterWorkerThread; 00033 00034 public: 00035 int getNumAndIdsOfTileMasters(int *num, int **idlist); 00036 00037 private: 00039 int size; 00040 00042 00043 00044 int M; 00046 int Ndim; 00048 00050 vector<double> buff; 00052 State sb; 00053 00055 00056 00057 double MPL_accum_time; 00059 double MPL_last_time; 00061 double acctime; 00063 00065 00066 00067 int parallel_type; 00069 int nsub; 00071 00075 00076 TileRequestHandlerThread *tileRequestHandlerThread; 00079 TileMPIThread *tileMPIThread; 00081 TileMasterWorkerThread *tileMasterWorkerThread; 00083 00086 00087 void MPL_reset_timer(void); 00089 void MPL_start_timer(void); 00091 void MPL_stop_timer(void); 00093 double MPL_read_timer(int reset); 00095 void load_balance(void); 00097 vector<double> rate; 00099 00103 int _workerReceiveFrom; 00104 00106 void get_working(State& s, int indx, int pflag); 00108 void set_frontier(int pflag); 00110 void step_complete(); 00111 00113 00114 00115 LikeState compute_likelihood_MPI(State& s, int indx); 00117 LikeState compute_likelihood_MPI_tile(State& s, int indx); 00119 LikeState compute_likelihood_MPI_intg(State& s, int indx); 00122 LikeState compute_likelihood_MPI_tile_and_point(State& sb, int indx); 00124 00128 00129 double modelEvaluateNormWorker(int tileId, double x, double y); 00131 vector<double> modelEvaluateWorker(int tileId, double x, double y, TSLog& logger); 00133 00137 void RemoteEvaluation(EvaluationRequest& request); 00138 00139 public: 00140 00141 00142 //+ CLICONSTR int int 00144 LikelihoodComputationMPITP(int M, int Ndim); 00145 00147 ~LikelihoodComputationMPITP(void); 00148 00150 double Likelihood(State&, int indx); 00151 00153 double LikelihoodPrevious(State&, int indx); 00154 00155 //+ CLIMETHOD void TileGranularity 00157 void TileGranularity(); 00158 00159 //+ CLIMETHOD void IntegrationGranularity 00161 void IntegrationGranularity(); 00162 00163 //+ CLIMETHOD void TilePointGranularity 00165 void TilePointGranularity(); 00166 00168 void Granularity(int); 00169 00171 // void SetSubdivisions(int); 00172 00175 00176 void enslave_worker(); 00178 void free_workers(void); 00180 00187 00188 double normEvaluate(Model* model, Tile* t, double x, double y, 00189 SampleDistribution* dist); 00191 vector<double> modelEvaluate(Model* model, Tile* t, double x, double y, 00192 SampleDistribution* dist); 00193 00195 00196 00197 void modelEvaluateList(Model *model, Tile *t, 00198 const vector<double>& x, const vector<double>& y, 00199 SampleDistribution* sampleDistribution, 00200 vector< vector<double> >& evaluations); 00201 00203 void normEvaluateList(Model *model, Tile *tile, 00204 const vector<double>& x, 00205 const vector<double>& y, 00206 SampleDistribution* sampleDistribution, 00207 vector<double>& evaluations); 00209 00211 int numModelEvals; 00212 00214 int counter; 00215 00217 00218 00219 int slaveFreeCount; 00221 int slaveCreateCount; 00223 00225 00226 00227 int _numTMs; 00229 vector<int> _tmList; 00231 00234 00235 static int NLOAD; 00237 static double beg; 00239 static double end; 00241 00243 virtual bool Serial() { return false; } 00244 00245 protected: 00246 00248 virtual bool Slaves() { return true; } 00249 00250 private: 00251 00253 vector<double> beglist; 00254 00256 vector<double> endlist; 00257 00258 void pack_and_send() const; 00259 00260 template<class Archive> 00261 void pre_save(Archive & ar, const unsigned int version) const 00262 { 00263 if (mpi_used) pack_and_send(); 00264 } 00265 00266 00267 template<class Archive> 00268 void post_load(Archive & ar, const unsigned int version) 00269 { 00270 if (mpi_used) { 00271 beg = beglist[myid]; 00272 end = endlist[myid]; 00273 } 00274 } 00275 00276 // AUTO GENERATED BY ../persistence/autopersist.py 00277 protected: 00278 LikelihoodComputationMPITP() {} 00279 private: 00280 friend class boost::serialization::access; 00281 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00282 00283 template<class Archive> 00284 void save(Archive & ar, const unsigned int version) const { 00285 this->pre_save(ar, version); 00286 try { 00287 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(LikelihoodComputation); 00288 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00289 } 00290 try { 00291 ar << BOOST_SERIALIZATION_NVP(size); 00292 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00293 } 00294 try { 00295 ar << BOOST_SERIALIZATION_NVP(M); 00296 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00297 } 00298 try { 00299 ar << BOOST_SERIALIZATION_NVP(Ndim); 00300 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00301 } 00302 try { 00303 ar << BOOST_SERIALIZATION_NVP(buff); 00304 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00305 } 00306 try { 00307 ar << BOOST_SERIALIZATION_NVP(sb); 00308 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00309 } 00310 try { 00311 ar << BOOST_SERIALIZATION_NVP(MPL_accum_time); 00312 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00313 } 00314 try { 00315 ar << BOOST_SERIALIZATION_NVP(MPL_last_time); 00316 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00317 } 00318 try { 00319 ar << BOOST_SERIALIZATION_NVP(acctime); 00320 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00321 } 00322 try { 00323 ar << BOOST_SERIALIZATION_NVP(parallel_type); 00324 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00325 } 00326 try { 00327 ar << BOOST_SERIALIZATION_NVP(nsub); 00328 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00329 } 00330 try { 00331 ar << BOOST_SERIALIZATION_NVP(rate); 00332 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00333 } 00334 try { 00335 ar << BOOST_SERIALIZATION_NVP(_workerReceiveFrom); 00336 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00337 } 00338 try { 00339 ar << BOOST_SERIALIZATION_NVP(numModelEvals); 00340 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00341 } 00342 try { 00343 ar << BOOST_SERIALIZATION_NVP(counter); 00344 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00345 } 00346 try { 00347 ar << BOOST_SERIALIZATION_NVP(slaveFreeCount); 00348 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00349 } 00350 try { 00351 ar << BOOST_SERIALIZATION_NVP(slaveCreateCount); 00352 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00353 } 00354 try { 00355 ar << BOOST_SERIALIZATION_NVP(_numTMs); 00356 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00357 } 00358 try { 00359 ar << BOOST_SERIALIZATION_NVP(_tmList); 00360 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00361 } 00362 try { 00363 ar << BOOST_SERIALIZATION_NVP(NLOAD); 00364 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00365 } 00366 try { 00367 ar << BOOST_SERIALIZATION_NVP(beg); 00368 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00369 } 00370 try { 00371 ar << BOOST_SERIALIZATION_NVP(end); 00372 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00373 } 00374 try { 00375 ar << BOOST_SERIALIZATION_NVP(beglist); 00376 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00377 } 00378 try { 00379 ar << BOOST_SERIALIZATION_NVP(endlist); 00380 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00381 } 00382 this->post_save(ar, version); 00383 } 00384 00385 template<class Archive> 00386 void load(Archive & ar, const unsigned int version) { 00387 this->pre_load(ar, version); 00388 try { 00389 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(LikelihoodComputation); 00390 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00391 } 00392 try { 00393 ar >> BOOST_SERIALIZATION_NVP(size); 00394 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00395 } 00396 try { 00397 ar >> BOOST_SERIALIZATION_NVP(M); 00398 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00399 } 00400 try { 00401 ar >> BOOST_SERIALIZATION_NVP(Ndim); 00402 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00403 } 00404 try { 00405 ar >> BOOST_SERIALIZATION_NVP(buff); 00406 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00407 } 00408 try { 00409 ar >> BOOST_SERIALIZATION_NVP(sb); 00410 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00411 } 00412 try { 00413 ar >> BOOST_SERIALIZATION_NVP(MPL_accum_time); 00414 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00415 } 00416 try { 00417 ar >> BOOST_SERIALIZATION_NVP(MPL_last_time); 00418 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00419 } 00420 try { 00421 ar >> BOOST_SERIALIZATION_NVP(acctime); 00422 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00423 } 00424 try { 00425 ar >> BOOST_SERIALIZATION_NVP(parallel_type); 00426 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00427 } 00428 try { 00429 ar >> BOOST_SERIALIZATION_NVP(nsub); 00430 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00431 } 00432 try { 00433 ar >> BOOST_SERIALIZATION_NVP(rate); 00434 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00435 } 00436 try { 00437 ar >> BOOST_SERIALIZATION_NVP(_workerReceiveFrom); 00438 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00439 } 00440 try { 00441 ar >> BOOST_SERIALIZATION_NVP(numModelEvals); 00442 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00443 } 00444 try { 00445 ar >> BOOST_SERIALIZATION_NVP(counter); 00446 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00447 } 00448 try { 00449 ar >> BOOST_SERIALIZATION_NVP(slaveFreeCount); 00450 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00451 } 00452 try { 00453 ar >> BOOST_SERIALIZATION_NVP(slaveCreateCount); 00454 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00455 } 00456 try { 00457 ar >> BOOST_SERIALIZATION_NVP(_numTMs); 00458 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00459 } 00460 try { 00461 ar >> BOOST_SERIALIZATION_NVP(_tmList); 00462 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00463 } 00464 try { 00465 ar >> BOOST_SERIALIZATION_NVP(NLOAD); 00466 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00467 } 00468 try { 00469 ar >> BOOST_SERIALIZATION_NVP(beg); 00470 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00471 } 00472 try { 00473 ar >> BOOST_SERIALIZATION_NVP(end); 00474 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00475 } 00476 try { 00477 ar >> BOOST_SERIALIZATION_NVP(beglist); 00478 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00479 } 00480 try { 00481 ar >> BOOST_SERIALIZATION_NVP(endlist); 00482 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00483 } 00484 this->post_load(ar, version); 00485 } 00486 00487 }; 00488 } 00489 BIE_CLASS_TYPE_INFO(BIE::LikelihoodComputationMPITP) 00490 BIE_CLASS_EXPORT_KEY(BIE::LikelihoodComputationMPITP) 00491 #endif Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:10 2010 by
|