LAMA
lama::Distribution Class Reference

Abstract base class for a one-dimensional distribution. More...

#include <Distribution.hpp>

Inheritance diagram for lama::Distribution:

Public Member Functions

 Distribution (const IndexType globalSize, const CommunicatorPtr communicator)
 Constructor for a distribution.
 Distribution (const IndexType globalSize)
 Same as Distribution( globalSize, NoCommunicator() )
virtual ~Distribution ()
 Destructor of distribution.
const CommunicatorgetCommunicator () 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.
virtual bool isLocal (const IndexType index) const =0
 Query if the given global index is local for the calling rank (e.g.
IndexType getGlobalSize () const
 Getter for the global number of elements that are distributed.
virtual IndexType getLocalSize () const =0
 This method returns the number of local elements on the calling processor.
virtual IndexType local2global (const IndexType localIndex) const =0
 Abstract method that translates a local index back to a global index.
virtual IndexType global2local (const IndexType globalIndex) const =0
 Abstract method that translates a global index into a local index.
virtual void computeOwners (const std::vector< IndexType > &requiredIndexes, std::vector< PartitionId > &owners) const
 Compute ownership for required indexes.
virtual bool isEqual (const Distribution &other) const =0
virtual void writeAt (std::ostream &stream) const
 This method writes info about the distribution into an output stream.
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 T1 , typename T2 >
void replicateN (T1 *allValues, const T2 *localValues, const IndexType n) const
template<typename T >
void replicate (T *allValues, const IndexType *allOffsets, const T *localValues) const
virtual void printDistributionVector (std::string name) const =0
 Master process prints out the distribution vector to file named "name.part".

Protected Attributes

IndexType mGlobalSize
CommunicatorPtr mCommunicator

Private Member Functions

 Distribution ()
 LAMA_LOG_DECL_STATIC_LOGGER (logger)

Detailed Description

Abstract base class for a one-dimensional distribution.

A distribution specifies a mapping from a global range to the partitions of a Communicator.

Default and copy constructor are not available for this class (noncopyable).


Constructor & Destructor Documentation

lama::Distribution::Distribution ( const IndexType  globalSize,
const CommunicatorPtr  communicator 
)

Constructor for a distribution.

Parameters:
[in]globalSizeis the number of elements to distribute
[in]communicatorspecifies the partitions onto which the elements are distributed

References LAMA_THROWEXCEPTION, and mCommunicator.

Same as Distribution( globalSize, NoCommunicator() )

Parameters:
[in]globalSizeis the number of elements to distribute

References mGlobalSize.

Destructor of distribution.

References mCommunicator, and mGlobalSize.


Member Function Documentation

void lama::Distribution::computeOwners ( const std::vector< IndexType > &  requiredIndexes,
std::vector< PartitionId > &  owners 
) const [virtual]

Compute ownership for required indexes.

The default solution is to communicate required indexes around all partitions and each partition marks indexes with its id if it is local. If ownership can be computed without communication, this routine might be implemented more efficiently.

Reimplemented in lama::GenBlockDistribution, lama::CyclicDistribution, and lama::BlockDistribution.

References mCommunicator.

Referenced by lama::DenseMatrix< T >::computeOwners().

Getter routine for the communicator as shared pointer.

References mCommunicator.

Referenced by lama::DenseMatrix< T >::invert().

virtual IndexType lama::Distribution::global2local ( const IndexType  globalIndex) const [pure virtual]

Abstract method that translates a global index into a local index.

Parameters:
[in]globalIndexwith 0 <= globalIndex < getGlobalSize
Returns:
localIndex with 0 <= localIndex < getLocalSize() if local, nIndex otherwise

This method must be implemented by all base classes. It should throw an exception if the argument is not in the valid range.

Implemented in lama::GenBlockDistribution, lama::CyclicDistribution, lama::GeneralDistribution, lama::BlockDistribution, and lama::NoDistribution.

Referenced by lama::HaloBuilder::build(), lama::GeneralDistribution::GeneralDistribution(), lama::DenseMatrix< T >::getValue(), lama::SparseMatrix< T >::getValue(), lama::Redistributor::Redistributor(), and lama::StorageMethods< T >::splitCSR().

virtual bool lama::Distribution::isLocal ( const IndexType  index) const [pure virtual]

Query if the given global index is local for the calling rank (e.g.

process for an MPI Communicator

Parameters:
[in]indexthe global index to query for locality to the calling rank
Returns:
if the passed global index is local to the calling rank

Implemented in lama::GenBlockDistribution, lama::GeneralDistribution, lama::BlockDistribution, lama::CyclicDistribution, and lama::NoDistribution.

Referenced by lama::Communicator::computeOwners(), lama::GeneralDistribution::GeneralDistribution(), lama::DenseMatrix< T >::getValue(), lama::Redistributor::Redistributor(), and lama::StorageMethods< T >::splitCSR().

virtual IndexType lama::Distribution::local2global ( const IndexType  localIndex) const [pure virtual]

Abstract method that translates a local index back to a global index.

Parameters:
[in]localIndexis the local index, 0 <= localIndex < getLocalSize()
Returns:
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.

Implemented in lama::GenBlockDistribution, lama::CyclicDistribution, lama::GeneralDistribution, lama::BlockDistribution, and lama::NoDistribution.

Referenced by lama::SparseMatrix< T >::assignTransposeImpl(), lama::MatrixStorage< T >::joinHalo(), lama::DenseMatrix< T >::localize(), lama::StorageMethods< T >::localizeCSR(), lama::Redistributor::Redistributor(), replicate(), replicateN(), and lama::StorageMethods< T >::splitCSR().

bool lama::Distribution::operator!= ( const Distribution other) const

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

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 getGlobalSize(), isEqual(), and isReplicated().

virtual void lama::Distribution::printDistributionVector ( std::string  name) const [pure 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.

Implemented in lama::GenBlockDistribution, lama::CyclicDistribution, lama::GeneralDistribution, lama::BlockDistribution, and lama::NoDistribution.

template<typename T1 , typename T2 >
template LAMA_DLL_IMPORTEXPORT void lama::Distribution::replicateN ( T1 *  allValues,
const T2 *  localValues,
const IndexType  n 
) const
void lama::Distribution::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 Printable.

Reimplemented in lama::GenBlockDistribution, lama::CyclicDistribution, lama::GeneralDistribution, lama::BlockDistribution, and lama::NoDistribution.

Referenced by lama::operator<<().


Field Documentation


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