Static assignment algorithm works with parallel eval now.

This commit is contained in:
Benjamin Bouvier 2012-07-06 16:44:06 +02:00
commit 79c7a263a3
3 changed files with 23 additions and 1 deletions

View file

@ -94,6 +94,7 @@ void parallelApply(
eo::mpi::ParallelEvalStore<EOT> & _store )
{
_store.data( _pop );
_algo.reinit( _pop.size() );
eo::mpi::ParallelApply<EOT> job( _algo, _masterRank, _store );
job.run();
}

View file

@ -16,6 +16,7 @@ namespace eo
virtual int availableWorkers( ) = 0;
virtual void confirm( int wrkRank ) = 0;
virtual std::vector<int> idles( ) = 0;
virtual void reinit( int runs ) = 0;
};
struct DynamicAssignmentAlgorithm : public AssignmentAlgorithm
@ -79,6 +80,12 @@ namespace eo
return availableWrk;
}
void reinit( int _ )
{
++_;
// nothing to do
}
protected:
std::vector< int > availableWrk;
};
@ -181,7 +188,7 @@ namespace eo
void confirm( int rank )
{
int i = -1;
int i = -1; // i is the real index in table
for( unsigned int j = 0; j < realRank.size(); ++j )
{
if( realRank[j] == rank )
@ -196,6 +203,11 @@ namespace eo
++freeWorkers;
}
void reinit( int runs )
{
init( realRank, runs );
}
private:
std::vector<int> attributions;
std::vector<int> realRank;

View file

@ -73,6 +73,15 @@ namespace eo
{
// empty
}
~EmptyJob()
{
std::vector< int > idles = assignmentAlgo.idles();
for(unsigned i = 0, size = idles.size(); i < size; ++i)
{
comm.send( idles[i], Channel::Commands, Message::Kill );
}
}
};
/*