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

Spread out. More...

#include <SpreadOutOnceGridStagnates.h>

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

Public Member Functions

 SpreadOutOnceGridStagnates (Configuration *configuration=new DefaultConfiguration(), CostMetrics *costMetrics=new toolbox::loadbalancing::metrics::CellCount())
virtual ~SpreadOutOnceGridStagnates ()
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.

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 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.

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.

Constructor & Destructor Documentation

◆ SpreadOutOnceGridStagnates()

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

◆ ~SpreadOutOnceGridStagnates()

toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates::~SpreadOutOnceGridStagnates ( )

Definition at line 23 of file SpreadOutOnceGridStagnates.cpp.

Member Function Documentation

◆ finishStep()

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

Finish the step.

No matter what you do here, you have to invoke


in this routine.

Implements toolbox::loadbalancing::AbstractLoadBalancing.

Definition at line 135 of file SpreadOutOnceGridStagnates.cpp.

References toolbox::loadbalancing::dumpStatistics().

Here is the call graph for this function:

◆ getNumberOfTreesPerRank()

int toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates::getNumberOfTreesPerRank ( ) const

Return 0 if the load balancing should not split (yet) and otherwise return number of splits required.

Definition at line 28 of file SpreadOutOnceGridStagnates.cpp.

References tarch::mpi::Rank::getInstance(), tarch::multicore::Core::getInstance(), tarch::mpi::Rank::getNumberOfRanks(), tarch::multicore::Core::getNumberOfThreads(), toolbox::loadbalancing::InterRankDistribution, and logInfo.

Here is the call graph for this function:

◆ triggerSplit()

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

◆ updateLoadBalancing()

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

Field Documentation

◆ _log

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

Definition at line 52 of file SpreadOutOnceGridStagnates.h.

◆ _numberOfStableGridIterations

int toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates::_numberOfStableGridIterations

Definition at line 55 of file SpreadOutOnceGridStagnates.h.

◆ _previousNumberOfCells

int toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates::_previousNumberOfCells

Definition at line 54 of file SpreadOutOnceGridStagnates.h.

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