LAMA
|
For a block cyclic distribution the range is partitioned into chunks of a certain block size and these chunks are assigned in a round-robin manner to the available partitions. More...
#include <CyclicDistribution.hpp>
Public Member Functions | |
CyclicDistribution (const IndexType globalSize, const IndexType chunkSize, const CommunicatorPtr communicator) | |
Construct a new object for a block-cyclic distribution. | |
virtual | ~CyclicDistribution () |
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. | |
IndexType | chunkSize () const |
IndexType | getNumLocalChunks () const |
getNumChunks() returns the number of local chunks | |
IndexType | getNumChunks (const PartitionId partition) const |
getNumChunks() returns the number of chunks for a given partition | |
IndexType | getNumTotalChunks () const |
get the global number of chunks | |
IndexType | getPartitionSize (const PartitionId partition) const |
gets the size of the passed partition | |
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 |
Protected Attributes | |
IndexType | mGlobalSize |
CommunicatorPtr | mCommunicator |
Private Member Functions | |
CyclicDistribution () | |
IndexType | allGlobal2local (const IndexType globalIndex) const |
void | getChunkInfo (IndexType &localChunks, IndexType &extra, const PartitionId rank) const |
Help routine to get the number of local chunks and info about rmemaining elements. | |
LAMA_LOG_DECL_STATIC_LOGGER (logger) | |
Private Attributes | |
IndexType | mChunkSize |
For a block cyclic distribution the range is partitioned into chunks of a certain block size and these chunks are assigned in a round-robin manner to the available partitions.
lama::CyclicDistribution::CyclicDistribution | ( | const IndexType | globalSize, |
const IndexType | chunkSize, | ||
const CommunicatorPtr | communicator | ||
) |
Construct a new object for a block-cyclic distribution.
[in] | globalSize | number of elements to distribution |
[in] | chunkSize | is the size of the chunk block. |
References mChunkSize, and lama::Distribution::mGlobalSize.
lama::CyclicDistribution::~CyclicDistribution | ( | ) | [virtual] |
lama::CyclicDistribution::CyclicDistribution | ( | ) | [private] |
IndexType lama::CyclicDistribution::allGlobal2local | ( | const IndexType | globalIndex | ) | const [private] |
References mChunkSize, and lama::Distribution::mCommunicator.
Referenced by global2local().
IndexType lama::CyclicDistribution::chunkSize | ( | ) | const [inline] |
References mChunkSize.
Referenced by lama::DenseMatrixOps::invertCyclic(), and lama::DenseMatrix< T >::invertCyclic().
void lama::CyclicDistribution::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 mChunkSize, and lama::Distribution::mCommunicator.
void lama::CyclicDistribution::getChunkInfo | ( | IndexType & | localChunks, |
IndexType & | extra, | ||
const PartitionId | rank | ||
) | const [private] |
Help routine to get the number of local chunks and info about rmemaining elements.
References mChunkSize, lama::Distribution::mCommunicator, and lama::Distribution::mGlobalSize.
Referenced by getNumChunks(), and getPartitionSize().
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 lama::BlockDistribution::BlockDistribution(), lama::MatrixStorage< T >::buildHalo(), lama::GenBlockDistribution::GenBlockDistribution(), lama::GeneralDistribution::GeneralDistribution(), lama::NoDistribution::isEqual(), lama::BlockDistribution::isEqual(), 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::CyclicDistribution::getLocalSize | ( | ) | const [virtual] |
This method returns the number of local elements on the calling processor.
Implements lama::Distribution.
References getPartitionSize(), and lama::Distribution::mCommunicator.
IndexType lama::CyclicDistribution::getNumChunks | ( | const PartitionId | partition | ) | const |
getNumChunks() returns the number of chunks for a given partition
References getChunkInfo().
Referenced by getNumLocalChunks().
getNumChunks() returns the number of local chunks
References getNumChunks(), and lama::Distribution::mCommunicator.
Referenced by writeAt().
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().
get the global number of chunks
References mChunkSize, and lama::Distribution::mGlobalSize.
Referenced by printDistributionVector().
PartitionId lama::CyclicDistribution::getOwner | ( | const IndexType | globalIndex | ) | const [virtual] |
Computes the owner of the passed globalIndex.
[in] | globalIndex | the global index to compute the owner for. |
References mChunkSize, and lama::Distribution::mCommunicator.
Referenced by isLocal().
IndexType lama::CyclicDistribution::getPartitionSize | ( | const PartitionId | partition | ) | const |
gets the size of the passed partition
References getChunkInfo(), and mChunkSize.
Referenced by getLocalSize().
IndexType lama::CyclicDistribution::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 allGlobal2local(), isLocal(), and lama::nIndex.
bool lama::CyclicDistribution::isEqual | ( | const Distribution & | other | ) | const [virtual] |
Implements lama::Distribution.
References lama::Distribution::getGlobalSize(), mChunkSize, and lama::Distribution::mGlobalSize.
bool lama::CyclicDistribution::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.
References getOwner(), and lama::Distribution::mCommunicator.
Referenced by global2local().
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::CyclicDistribution::LAMA_LOG_DECL_STATIC_LOGGER | ( | logger | ) | [private] |
Reimplemented from lama::Distribution.
IndexType lama::CyclicDistribution::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 mChunkSize, and lama::Distribution::mCommunicator.
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::CyclicDistribution::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 getNumTotalChunks(), mChunkSize, 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::CyclicDistribution::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 getNumLocalChunks(), mChunkSize, and lama::Distribution::mGlobalSize.
CommunicatorPtr lama::Distribution::mCommunicator [protected, inherited] |
Referenced by allGlobal2local(), lama::BlockDistribution::BlockDistribution(), computeOwners(), lama::Distribution::computeOwners(), lama::Distribution::Distribution(), lama::GenBlockDistribution::GenBlockDistribution(), getChunkInfo(), lama::Distribution::getCommunicator(), lama::Distribution::getCommunicatorPtr(), lama::GeneralDistribution::getDistributionVector(), getLocalSize(), getNumLocalChunks(), lama::Distribution::getNumPartitions(), getOwner(), lama::GenBlockDistribution::getOwner(), lama::GenBlockDistribution::isEqual(), isLocal(), local2global(), lama::NoDistribution::printDistributionVector(), lama::BlockDistribution::printDistributionVector(), lama::GeneralDistribution::printDistributionVector(), printDistributionVector(), lama::GenBlockDistribution::printDistributionVector(), lama::GenBlockDistribution::setOffsets(), lama::GeneralDistribution::writeAt(), and lama::Distribution::~Distribution().
IndexType lama::Distribution::mGlobalSize [protected, inherited] |
Referenced by CyclicDistribution(), lama::Distribution::Distribution(), lama::GeneralDistribution::GeneralDistribution(), getChunkInfo(), lama::GeneralDistribution::getDistributionVector(), lama::Distribution::getGlobalSize(), lama::NoDistribution::getLocalSize(), getNumTotalChunks(), lama::BlockDistribution::isEqual(), isEqual(), lama::GeneralDistribution::printDistributionVector(), lama::NoDistribution::writeAt(), lama::BlockDistribution::writeAt(), lama::GeneralDistribution::writeAt(), writeAt(), lama::GenBlockDistribution::writeAt(), and lama::Distribution::~Distribution().