![]() |
Peano
|
Spread out. More...
#include <SpreadOutOnceGridStagnates.h>
Public Member Functions | |
SpreadOutOnceGridStagnates (Configuration *configuration=new DefaultConfiguration(), CostMetrics *costMetrics=new toolbox::loadbalancing::metrics::CellCount()) | |
virtual | ~SpreadOutOnceGridStagnates () override=default |
virtual void | finishStep () override |
Finish the step. | |
![]() | |
AbstractLoadBalancing (Configuration *configuration, CostMetrics *costMetrics) | |
Constructor. | |
virtual | ~AbstractLoadBalancing () |
Destructor. | |
virtual std::string | toString () const |
Generic string serialisation. | |
virtual void | enable (bool) |
Switch on/off. | |
virtual bool | hasSplitRecently () const |
bool | isEnabled (bool globally) const |
Clarifies whether load balancing is, in principle, enabled. | |
virtual int | getGlobalNumberOfTrees () const |
Delegate to stats. | |
virtual bool | hasStagnated () const |
A load balancing can either be stagnating or be switched off for this predicate to hold. | |
virtual void | finishSimulation () |
void | setConfigurationAndMetricsNullWithoutDelete () |
This is only used when you concatenate balancing rules and you want to disable any deletion. | |
Private Member Functions | |
int | getNumberOfTreesPerRank () const |
Return 0 if the load balancing should not split (yet) and otherwise return number of splits required. | |
void | updateLoadBalancing () |
void | triggerSplit (int numberOfCells, int targetRank) |
Private Attributes | |
int | _previousNumberOfCells |
int | _numberOfStableGridIterations |
Static Private Attributes | |
static tarch::logging::Log | _log |
Additional Inherited Members | |
![]() | |
static constexpr int | NoHeaviestTreeAvailable = -1 |
Is used by tree identification and either indicates that there are no trees at all or means that the heaviest tree is on the blacklist. | |
![]() | |
bool | fitsIntoMemory (State state) const |
Ensure enough memory is left-over. | |
bool | isInterRankBalancingBad () const |
Is the balancing between the ranks ok. | |
bool | isIntraRankBalancingBad () const |
Is the balancing on the rank ok. | |
bool | areRanksUnemployed () const |
double | getWeightOfHeaviestLocalSpacetree () const |
int | getIdOfHeaviestLocalSpacetree () const |
Determines the maximum spacetree size a tree should have in the optimal case. | |
int | getIdOfHeaviestLocalSpacetree (double tolerance) const |
Similar to getIdOfHeaviestLocalSpacetree() but you might get one of the trees back that is close to the heaviest one up to tolerance. | |
![]() | |
Blacklist | _blacklist |
Statistics | _statistics |
Configuration * | _configuration |
CostMetrics * | _costMetrics |
State | _state |
Ensure that you invoke. | |
![]() | |
static tarch::logging::Log | _log |
Spread out.
Try to give each thread on each rank one tree in one big decomposition rush. After that, switch into stagnation.
The routine tries to get as many cores/ranks in as possible. Therefore, we employ a bottom-up splitting strategy which prioritises fair fine grid splits over an "efficient" tree decomposition. Consult a discussion of splitting variants and constraints in peano4::grid::Spacetree::isCellTopDownSplitCandidate() and peano4::grid::Spacetree::isCellBottomUpSplitCandidate(), peano4::grid::Spacetree::splitOrJoinCell() and notably the general domain decomposition overview for the rationale.
Definition at line 45 of file SpreadOutOnceGridStagnates.h.
toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates::SpreadOutOnceGridStagnates | ( | Configuration * | configuration = new DefaultConfiguration(), |
CostMetrics * | costMetrics = new toolbox::loadbalancing::metrics::CellCount() ) |
Definition at line 13 of file SpreadOutOnceGridStagnates.cpp.
References toolbox::loadbalancing::AbstractLoadBalancing::_state, toolbox::loadbalancing::AbstractLoadBalancing::_statistics, assertion, toolbox::loadbalancing::InterRankDistribution, and toolbox::loadbalancing::Statistics::notifyOfStateChange().
|
overridevirtualdefault |
|
overridevirtual |
Finish the step.
No matter what you do here, you have to invoke
_statistics.updateGlobalView(); _blacklist.update();
in this routine.
Implements toolbox::loadbalancing::AbstractLoadBalancing.
Definition at line 132 of file SpreadOutOnceGridStagnates.cpp.
References _state(), and toolbox::loadbalancing::dumpStatistics().
|
private |
Return 0 if the load balancing should not split (yet) and otherwise return number of splits required.
Definition at line 23 of file SpreadOutOnceGridStagnates.cpp.
References _state(), tarch::mpi::Rank::getInstance(), tarch::multicore::Core::getInstance(), tarch::mpi::Rank::getNumberOfRanks(), toolbox::loadbalancing::InterRankDistribution, and logInfo.
|
private |
Definition at line 144 of file SpreadOutOnceGridStagnates.cpp.
References assertion, assertionEquals, peano4::SplitInstruction::BottomUp, peano4::parallel::SpacetreeSet::getInstance(), tarch::mpi::Rank::getInstance(), logInfo, and peano4::parallel::SpacetreeSet::split().
|
private |
Definition at line 70 of file SpreadOutOnceGridStagnates.cpp.
References _state(), tarch::mpi::Rank::getInstance(), tarch::mpi::Rank::getNumberOfRanks(), toolbox::loadbalancing::InterRankDistribution, logInfo, toolbox::loadbalancing::Stagnation, and toString().
|
staticprivate |
Definition at line 52 of file SpreadOutOnceGridStagnates.h.
|
private |
Definition at line 55 of file SpreadOutOnceGridStagnates.h.
|
private |
Definition at line 54 of file SpreadOutOnceGridStagnates.h.