Peano 4
No Matches
toolbox::loadbalancing::strategies::SpreadOutHierarchically Class Reference

Spread out hiearchically. More...

#include <SpreadOutHierarchically.h>

Inheritance diagram for toolbox::loadbalancing::strategies::SpreadOutHierarchically:
Collaboration diagram for toolbox::loadbalancing::strategies::SpreadOutHierarchically:

Public Types

enum class  Action { Unspecified , None , SpreadEquallyOverAllRanks , SpreadEquallyOverAllThreads }

Public Member Functions

 SpreadOutHierarchically (Configuration *configuration=new DefaultConfiguration(), CostMetrics *costMetrics=new toolbox::loadbalancing::metrics::CellCount())
virtual ~SpreadOutHierarchically ()
virtual void finishStep () override
 Finish the step.
- Public Member Functions inherited from toolbox::loadbalancing::AbstractLoadBalancing
 AbstractLoadBalancing (Configuration *configuration, CostMetrics *costMetrics)
virtual ~AbstractLoadBalancing ()
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.

Static Public Member Functions

static std::string toString (Action action)

Private Member Functions

void updateState ()
void updateLoadBalancing ()
void triggerSplit (int numberOfCells, int targetRank)
Action getAction () const
int getNumberOfSplitsOnLocalRank () const

Private Attributes

int _stepsToWaitForNextLoadBalancingDecision

Static Private Attributes

static tarch::logging::Log _log

Additional Inherited Members

- Static Public Attributes inherited from toolbox::loadbalancing::AbstractLoadBalancing
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.
- Protected Member Functions inherited from toolbox::loadbalancing::AbstractLoadBalancing
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.
- Protected Attributes inherited from toolbox::loadbalancing::AbstractLoadBalancing
Blacklist _blacklist
Statistics _statistics
State _state
 Ensure that you invoke.
- Static Protected Attributes inherited from toolbox::loadbalancing::AbstractLoadBalancing
static tarch::logging::Log _log

Detailed Description

Spread out hiearchically.

First try to give each rank one tree and then make each rank fork out once more such that each thread gets one tree. 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 42 of file SpreadOutHierarchically.h.

Member Enumeration Documentation

◆ Action

See also

Required for the strategy.


Definition at line 47 of file SpreadOutHierarchically.h.

Constructor & Destructor Documentation

◆ SpreadOutHierarchically()

toolbox::loadbalancing::strategies::SpreadOutHierarchically::SpreadOutHierarchically ( Configuration * configuration = new DefaultConfiguration(),
CostMetrics * costMetrics = new toolbox::loadbalancing::metrics::CellCount() )

◆ ~SpreadOutHierarchically()

toolbox::loadbalancing::strategies::SpreadOutHierarchically::~SpreadOutHierarchically ( )

Definition at line 37 of file SpreadOutHierarchically.cpp.

Member Function Documentation

◆ finishStep()

void toolbox::loadbalancing::strategies::SpreadOutHierarchically::finishStep ( )

Finish the step.

No matter what you do here, you have to invoke


in this routine.

Implements toolbox::loadbalancing::AbstractLoadBalancing.

Definition at line 250 of file SpreadOutHierarchically.cpp.

References toolbox::loadbalancing::dumpStatistics(), and logInfo.

Here is the call graph for this function:

◆ getAction()

◆ getNumberOfSplitsOnLocalRank()

int toolbox::loadbalancing::strategies::SpreadOutHierarchically::getNumberOfSplitsOnLocalRank ( ) const

◆ toString()

std::string toolbox::loadbalancing::strategies::SpreadOutHierarchically::toString ( Action action)

◆ triggerSplit()

void toolbox::loadbalancing::strategies::SpreadOutHierarchically::triggerSplit ( int numberOfCells,
int targetRank )

◆ updateLoadBalancing()

void toolbox::loadbalancing::strategies::SpreadOutHierarchically::updateLoadBalancing ( )

◆ updateState()

Field Documentation

◆ _log

tarch::logging::Log toolbox::loadbalancing::strategies::SpreadOutHierarchically::_log

Definition at line 65 of file SpreadOutHierarchically.h.

◆ _stepsToWaitForNextLoadBalancingDecision

int toolbox::loadbalancing::strategies::SpreadOutHierarchically::_stepsToWaitForNextLoadBalancingDecision

Definition at line 67 of file SpreadOutHierarchically.h.

The documentation for this class was generated from the following files: