Peano
Loading...
Searching...
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)
 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.
 

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
 
Configuration_configuration
 
CostMetrics_costMetrics
 
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
getAction()
Enumerator
Unspecified 

Required for the strategy.

None 
SpreadEquallyOverAllRanks 
SpreadEquallyOverAllThreads 

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 ( )
virtual

Definition at line 37 of file SpreadOutHierarchically.cpp.

Member Function Documentation

◆ finishStep()

void toolbox::loadbalancing::strategies::SpreadOutHierarchically::finishStep ( )
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 247 of file SpreadOutHierarchically.cpp.

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

Here is the call graph for this function:

◆ getAction()

◆ getNumberOfSplitsOnLocalRank()

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

◆ toString()

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

◆ triggerSplit()

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

◆ updateLoadBalancing()

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

◆ updateState()

Field Documentation

◆ _log

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

Definition at line 65 of file SpreadOutHierarchically.h.

◆ _stepsToWaitForNextLoadBalancingDecision

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

Definition at line 67 of file SpreadOutHierarchically.h.


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