Added eoParallelPopEvalFunc and allow compilation of full library.
This commit is contained in:
parent
bd959cb3ef
commit
fed65c4f08
5 changed files with 35 additions and 7 deletions
|
|
@ -41,6 +41,7 @@ SET(EO_SOURCES
|
|||
eoCtrlCContinue.cpp
|
||||
eoScalarFitnessAssembled.cpp
|
||||
eoSIGContinue.cpp
|
||||
eompi.cpp
|
||||
)
|
||||
|
||||
ADD_LIBRARY(eo STATIC ${EO_SOURCES})
|
||||
|
|
|
|||
|
|
@ -79,8 +79,17 @@ void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
|
|||
|
||||
#else // _OPENMP
|
||||
|
||||
for (size_t i = 0; i < size; ++i) { _proc(_pop[i]); }
|
||||
|
||||
#endif // !_OPENMP
|
||||
}
|
||||
|
||||
#ifdef WITH_MPI
|
||||
template<class EOT>
|
||||
void parallelApply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
|
||||
{
|
||||
ParallelApply<EOT> job( _proc, _pop );
|
||||
|
||||
MasterNode* master = dynamic_cast<MasterNode*>( MpiNodeStore::instance() );
|
||||
if ( master )
|
||||
{
|
||||
|
|
@ -92,12 +101,8 @@ void apply(eoUF<EOT&, void>& _proc, std::vector<EOT>& _pop)
|
|||
WorkerNode* wrk = dynamic_cast<WorkerNode*>( MpiNodeStore::instance() );
|
||||
wrk->run( job );
|
||||
}
|
||||
#else // !_MPI
|
||||
for (size_t i = 0; i < size; ++i) { _proc(_pop[i]); }
|
||||
#endif
|
||||
|
||||
#endif // !_OPENMP
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
This is a variant of apply<EOT> which is called in parallel
|
||||
|
|
|
|||
|
|
@ -77,6 +77,26 @@ private:
|
|||
eoEvalFunc<EOT> & eval;
|
||||
};
|
||||
|
||||
#ifdef WITH_MPI
|
||||
// TODO TODOB commenter
|
||||
template<class EOT>
|
||||
class eoParallelPopLoopEval : public eoPopEvalFunc<EOT> {
|
||||
public:
|
||||
/** Ctor: set value of embedded eoEvalFunc */
|
||||
eoParallelPopLoopEval(eoEvalFunc<EOT> & _eval) : eval(_eval) {}
|
||||
|
||||
/** Do the job: simple loop over the offspring */
|
||||
void operator()(eoPop<EOT> & _parents, eoPop<EOT> & _offspring)
|
||||
{
|
||||
(void)_parents;
|
||||
parallelApply<EOT>(eval, _offspring);
|
||||
}
|
||||
|
||||
private:
|
||||
eoEvalFunc<EOT> & eval;
|
||||
};
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////
|
||||
// eoTimeVaryingLoopEval
|
||||
/////////////////////////////////////////////////////////////
|
||||
|
|
|
|||
4
eo/src/eompi.cpp
Normal file
4
eo/src/eompi.cpp
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
# include "eompi.h"
|
||||
|
||||
MpiNode* MpiNodeStore::singleton;
|
||||
|
||||
|
|
@ -46,8 +46,6 @@ class MpiNodeStore
|
|||
static MpiNode* singleton;
|
||||
};
|
||||
|
||||
MpiNode* MpiNodeStore::singleton;
|
||||
|
||||
class MpiNode
|
||||
{
|
||||
protected:
|
||||
|
|
|
|||
Reference in a new issue