LAMA
lama::GenBlockDistribution Class Reference

Derived distribution class for general block distributions. More...

#include <GenBlockDistribution.hpp>

Inheritance diagram for lama::GenBlockDistribution:

Public Member Functions

 GenBlockDistribution (const IndexType globalSize, const std::vector< IndexType > &localSizes, const CommunicatorPtr communicator)
 Construct a general block distribution by a vector of localSizes.
 GenBlockDistribution (const IndexType globalSize, const IndexType firstGlobalIdx, const IndexType lastGlobalIdx, const CommunicatorPtr communicator)
 Construct a general block distribution by an interval.
 GenBlockDistribution (const IndexType globalSize, const IndexType localSize, const CommunicatorPtr communicator)
 Construct a general block distribution by individual localSize.
 GenBlockDistribution (const IndexType globalSize, const float weight, const CommunicatorPtr communicator)
 Construct a general block distribution by a weight so that each partition will have a size corresponding to its weight.
virtual ~GenBlockDistribution ()
void getLocalRange (IndexType &lb, IndexType &ub) const
 Get the local range of the calling partition.
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
 Override Distribution::computeOwners.
void printDistributionVector (std::string name) const
 Master process prints out the distribution vector to file named "name.part".
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.
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 Member Functions

 LAMA_LOG_DECL_STATIC_LOGGER (logger)

Protected Attributes

IndexType mGlobalSize
CommunicatorPtr mCommunicator

Private Member Functions

void setOffsets (const IndexType rank, const IndexType numPartitions, const IndexType localSizes[])
void setOffsets (const IndexType rank, const IndexType numPartitions, const IndexType mySize)
 GenBlockDistribution ()

Private Attributes

boost::scoped_array< IndexTypemOffsets
 offset for each partition
IndexType mLB
IndexType mUB
 local range of full size in global values

Detailed Description

Derived distribution class for general block distributions.

For the general block distribution a local block size is given for each partition.

GenBlockDistribution is like all Distribution classes non-copyable. Shared pointers might be used to use the same distribution for several objects.


Constructor & Destructor Documentation

lama::GenBlockDistribution::GenBlockDistribution ( const IndexType  globalSize,
const std::vector< IndexType > &  localSizes,
const CommunicatorPtr  communicator 
)

Construct a general block distribution by a vector of localSizes.

Parameters:
[in]globalSizeis the number of elements to distribute
[in]localSizescontains the sizes for each partition
[in]communicatorspecifies the communicator used for this distribution

Note: All partitions must call this constructor with the 'same' arguments.

References lama::Distribution::getGlobalSize(), LAMA_ASSERT_EQUAL_ERROR, lama::Distribution::mCommunicator, and setOffsets().

lama::GenBlockDistribution::GenBlockDistribution ( const IndexType  globalSize,
const IndexType  firstGlobalIdx,
const IndexType  lastGlobalIdx,
const CommunicatorPtr  communicator 
)

Construct a general block distribution by an interval.

Parameters:
[in]globalSizeis the number of elements to distribute
[in]firstGlobalIdxis the smallest global index in partition
[in]lastGlobalIdxis the largest global index in partition
[in]communicatorspecifies the communicator used for this distribution

References LAMA_ASSERT_EQUAL_ERROR, lama::Distribution::mCommunicator, mLB, mUB, and setOffsets().

lama::GenBlockDistribution::GenBlockDistribution ( const IndexType  globalSize,
const IndexType  localSize,
const CommunicatorPtr  communicator 
)

Construct a general block distribution by individual localSize.

Parameters:
[in]globalSizeis the number of elements to distribute
[in]localSizeis the number of elements for this partition
[in]communicatorspecifies the communicator used for this distribution

References lama::Distribution::mCommunicator, and setOffsets().

lama::GenBlockDistribution::GenBlockDistribution ( const IndexType  globalSize,
const float  weight,
const CommunicatorPtr  communicator 
)

Construct a general block distribution by a weight so that each partition will have a size corresponding to its weight.

Parameters:
globalSizeis the number of elements to distribute
weightis the weight of this partition (must be positive)
communicatorspecifies the communicator used for this distribution

Note: GenBlockDistribution( globalSize, localSize, comm) is the same as GenBlockDistribution( globalSize, (float) localSize, comm )

References lama::Distribution::getGlobalSize(), LAMA_THROWEXCEPTION, lama::Distribution::mCommunicator, mLB, mOffsets, and mUB.


Member Function Documentation

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

Override Distribution::computeOwners.

Each processor knowns the sizes of each partition and can therefore compute owners without any communication.

Reimplemented from lama::Distribution.

References getOwner().

Getter routine for the communicator as shared pointer.

References lama::Distribution::mCommunicator.

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

Get the local range of the calling partition.

References mLB, and mUB.

This method returns the number of local elements on the calling processor.

Implements lama::Distribution.

References mLB, and mUB.

Referenced by printDistributionVector().

PartitionId lama::GenBlockDistribution::getOwner ( const IndexType  globalIndex) const [virtual]

Computes the owner of the passed globalIndex.

Parameters:
[in]globalIndexthe global index to compute the owner for.
Returns:
the owner of the passed globalIndex.

References lama::Distribution::mCommunicator, and mOffsets.

Referenced by computeOwners().

IndexType lama::GenBlockDistribution::global2local ( const IndexType  globalIndex) const [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.

Implements lama::Distribution.

References mLB, mUB, and lama::nIndex.

bool lama::GenBlockDistribution::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

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

Implements lama::Distribution.

References mLB, and mUB.

IndexType lama::GenBlockDistribution::local2global ( const IndexType  localIndex) const [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.

Implements lama::Distribution.

References mLB.

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::GenBlockDistribution::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::GenBlockDistribution::setOffsets ( const IndexType  rank,
const IndexType  numPartitions,
const IndexType  localSizes[] 
) [private]
void lama::GenBlockDistribution::setOffsets ( const IndexType  rank,
const IndexType  numPartitions,
const IndexType  mySize 
) [private]
void lama::GenBlockDistribution::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 lama::Distribution::mGlobalSize, mLB, and mUB.


Field Documentation

boost::scoped_array<IndexType> lama::GenBlockDistribution::mOffsets [private]

offset for each partition

Referenced by GenBlockDistribution(), getOwner(), isEqual(), and setOffsets().


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