diff --git a/eo/src/apply.h b/eo/src/apply.h index d2006fe04..c3c0365c3 100644 --- a/eo/src/apply.h +++ b/eo/src/apply.h @@ -34,7 +34,7 @@ #include # ifdef WITH_MPI -# include +# include # include # endif // WITH_MPI @@ -86,21 +86,15 @@ void apply(eoUF& _proc, std::vector& _pop) #ifdef WITH_MPI template -void parallelApply(eoUF& _proc, std::vector& _pop) +void parallelApply( + eoUF& _proc, + std::vector& _pop, + eo::mpi::AssignmentAlgorithm& _algo, + int _masterRank, + int _packetSize) { - ParallelApply job( _proc, _pop ); - - MasterNode* master = dynamic_cast( MpiNodeStore::instance() ); - if ( master ) - { - DynamicAssignmentAlgorithm algo; - master->setAssignmentAlgorithm( &algo ); - master->run( job ); - } else - { - WorkerNode* wrk = dynamic_cast( MpiNodeStore::instance() ); - wrk->run( job ); - } + eo::mpi::ParallelApply job( _proc, _pop, _algo, _masterRank, _packetSize ); + job.run(); } #endif diff --git a/eo/src/eoPopEvalFunc.h b/eo/src/eoPopEvalFunc.h index cbd38b21c..8885ef11d 100644 --- a/eo/src/eoPopEvalFunc.h +++ b/eo/src/eoPopEvalFunc.h @@ -83,17 +83,33 @@ template class eoParallelPopLoopEval : public eoPopEvalFunc { public: /** Ctor: set value of embedded eoEvalFunc */ - eoParallelPopLoopEval(eoEvalFunc & _eval) : eval(_eval) {} + eoParallelPopLoopEval( + eoEvalFunc & _eval, + eo::mpi::AssignmentAlgorithm& _assignAlgo, + int _masterRank, + int _packetSize = 1 + ) : + eval(_eval), + assignAlgo( _assignAlgo ), + masterRank( _masterRank ), + packetSize( _packetSize ) + { + // empty + } /** Do the job: simple loop over the offspring */ void operator()(eoPop & _parents, eoPop & _offspring) { (void)_parents; - parallelApply(eval, _offspring); + parallelApply(eval, _offspring, assignAlgo, masterRank, packetSize); } private: eoEvalFunc & eval; + + eo::mpi::AssignmentAlgorithm & assignAlgo; + int masterRank; + int packetSize; }; #endif diff --git a/eo/test/t-eoMpiParallel.cpp b/eo/test/mpi/eval.cpp similarity index 90% rename from eo/test/t-eoMpiParallel.cpp rename to eo/test/mpi/eval.cpp index 5529b8e2c..7e15ac6f3 100644 --- a/eo/test/t-eoMpiParallel.cpp +++ b/eo/test/mpi/eval.cpp @@ -3,12 +3,19 @@ //----------------------------------------------------------------------------- #include +#include + #include -//#include -#include "real_value.h" +// #include +#include "../real_value.h" + +#include #include +#include +using namespace std; + //----------------------------------------------------------------------------- class eoRealSerializable : public eoReal< eoMinimizingFitness >, public eoserial::Persistent @@ -75,7 +82,7 @@ typedef eoRealSerializable EOT; int main(int ac, char** av) { - MpiSingletonFactory::init( ac, av ); + eo::mpi::Node::init( ac, av ); eoParser parser(ac, av); @@ -100,7 +107,10 @@ int main(int ac, char** av) eo::log << "Size of population : " << popSize << std::endl; - eoPopLoopEval< EOT > popEval( eval ); + eo::log << eo::setlevel( eo::debug ); + + eo::mpi::DynamicAssignmentAlgorithm assign; + eoParallelPopLoopEval< EOT > popEval( eval, assign, 0, 3 ); popEval( pop, pop ); eo::log << eo::quiet << "DONE!" << std::endl;