BIE |
/home/weinberg/src/BIE/include/LikelihoodComputationMPI.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef LikelihoodComputationMPI_h 00004 #define LikelihoodComputationMPI_h 00005 00006 #include "Serializable.h" 00007 00008 00009 #include "BIEmpi.h" 00010 #include "LikelihoodComputation.h" 00011 00012 namespace BIE { 00013 00017 //+ CLICLASS LikelihoodComputationMPI SUPER LikelihoodComputation 00019 class LikelihoodComputationMPI : public LikelihoodComputation 00020 { 00021 00022 private: 00023 00027 unsigned int size; 00028 00030 double *buff; 00031 ; 00032 State sb; 00033 00034 int Ndim; // needed to compute size of buffer for MPI 00035 int M; 00036 00038 double MPL_accum_time, MPL_last_time, acctime; 00039 00041 int parallel_type, nsub; 00042 unsigned long parallel_count; 00043 00045 int counter; 00046 00049 void MPL_reset_timer(void); 00050 void MPL_start_timer(void); 00051 void MPL_stop_timer(void); 00052 double MPL_read_timer(int reset); 00053 void load_balance(void); 00054 vector<double> rate; 00056 00057 void get_working(State& s, int indx, int pflag); 00058 void set_frontier(int pflag); 00059 void step_complete(); 00060 00061 LikeState compute_likelihood_MPI(State& s, int indx); 00062 LikeState compute_likelihood_MPI_tile(State& s, int indx); 00063 LikeState compute_likelihood_MPI_intg(State& s, int indx); 00064 00065 protected: 00066 00068 virtual bool Slaves() { return true; } 00069 00070 public: 00071 00072 00073 //+ CLICONSTR int int 00075 LikelihoodComputationMPI(int M, int Ndim); 00076 00078 ~LikelihoodComputationMPI(void); 00079 00081 double Likelihood(State&, int indx); 00082 00084 double LikelihoodPrevious(State&, int indx); 00085 00086 //+ CLIMETHOD void TileGranularity 00090 void TileGranularity(); 00091 00092 //+ CLIMETHOD void IntegrationGranularity 00096 void IntegrationGranularity(); 00097 00099 void Granularity(int); 00100 00102 void SetSubdivisions(int); 00103 00106 void enslave_worker(void*); 00107 void free_workers(void); 00109 00117 00118 static int NLOAD; 00120 static double beg; 00122 static double end; 00124 00125 public: 00130 virtual void normEvaluateList(Model *model, Tile *tile, 00131 const vector<double>& x, 00132 const vector<double>& y, 00133 SampleDistribution* sampleDistribution, 00134 vector<double>& evaluations); 00135 00140 virtual void modelEvaluateList(Model *model, Tile *tile, 00141 const vector<double>& x, 00142 const vector<double>& y, 00143 SampleDistribution* sampleDistribution, 00144 vector< vector<double> >& evaluations); 00145 00147 virtual bool Serial() { return false; } 00148 00149 private: 00150 00152 vector<double> beglist; 00153 00155 vector<double> endlist; 00156 00157 void pack_and_send() const; 00158 00159 template<class Archive> 00160 void pre_save(Archive & ar, const unsigned int version) const 00161 { 00162 if (mpi_used) pack_and_send(); 00163 } 00164 00165 00166 template<class Archive> 00167 void post_load(Archive & ar, const unsigned int version) 00168 { 00169 if (mpi_used) { 00170 beg = beglist[myid]; 00171 end = endlist[myid]; 00172 } 00173 } 00174 00175 // AUTO GENERATED BY ../persistence/autopersist.py 00176 protected: 00177 LikelihoodComputationMPI() {} 00178 private: 00179 friend class boost::serialization::access; 00180 BOOST_SERIALIZATION_SPLIT_MEMBER(); 00181 00182 template<class Archive> 00183 void save(Archive & ar, const unsigned int version) const { 00184 this->pre_save(ar, version); 00185 try { 00186 ar << BOOST_SERIALIZATION_BASE_OBJECT_NVP(LikelihoodComputation); 00187 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00188 } 00189 try { 00190 ar << BOOST_SERIALIZATION_NVP(size); 00191 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00192 } 00193 try { 00194 ar << BOOST_SERIALIZATION_NVP(sb); 00195 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00196 } 00197 try { 00198 ar << BOOST_SERIALIZATION_NVP(Ndim); 00199 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00200 } 00201 try { 00202 ar << BOOST_SERIALIZATION_NVP(M); 00203 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00204 } 00205 try { 00206 ar << BOOST_SERIALIZATION_NVP(MPL_accum_time); 00207 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00208 } 00209 try { 00210 ar << BOOST_SERIALIZATION_NVP(MPL_last_time); 00211 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00212 } 00213 try { 00214 ar << BOOST_SERIALIZATION_NVP(acctime); 00215 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00216 } 00217 try { 00218 ar << BOOST_SERIALIZATION_NVP(parallel_type); 00219 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00220 } 00221 try { 00222 ar << BOOST_SERIALIZATION_NVP(nsub); 00223 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00224 } 00225 try { 00226 ar << BOOST_SERIALIZATION_NVP(parallel_count); 00227 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00228 } 00229 try { 00230 ar << BOOST_SERIALIZATION_NVP(counter); 00231 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00232 } 00233 try { 00234 ar << BOOST_SERIALIZATION_NVP(rate); 00235 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00236 } 00237 try { 00238 ar << BOOST_SERIALIZATION_NVP(NLOAD); 00239 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00240 } 00241 try { 00242 ar << BOOST_SERIALIZATION_NVP(beg); 00243 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00244 } 00245 try { 00246 ar << BOOST_SERIALIZATION_NVP(end); 00247 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00248 } 00249 try { 00250 ar << BOOST_SERIALIZATION_NVP(beglist); 00251 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00252 } 00253 try { 00254 ar << BOOST_SERIALIZATION_NVP(endlist); 00255 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00256 } 00257 char __buf[128]; 00258 for(uint32 __i=0; __i<size; __i++) { 00259 sprintf(__buf, "buff_%d", __i); 00260 try { 00261 ar << boost::serialization::make_nvp(__buf, buff[__i]); 00262 } catch (::boost::archive::archive_exception & e) { 00263 throw new BoostSerializationException(string(e.what()),__buf, __FILE__,__LINE__); 00264 } catch (BoostSerializationException * e) { 00265 throw new BoostSerializationException(e, __buf,__FILE__,__LINE__); 00266 } 00267 } 00268 this->post_save(ar, version); 00269 } 00270 00271 template<class Archive> 00272 void load(Archive & ar, const unsigned int version) { 00273 this->pre_load(ar, version); 00274 try { 00275 ar >> BOOST_SERIALIZATION_BASE_OBJECT_NVP(LikelihoodComputation); 00276 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00277 } 00278 try { 00279 ar >> BOOST_SERIALIZATION_NVP(size); 00280 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00281 } 00282 try { 00283 ar >> BOOST_SERIALIZATION_NVP(sb); 00284 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00285 } 00286 try { 00287 ar >> BOOST_SERIALIZATION_NVP(Ndim); 00288 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00289 } 00290 try { 00291 ar >> BOOST_SERIALIZATION_NVP(M); 00292 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00293 } 00294 try { 00295 ar >> BOOST_SERIALIZATION_NVP(MPL_accum_time); 00296 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00297 } 00298 try { 00299 ar >> BOOST_SERIALIZATION_NVP(MPL_last_time); 00300 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00301 } 00302 try { 00303 ar >> BOOST_SERIALIZATION_NVP(acctime); 00304 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00305 } 00306 try { 00307 ar >> BOOST_SERIALIZATION_NVP(parallel_type); 00308 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00309 } 00310 try { 00311 ar >> BOOST_SERIALIZATION_NVP(nsub); 00312 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00313 } 00314 try { 00315 ar >> BOOST_SERIALIZATION_NVP(parallel_count); 00316 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00317 } 00318 try { 00319 ar >> BOOST_SERIALIZATION_NVP(counter); 00320 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00321 } 00322 try { 00323 ar >> BOOST_SERIALIZATION_NVP(rate); 00324 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00325 } 00326 try { 00327 ar >> BOOST_SERIALIZATION_NVP(NLOAD); 00328 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00329 } 00330 try { 00331 ar >> BOOST_SERIALIZATION_NVP(beg); 00332 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00333 } 00334 try { 00335 ar >> BOOST_SERIALIZATION_NVP(end); 00336 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00337 } 00338 try { 00339 ar >> BOOST_SERIALIZATION_NVP(beglist); 00340 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00341 } 00342 try { 00343 ar >> BOOST_SERIALIZATION_NVP(endlist); 00344 BIE_CATCH_BOOST_SERIALIZATION_EXCEPTION; 00345 } 00346 char __buf[128]; 00347 buff = new double[size]; 00348 for(uint32 __i=0; __i<size; __i++) { 00349 sprintf(__buf, "buff_%d", __i); 00350 try { 00351 ar >> boost::serialization::make_nvp(__buf, buff[__i]); 00352 } catch (::boost::archive::archive_exception & e) { 00353 throw new BoostSerializationException(string(e.what()),__buf, __FILE__,__LINE__); 00354 } catch (BoostSerializationException * e) { 00355 throw new BoostSerializationException(e, __buf,__FILE__,__LINE__); 00356 } 00357 } 00358 this->post_load(ar, version); 00359 } 00360 00361 }; 00362 } 00363 BIE_CLASS_TYPE_INFO(BIE::LikelihoodComputationMPI) 00364 BIE_CLASS_EXPORT_KEY(BIE::LikelihoodComputationMPI) 00365 #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
|