LAMA
|
Block distribution in contiguous chunks of same size for each partition. More...
#include <BlockDistribution.hpp>
Public Member Functions | |
BlockDistribution (const IndexType globalSize, const CommunicatorPtr communicator) | |
Construct a block distribution for a number of elements on to the partitions of the passed communicator. | |
virtual | ~BlockDistribution () |
virtual bool | isLocal (const IndexType index) const |
Query if the given global index is local for the calling rank (e.g. | |
virtual PartitionId | getOwner (const IndexType globalIndex) const |
Computes the owner of the passed globalIndex. | |
virtual IndexType | getLocalSize () const |
This method returns the number of local elements on the calling processor. | |
virtual IndexType | local2global (const IndexType localIndex) const |
Abstract method that translates a local index back to a global index. | |
virtual IndexType | global2local (const IndexType globalIndex) const |
Abstract method that translates a global index into a local index. | |
virtual bool | isEqual (const Distribution &other) const |
virtual void | writeAt (std::ostream &stream) const |
This method writes info about the distribution into an output stream. | |
virtual void | computeOwners (const std::vector< IndexType > &requiredIndexes, std::vector< PartitionId > &owners) const |
Method to compute directly the owners of global indexes without any communication. | |
void | printDistributionVector (std::string problem) const |
Master process prints out the distribution vector to file named "name.part". | |
const Communicator & | getCommunicator () const |
Getter routine for the communicator of the distribution. | |
CommunicatorPtr | getCommunicatorPtr () const |
Getter routine for the communicator as shared pointer. | |
PartitionId | getNumPartitions () const |
Query for the number of partitions onto which the distribution is done. | |
bool | isReplicated () const |
Query whether the distribution is a replication. | |
IndexType | getGlobalSize () const |
Getter for the global number of elements that are distributed. | |
bool | operator== (const Distribution &other) const |
Check for equality of two distributions. | |
bool | operator!= (const Distribution &other) const |
Check for inequality. | |
template<typename T1 , typename T2 > | |
void | replicate (T1 *allValues, const T2 *localValues) const |
template<typename T > | |
void | replicate (T *allValues, const IndexType *allOffsets, const T *localValues) const |
template<typename T1 , typename T2 > | |
void | replicateN (T1 *allValues, const T2 *localValues, const IndexType n) const |
Static Public Member Functions | |
static void | getRange (IndexType &lb, IndexType &ub, const IndexType n, const PartitionId rank, const PartitionId size) |
Static method that allows to compute the range of a block distribution for arbitrary rank and communicators. | |
static DistributionPtr | create (const IndexType globalSize, const CommunicatorPtr communicator) |
Static method to construct a new block distribution. | |
Protected Member Functions | |
LAMA_LOG_DECL_STATIC_LOGGER (logger) | |
Protected Attributes | |
IndexType | mGlobalSize |
CommunicatorPtr | mCommunicator |
Private Member Functions | |
BlockDistribution () | |
Private Attributes | |
IndexType | mBlockSize |
block size of each partition | |
IndexType | lb |
IndexType | ub |
local range of full size in global values |
Block distribution in contiguous chunks of same size for each partition.
BlockDistribution is noncopyable as Distribution is noncopyable
lama::BlockDistribution::BlockDistribution | ( | const IndexType | globalSize, |
const CommunicatorPtr | communicator | ||
) |
Construct a block distribution for a number of elements on to the partitions of the passed communicator.
[in] | globalSize | number of elements to distribute |
[in] | communicator | used for the partitions onto which elements are distributed. |
References lama::Distribution::getGlobalSize(), getRange(), lb, mBlockSize, lama::Distribution::mCommunicator, and ub.
lama::BlockDistribution::~BlockDistribution | ( | ) | [virtual] |
lama::BlockDistribution::BlockDistribution | ( | ) | [private] |
Referenced by create().
void lama::BlockDistribution::computeOwners | ( | const std::vector< IndexType > & | requiredIndexes, |
std::vector< PartitionId > & | owners | ||
) | const [virtual] |
Method to compute directly the owners of global indexes without any communication.
Reimplemented from lama::Distribution.
References getOwner().
DistributionPtr lama::BlockDistribution::create | ( | const IndexType | globalSize, |
const CommunicatorPtr | communicator | ||
) | [static] |
Static method to construct a new block distribution.
References BlockDistribution().
const Communicator & lama::Distribution::getCommunicator | ( | ) | const [inherited] |
Getter routine for the communicator of the distribution.
References lama::Distribution::mCommunicator.
Referenced by lama::HaloBuilder::build(), lama::Communicator::computeOwners(), lama::DenseMatrix< T >::DenseMatrix(), lama::MatrixCreator< T >::fillRandom(), lama::DenseMatrix< T >::getValue(), lama::SparseMatrix< T >::getValue(), lama::GenBlockDistribution::isEqual(), lama::SpecializedJacobi::iterateTyped(), lama::SparseMatrix< T >::matrixTimesMatrixImpl(), lama::DenseMatrix< T >::matrixTimesVectorImpl(), lama::Redistributor::Redistributor(), lama::Distribution::replicate(), lama::StorageMethods< T >::replicateCSR(), and lama::Distribution::replicateN().
CommunicatorPtr lama::Distribution::getCommunicatorPtr | ( | ) | const [inherited] |
Getter routine for the communicator as shared pointer.
References lama::Distribution::mCommunicator.
Referenced by lama::DenseMatrix< T >::invert().
IndexType lama::Distribution::getGlobalSize | ( | ) | const [inline, inherited] |
Getter for the global number of elements that are distributed.
References lama::Distribution::mGlobalSize.
Referenced by BlockDistribution(), lama::MatrixStorage< T >::buildHalo(), lama::GenBlockDistribution::GenBlockDistribution(), lama::GeneralDistribution::GeneralDistribution(), lama::NoDistribution::isEqual(), isEqual(), lama::CyclicDistribution::isEqual(), lama::MatrixStorage< T >::joinHalo(), lama::_MatrixStorage::localize(), lama::DenseMatrix< T >::localize(), lama::MatrixStorage< T >::localize(), lama::StorageMethods< T >::localizeCSR(), lama::Distribution::operator==(), lama::Redistributor::Redistributor(), lama::Distribution::replicate(), lama::MatrixStorage< T >::replicate(), lama::replicate(), lama::StorageMethods< T >::replicateCSR(), lama::Distribution::replicateN(), lama::GenBlockDistribution::setOffsets(), lama::MatrixStorage< T >::splitHalo(), and lama::Vector::Vector().
IndexType lama::BlockDistribution::getLocalSize | ( | ) | const [virtual] |
This method returns the number of local elements on the calling processor.
Implements lama::Distribution.
Referenced by printDistributionVector().
PartitionId lama::Distribution::getNumPartitions | ( | ) | const [inherited] |
Query for the number of partitions onto which the distribution is done.
References LAMA_ASSERT, and lama::Distribution::mCommunicator.
Referenced by lama::HaloBuilder::build(), lama::DenseMatrix< T >::DenseMatrix(), lama::MatrixCreator< T >::fillRandom(), lama::DenseMatrix< T >::getValue(), lama::DenseMatrix< T >::matrixTimesVectorImpl(), and lama::LUSolver::solve().
PartitionId lama::BlockDistribution::getOwner | ( | const IndexType | globalIndex | ) | const [virtual] |
Computes the owner of the passed globalIndex.
[in] | globalIndex | the global index to compute the owner for. |
References mBlockSize.
Referenced by computeOwners().
void lama::BlockDistribution::getRange | ( | IndexType & | lb, |
IndexType & | ub, | ||
const IndexType | n, | ||
const PartitionId | rank, | ||
const PartitionId | size | ||
) | [static] |
Static method that allows to compute the range of a block distribution for arbitrary rank and communicators.
References LAMA_ASSERT_DEBUG, and lama::min().
Referenced by BlockDistribution(), and lama::MatrixCreator< T >::buildPoisson().
IndexType lama::BlockDistribution::global2local | ( | const IndexType | globalIndex | ) | const [virtual] |
Abstract method that translates a global index into a local index.
[in] | globalIndex | with 0 <= globalIndex < getGlobalSize |
This method must be implemented by all base classes. It should throw an exception if the argument is not in the valid range.
Implements lama::Distribution.
References lb, lama::nIndex, and ub.
bool lama::BlockDistribution::isEqual | ( | const Distribution & | other | ) | const [virtual] |
Implements lama::Distribution.
References lama::Distribution::getGlobalSize(), and lama::Distribution::mGlobalSize.
bool lama::BlockDistribution::isLocal | ( | const IndexType | index | ) | const [virtual] |
Query if the given global index is local for the calling rank (e.g.
process for an MPI Communicator
[in] | index | the global index to query for locality to the calling rank |
Implements lama::Distribution.
bool lama::Distribution::isReplicated | ( | ) | const [inline, inherited] |
Query whether the distribution is a replication.
Referenced by lama::DenseMatrix< T >::assignSparse(), lama::SparseMatrix< T >::getRow(), lama::DenseMatrix< T >::getRow(), lama::MatrixStorage< T >::localize(), lama::DenseMatrix< T >::matrixTimesMatrix(), lama::SparseMatrix< T >::matrixTimesMatrixImpl(), lama::SparseMatrix< T >::maxDiffNorm(), lama::SparseMatrix< T >::maxDiffNormImpl(), lama::Distribution::operator==(), lama::MatrixStorage< T >::redistribute(), lama::MatrixStorage< T >::replicate(), and lama::MatrixStorage< T >::splitHalo().
lama::BlockDistribution::LAMA_LOG_DECL_STATIC_LOGGER | ( | logger | ) | [protected] |
Reimplemented from lama::Distribution.
IndexType lama::BlockDistribution::local2global | ( | const IndexType | localIndex | ) | const [virtual] |
Abstract method that translates a local index back to a global index.
[in] | localIndex | is the local index, 0 <= localIndex < getLocalSize() |
This method must be implemented by all base classes. It should throw an exception if the argument is not in the valid range.
Implements lama::Distribution.
References lb.
bool lama::Distribution::operator!= | ( | const Distribution & | other | ) | const [inherited] |
Check for inequality.
Even if two distributions are not equal it might be the case that the mapping of elements to partititons is the same.
bool lama::Distribution::operator== | ( | const Distribution & | other | ) | const [inherited] |
Check for equality of two distributions.
As verification of same distribution can be rather expensive, the operator might return false.
Attention: The operator must be conservative and only return true if the distributions are really equal.
References lama::Distribution::getGlobalSize(), lama::Distribution::isEqual(), and lama::Distribution::isReplicated().
void lama::BlockDistribution::printDistributionVector | ( | std::string | name | ) | const [virtual] |
Master process prints out the distribution vector to file named "name.part".
Every row contains a single number: the index of the process, where the row is local.
Implements lama::Distribution.
References getLocalSize(), and lama::Distribution::mCommunicator.
void lama::Distribution::replicate | ( | T1 * | allValues, |
const T2 * | localValues | ||
) | const [inherited] |
References lama::Distribution::getCommunicator(), lama::Distribution::getGlobalSize(), lama::Distribution::getLocalSize(), lama::Communicator::getSize(), LAMA_ASSERT_EQUAL_DEBUG, lama::Distribution::local2global(), lama::Communicator::max(), and lama::Communicator::shift().
Referenced by lama::StorageMethods< T >::replicateCSR().
void lama::Distribution::replicate | ( | T * | allValues, |
const IndexType * | allOffsets, | ||
const T * | localValues | ||
) | const [inherited] |
template LAMA_DLL_IMPORTEXPORT void lama::Distribution::replicateN | ( | T1 * | allValues, |
const T2 * | localValues, | ||
const IndexType | n | ||
) | const [inherited] |
References lama::Distribution::getCommunicator(), lama::Distribution::getGlobalSize(), lama::Distribution::getLocalSize(), lama::Communicator::getSize(), LAMA_ASSERT_EQUAL_DEBUG, lama::Distribution::local2global(), lama::Communicator::max(), and lama::Communicator::shift().
Referenced by lama::replicate().
void lama::BlockDistribution::writeAt | ( | std::ostream & | stream | ) | const [virtual] |
This method writes info about the distribution into an output stream.
The method should be overwritten by base classes to give more specific information about the object.
Reimplemented from lama::Distribution.
References mBlockSize, and lama::Distribution::mGlobalSize.
IndexType lama::BlockDistribution::lb [private] |
Referenced by BlockDistribution(), getLocalSize(), global2local(), isLocal(), and local2global().
IndexType lama::BlockDistribution::mBlockSize [private] |
block size of each partition
Referenced by BlockDistribution(), getOwner(), and writeAt().
CommunicatorPtr lama::Distribution::mCommunicator [protected, inherited] |
Referenced by lama::CyclicDistribution::allGlobal2local(), BlockDistribution(), lama::CyclicDistribution::computeOwners(), lama::Distribution::computeOwners(), lama::Distribution::Distribution(), lama::GenBlockDistribution::GenBlockDistribution(), lama::CyclicDistribution::getChunkInfo(), lama::Distribution::getCommunicator(), lama::Distribution::getCommunicatorPtr(), lama::GeneralDistribution::getDistributionVector(), lama::CyclicDistribution::getLocalSize(), lama::CyclicDistribution::getNumLocalChunks(), lama::Distribution::getNumPartitions(), lama::CyclicDistribution::getOwner(), lama::GenBlockDistribution::getOwner(), lama::GenBlockDistribution::isEqual(), lama::CyclicDistribution::isLocal(), lama::CyclicDistribution::local2global(), lama::NoDistribution::printDistributionVector(), printDistributionVector(), lama::GeneralDistribution::printDistributionVector(), lama::CyclicDistribution::printDistributionVector(), lama::GenBlockDistribution::printDistributionVector(), lama::GenBlockDistribution::setOffsets(), lama::GeneralDistribution::writeAt(), and lama::Distribution::~Distribution().
IndexType lama::Distribution::mGlobalSize [protected, inherited] |
Referenced by lama::CyclicDistribution::CyclicDistribution(), lama::Distribution::Distribution(), lama::GeneralDistribution::GeneralDistribution(), lama::CyclicDistribution::getChunkInfo(), lama::GeneralDistribution::getDistributionVector(), lama::Distribution::getGlobalSize(), lama::NoDistribution::getLocalSize(), lama::CyclicDistribution::getNumTotalChunks(), isEqual(), lama::CyclicDistribution::isEqual(), lama::GeneralDistribution::printDistributionVector(), lama::NoDistribution::writeAt(), writeAt(), lama::GeneralDistribution::writeAt(), lama::CyclicDistribution::writeAt(), lama::GenBlockDistribution::writeAt(), and lama::Distribution::~Distribution().
IndexType lama::BlockDistribution::ub [private] |
local range of full size in global values
Referenced by BlockDistribution(), getLocalSize(), global2local(), and isLocal().