#include <partitionmanager.h>
Public Types | |
enum | AccessCode { OUTGROUP = -1 } |
typedef TOPOLOGY | Topology |
typedef std::map< int, std::vector< Region< DIM > > > | RegionVecMap |
Public Member Functions | |
PartitionManager (const CoordBox< DIM > &simulationArea=CoordBox< DIM >()) | |
void | resetRegions (const CoordBox< DIM > &newSimulationArea, boost::shared_ptr< Partition< DIM > > newPartition, unsigned newRank, unsigned newGhostZoneWidth) |
resets the domain decomposition. | |
void | resetGhostZones (const std::vector< CoordBox< DIM > > &newBoundingBoxes) |
RegionVecMap & | getOuterGhostZoneFragments () |
RegionVecMap & | getInnerGhostZoneFragments () |
const Region< DIM > & | getInnerOutgroupGhostZoneFragment () |
const Region< DIM > & | getOuterOutgroupGhostZoneFragment () |
const Region< DIM > & | getRegion (int node, unsigned expansionWidth) |
const Region< DIM > & | ownRegion (unsigned expansionWidth=0) |
const Region< DIM > & | ownExpandedRegion () |
const Region< DIM > & | rim (unsigned dist) |
Rim describes the node's inner ghost zone and those surrounding coordinates required to update those. | |
const Region< DIM > & | innerSet (unsigned dist) |
inner set refers to that part of a node's domain which are required to update the kernel. | |
const std::vector< CoordBox < DIM > > & | getBoundingBoxes () const |
unsigned | getGhostZoneWidth () const |
const Region< DIM > & | getOuterRim () const |
outer rim is the union of all outer ghost zone fragments. | |
const Region< DIM > & | getVolatileKernel () const |
The volatile kernel is the part of the kernel which may be overwritten while updating the inner ghost zone. | |
const Region< DIM > & | getInnerRim () const |
The inner rim is the part of the kernel which is required for updating the own rims. | |
const std::vector< std::size_t > & | getWeights () const |
Static Public Attributes | |
static const int | DIM = Topology::DIM |
Private Member Functions | |
void | fillRegion (unsigned node) |
void | fillOwnRegion () |
void | intersect (unsigned node) |
Private Attributes | |
boost::shared_ptr< Partition < DIM > > | partition |
CoordBox< DIM > | simulationArea |
Region< DIM > | outerRim |
Region< DIM > | volatileKernel |
Region< DIM > | innerRim |
RegionVecMap | regions |
RegionVecMap | outerGhostZoneFragments |
RegionVecMap | innerGhostZoneFragments |
std::vector< Region< DIM > > | ownRims |
std::vector< Region< DIM > > | ownInnerSets |
unsigned | rank |
unsigned | ghostZoneWidth |
std::vector< CoordBox< DIM > > | boundingBoxes |
Friends | |
class | PartitionManagerTest |
class | HiParSimulator::VanillaStepperTest |
typedef std::map<int, std::vector<Region<DIM> > > LibGeoDecomp::PartitionManager< TOPOLOGY >::RegionVecMap |
typedef TOPOLOGY LibGeoDecomp::PartitionManager< TOPOLOGY >::Topology |
enum LibGeoDecomp::PartitionManager::AccessCode |
LibGeoDecomp::PartitionManager< TOPOLOGY >::PartitionManager | ( | const CoordBox< DIM > & | simulationArea = CoordBox<DIM>() |
) | [inline, explicit] |
void LibGeoDecomp::PartitionManager< TOPOLOGY >::fillOwnRegion | ( | ) | [inline, private] |
void LibGeoDecomp::PartitionManager< TOPOLOGY >::fillRegion | ( | unsigned | node | ) | [inline, private] |
const std::vector<CoordBox<DIM> >& LibGeoDecomp::PartitionManager< TOPOLOGY >::getBoundingBoxes | ( | ) | const [inline] |
unsigned LibGeoDecomp::PartitionManager< TOPOLOGY >::getGhostZoneWidth | ( | ) | const [inline] |
Referenced by LibGeoDecomp::PartitionManager< Topology >::fillRegion().
RegionVecMap& LibGeoDecomp::PartitionManager< TOPOLOGY >::getInnerGhostZoneFragments | ( | ) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getInnerOutgroupGhostZoneFragment | ( | ) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getInnerRim | ( | ) | const [inline] |
The inner rim is the part of the kernel which is required for updating the own rims.
Its similar to the outer ghost zone, but to the inner side. It usually includes just one stencil diameter more cells than the volatile kernel.
RegionVecMap& LibGeoDecomp::PartitionManager< TOPOLOGY >::getOuterGhostZoneFragments | ( | ) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getOuterOutgroupGhostZoneFragment | ( | ) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getOuterRim | ( | ) | const [inline] |
outer rim is the union of all outer ghost zone fragments.
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getRegion | ( | int | node, | |
unsigned | expansionWidth | |||
) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getVolatileKernel | ( | ) | const [inline] |
The volatile kernel is the part of the kernel which may be overwritten while updating the inner ghost zone.
const std::vector<std::size_t>& LibGeoDecomp::PartitionManager< TOPOLOGY >::getWeights | ( | ) | const [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::innerSet | ( | unsigned | dist | ) | [inline] |
inner set refers to that part of a node's domain which are required to update the kernel.
void LibGeoDecomp::PartitionManager< TOPOLOGY >::intersect | ( | unsigned | node | ) | [inline, private] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::ownExpandedRegion | ( | ) | [inline] |
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::ownRegion | ( | unsigned | expansionWidth = 0 |
) | [inline] |
void LibGeoDecomp::PartitionManager< TOPOLOGY >::resetGhostZones | ( | const std::vector< CoordBox< DIM > > & | newBoundingBoxes | ) | [inline] |
void LibGeoDecomp::PartitionManager< TOPOLOGY >::resetRegions | ( | const CoordBox< DIM > & | newSimulationArea, | |
boost::shared_ptr< Partition< DIM > > | newPartition, | |||
unsigned | newRank, | |||
unsigned | newGhostZoneWidth | |||
) | [inline] |
resets the domain decomposition.
The simulation space is described by newSimulationArea, the decomposition scheme by newPartition. newRank will usually correspond to the MPI rank and identifies the current process. newGhostZoneWidth specifies after how many steps the halo should be synchronized. Higher values mean that the halo will be wider, which requires fewer synchronizations, but the syncs need to communicate more data. This is primarily to combat high latency datapaths (e.g. network latency or if the data needs to go to remote accelerators).
const Region<DIM>& LibGeoDecomp::PartitionManager< TOPOLOGY >::rim | ( | unsigned | dist | ) | [inline] |
Rim describes the node's inner ghost zone and those surrounding coordinates required to update those.
friend class HiParSimulator::VanillaStepperTest [friend] |
friend class PartitionManagerTest [friend] |
std::vector<CoordBox<DIM> > LibGeoDecomp::PartitionManager< TOPOLOGY >::boundingBoxes [private] |
const int LibGeoDecomp::PartitionManager< TOPOLOGY >::DIM = Topology::DIM [static] |
unsigned LibGeoDecomp::PartitionManager< TOPOLOGY >::ghostZoneWidth [private] |
RegionVecMap LibGeoDecomp::PartitionManager< TOPOLOGY >::innerGhostZoneFragments [private] |
Region<DIM> LibGeoDecomp::PartitionManager< TOPOLOGY >::innerRim [private] |
Referenced by LibGeoDecomp::PartitionManager< Topology >::getWeights().
RegionVecMap LibGeoDecomp::PartitionManager< TOPOLOGY >::outerGhostZoneFragments [private] |
Region<DIM> LibGeoDecomp::PartitionManager< TOPOLOGY >::outerRim [private] |
Referenced by LibGeoDecomp::PartitionManager< Topology >::getOuterRim().
std::vector<Region<DIM> > LibGeoDecomp::PartitionManager< TOPOLOGY >::ownInnerSets [private] |
std::vector<Region<DIM> > LibGeoDecomp::PartitionManager< TOPOLOGY >::ownRims [private] |
boost::shared_ptr<Partition<DIM> > LibGeoDecomp::PartitionManager< TOPOLOGY >::partition [private] |
Referenced by LibGeoDecomp::PartitionManager< Topology >::fillRegion().
unsigned LibGeoDecomp::PartitionManager< TOPOLOGY >::rank [private] |
RegionVecMap LibGeoDecomp::PartitionManager< TOPOLOGY >::regions [private] |
CoordBox<DIM> LibGeoDecomp::PartitionManager< TOPOLOGY >::simulationArea [private] |
Referenced by LibGeoDecomp::PartitionManager< Topology >::fillRegion().
Region<DIM> LibGeoDecomp::PartitionManager< TOPOLOGY >::volatileKernel [private] |