LAMA
|
Storage format for an ELLPACK sparse matrix. More...
#include <ELLStorage.hpp>
Public Types | |
typedef T | ValueType |
This is the type of the matrix values. | |
Public Member Functions | |
ELLStorage () | |
Default constructor, zero matrix. | |
ELLStorage (const IndexType numRows, const IndexType numColumns, const ContextType con=Context::Host) | |
Creates a sparse matrix with all values set to zero. | |
ELLStorage (const IndexType numRows, const IndexType numColumns, const IndexType numValuesPerRows, const LAMAArray< IndexType > &ia, const LAMAArray< IndexType > &ja, const LAMAArray< ValueType > &values) | |
Constructor for ELL storage by corresponding arrays. | |
ELLStorage (const ELLStorage< ValueType > &other) | |
Copy constructor can take any matrix storage. | |
ELLStorage (const _MatrixStorage &other) | |
ELLStorage (const _MatrixStorage &other, const ContextPtr context) | |
Copy constructor can take any matrix storage or context. | |
virtual | ~ELLStorage () |
Destructor of ELL sparse matrix. | |
ELLStorage< ValueType > & | operator= (const _MatrixStorage &other) |
Assignment operator for matrix storage. | |
virtual ELLStorage * | copy () const |
Implementation of MatrixStorage::copy for derived class. | |
virtual ELLStorage * | create () const |
Implementation of MatrixStorage::create for derived class. | |
virtual void | clear () |
Implementation for pure method of _MatrixStorage::clear. | |
void | check (const char *msg) const |
Test the storage data for inconsistencies. | |
void | allocate (const IndexType numRows, const IndexType numColumns) |
Specify sizes of the matrixes for a default matrix. | |
virtual MatrixStorageFormat | getFormat () const |
Getter routine for the enum value that stands for this format. | |
virtual void | purge () |
Implementation of pure method of class MatrixStorage. | |
virtual void | setIdentity (const IndexType size) |
Implementation of pure method. | |
template<typename OtherValueType > | |
void | buildCSR (LAMAArray< IndexType > &ia, LAMAArray< IndexType > *ja, LAMAArray< OtherValueType > *values, const ContextPtr) const |
General routine to build any kind of CSR storage. | |
template<typename OtherValueType > | |
void | setCSRDataImpl (const IndexType numRows, const IndexType numColumns, const IndexType numValues, const LAMAArray< IndexType > &ia, const LAMAArray< IndexType > &ja, const LAMAArray< OtherValueType > &values, const ContextPtr loc) |
fills ELLPACK sparse matrix by csr sparse data. | |
virtual void | writeAt (std::ostream &stream) const |
Print relevant information about matrix storage format. | |
const LAMAArray< IndexType > & | getIA () const |
getter for member variables IA, JA, Data, only const reference | |
const LAMAArray< IndexType > & | getJA () const |
const LAMAArray< ValueType > & | getValues () const |
virtual IndexType | getNumValues () const |
Getter routine for the number of stored values. | |
IndexType | getNumValuesPerRow () const |
Getter routine for the number of num values per row. | |
template<typename OtherType > | |
void | getRowImpl (LAMAArray< OtherType > &row, const IndexType i) const |
Template method for getting row. | |
template<typename OtherType > | |
void | getDiagonalImpl (LAMAArray< OtherType > &diagonal) const |
This method returns the diagonal. | |
template<typename OtherType > | |
void | setDiagonalImpl (const LAMAArray< OtherType > &diagonal) |
This method replaces the diagonal. | |
void | setDiagonalImpl (const Scalar scalar) |
This method replaces the diagonal by a diagonal value. | |
template<typename OtherType > | |
void | scaleImpl (const LAMAArray< OtherType > &values) |
Template version used for virtual routine scale with known value type. | |
void | scaleImpl (const Scalar value) |
Implementation of pure method. | |
ValueType | getValue (IndexType i, IndexType j) const |
Get a value of the matrix. | |
void | prefetch (const ContextPtr location) const |
Initiate an asynchronous data transfer to a specified location. | |
void | wait () const |
Will wait for all outstanding asynchronous data transfers. | |
virtual void | matrixTimesVector (LAMAArrayView< ValueType > result, const ValueType alpha, const LAMAArrayConstView< ValueType > x, const ValueType beta, const LAMAArrayConstView< ValueType > y) const |
Implementation of MatrixStorage::matrixTimesVector for ELL. | |
virtual std::auto_ptr< SyncToken > | matrixTimesVectorAsync (LAMAArrayView< ValueType > result, const ValueType alpha, const LAMAArrayConstView< ValueType > x, const ValueType beta, const LAMAArrayConstView< ValueType > y) const |
Implementation of MatrixStorage::matrixTimesVectorAsync for ELL. | |
virtual void | jacobiIterate (LAMAArrayView< ValueType > solution, const LAMAArrayConstView< ValueType > oldSolution, const LAMAArrayConstView< ValueType > rhs, const ValueType omega) const |
Implementation of MatrixStorage::jacobiIterate for ELL. | |
virtual void | jacobiIterateHalo (LAMAArrayView< ValueType > localSolution, const MatrixStorage< ValueType > &localStorage, const LAMAArrayConstView< ValueType > haloOldSolution, const ValueType omega) const |
Implementation of MatrixStorage::jacobiIterateHalo for ELL. | |
virtual void | matrixTimesMatrix (const ValueType alpha, const MatrixStorage< ValueType > &a, const MatrixStorage< ValueType > &b, const ValueType beta, const MatrixStorage< ValueType > &c) |
Implementation of MatrixStorage::matrixTimesMatrix for ELL. | |
void | compress (const ValueType eps=0.0) |
compress compresses this by removing non-diagonal elements that are smaller than eps. | |
void | swap (ELLStorage< ValueType > &other) |
Swap this ELL storage data with another ELL storage. | |
virtual size_t | getMemoryUsageImpl () const |
Returns the number of bytes needed for the current matrix. | |
void | print () const |
Print out the ELL storage on std::out, use only for debug. | |
template<> | |
const char * | typeName () |
template<> | |
const char * | typeName () |
template<typename OtherValueType > | |
void | scaleImpl (const LAMAArray< OtherValueType > &values) |
void | setCSRData (const IndexType numRows, const IndexType numColumns, const IndexType numValues, const LAMAArray< IndexType > &ia, const LAMAArray< IndexType > &ja, const _LAMAArray &values) |
Implementation of _MatrixStorage::setCSRData for derived class. | |
void | buildCSRSizes (LAMAArray< IndexType > &ia) const |
Implementation for _MatrixStorage::buildCSRSizes. | |
void | buildCSRData (LAMAArray< IndexType > &ia, LAMAArray< IndexType > &ja, _LAMAArray &values) const |
Get the matrix data of the storage in CSR format. | |
void | getRow (_LAMAArray &row, const IndexType i) const |
Get the i-th row of a storage as LAMA array. | |
void | getDiagonal (_LAMAArray &diagonal) const |
This method returns the diagonal of the matrix. | |
void | setDiagonal (const Scalar value) |
void | setDiagonal (const _LAMAArray &diagonal) |
This method sets the diagonal of a matrix storage. | |
void | scale (const Scalar value) |
This method scales all matrix values with a scalar. | |
void | scale (const _LAMAArray &diagonal) |
Polymorph implementation for MatrixStorage<T>::scale. | |
virtual const char * | getTypeName () const |
Implementation of MatrixStorage::getTypeName for derived class. | |
virtual Scalar::ScalarType | getValueType () const |
Implementation of pure method. | |
template<typename OtherValueType > | |
void | setRawDenseData (const IndexType numRows, const IndexType numColumns, const OtherValueType values[], const ValueType eps=0.0) |
Construct a matrix from a dense matrix in row-major order (C-style). | |
template<typename OtherValueType > | |
void | setRawCSRData (const IndexType numRows, const IndexType numColumns, const IndexType numValues, const IndexType *const ia, const IndexType *const ja, const OtherValueType *const values) |
fills matrix storage by csr sparse data. | |
virtual void | joinHalo (const _MatrixStorage &localData, const _MatrixStorage &haloData, const class Halo &halo, const class Distribution &colDist) |
Join local and halo storage back into one storage as needed for NoDistribution. | |
virtual void | splitHalo (MatrixStorage< ValueType > &localData, MatrixStorage< ValueType > &haloData, class Halo &halo, const class Distribution &colDist, const class Distribution *rowDist) const |
Splitting of matrix storage for halo. | |
virtual void | buildHalo (class Halo &halo, const class Distribution &colDist) |
Special version of splitHalo where this matrix contains no local data and where haloData is aliased to this matrix. | |
virtual void | localize (const _MatrixStorage &globalData, const class Distribution &rowDist) |
This method build for this matrix the local part of a global matrix. | |
virtual void | localize (const _MatrixStorage &global, const Distribution &rowDist) |
This operation localizes the matrix storage of a full matrix to the part that is owned by this processor. | |
virtual void | replicate (const _MatrixStorage &localData, const class Distribution &rowDist) |
This routine builds the full matrix storage for a distributed matrix. | |
virtual void | buildCSCData (LAMAArray< IndexType > &cscIA, LAMAArray< IndexType > &cscJA, LAMAArray< ValueType > &cscValues) const |
This method builds CSC sparse data (column sizes, row indexes and data values) for a matrix storage. | |
virtual void | assign (const _MatrixStorage &other) |
Format conversion of matrix storage. | |
virtual void | copyTo (_MatrixStorage &other) const |
The opposite routine to assign, for convenience as the other way around is sometimes more efficient. | |
virtual void | assignTranspose (const MatrixStorage< ValueType > &other) |
Transpose of matrix storage. | |
virtual void | redistribute (const _MatrixStorage &other, const class Redistributor &redistributor) |
This methods assigns a redistributed matrix. | |
virtual void | exchangeHalo (const class Halo &halo, const MatrixStorage< ValueType > &matrix, const class Communicator &comm) |
Build a halo matrix with all rows of required indexes. | |
virtual void | writeToFile (const std::string &fileName, const File::FileType fileType=File::BINARY, const File::DataType dataType=File::INTERNAL, const File::IndexDataType indexDataTypeIA=File::INT, const File::IndexDataType indexDataTypeJA=File::INT) const |
get the number of elements left/right of the diagonal for the given row | |
virtual void | writeToFile (const PartitionId size, const PartitionId rank, const std::string &fileName, const File::FileType fileType=File::BINARY, const File::DataType dataType=File::INTERNAL, const File::IndexDataType indexDataTypeIA=File::INT, const File::IndexDataType indexDataTypeJA=File::INT) const |
virtual void | readFromFile (const std::string &fileName) |
virtual void | invert (const MatrixStorage< ValueType > &other) |
assign this storage with the inverse of another matrix. | |
virtual void | matrixTimesVectorN (LAMAArrayView< ValueType > result, const IndexType n, const ValueType alpha, const LAMAArrayConstView< ValueType > x, const ValueType beta, const LAMAArrayConstView< ValueType > y) const |
virtual void | matrixTimesScalar (const ValueType alpha, const MatrixStorage< ValueType > &a) |
Assign this = alpha * a. | |
virtual ValueType | maxDiffNorm (const MatrixStorage< ValueType > &other) |
Get the maximal absolue element-wise difference between two matrix storages. | |
virtual std::auto_ptr< SyncToken > | jacobiIterateAsync (LAMAArrayView< ValueType > solution, const LAMAArrayConstView< ValueType > oldSolution, const LAMAArrayConstView< ValueType > rhs, const ValueType omega) const |
Asynchrounous version of jacobiIterate. | |
void | init (const IndexType numRows, const IndexType numColumns) |
Initialization of base class due to a resize. | |
void | setContext (ContextPtr context) |
Set the preferred context for the matrix storage. | |
ContextPtr | getContextPtr () const |
Getter for the preferred context of the storage data, returns pointer. | |
const Context & | getContext () const |
Getter for the preferred context of the storage data. | |
void | prefetch () const |
Method that prefetches storage data to its preferred location. | |
void | setCompressThreshold (float ratio) |
Allow for additional row compression. | |
IndexType | getNumRows () const |
IndexType | getNumColumns () const |
void | resetDiagonalProperty () |
bool | hasDiagonalProperty () const |
const LAMAArray< IndexType > & | getRowIndexes () const |
size_t | getMemoryUsage () const |
Returns the number of bytes needed for the current matrix. | |
Static Public Member Functions | |
static const char * | typeName () |
get typename of the matrix storage format. | |
static void | convertCSR2CSC (LAMAArray< IndexType > &colIA, LAMAArray< IndexType > &colJA, LAMAArray< ValueType > &colValues, const IndexType numColumns, const LAMAArray< IndexType > &rowIA, const LAMAArray< IndexType > &rowJA, const LAMAArray< ValueType > &rowValues, const ContextPtr loc) |
Conversion routine of Compressed Sparse Row data to Compressed Sparse Column. | |
static void | joinRows (LAMAArray< IndexType > &outIA, LAMAArray< IndexType > &outJA, LAMAArray< ValueType > &outValues, const IndexType numRows, const LAMAArray< IndexType > &rowIndexes, const LAMAArray< IndexType > &inIA, const LAMAArray< IndexType > &inJA, const LAMAArray< ValueType > &inValues) |
Method that joins rows of another matrix storage. | |
static void | offsets2sizes (LAMAArray< IndexType > &offsets) |
Help routines to convert arrays with sizes to offsets and vice versa. | |
static void | offsets2sizes (LAMAArray< IndexType > &sizes, const LAMAArray< IndexType > &offsets) |
static IndexType | sizes2offsets (LAMAArray< IndexType > &sizes) |
Utitily to compute the offset array from a sizes array. | |
Protected Member Functions | |
void | swap (MatrixStorage< ValueType > &other) |
Swap member variables of base class MatrixStorage<T> | |
void | swap (_MatrixStorage &other) |
Swaps this with other. | |
virtual void | _assignTranspose (const _MatrixStorage &other) |
virtual void | _assign (const _MatrixStorage &other) |
Protected Attributes | |
ValueType | mEpsilon |
The value mEpsilon is an individual value for each matrix storage that specifies a threshold when a matrix values can be considered as zero. | |
IndexType | mNumRows |
IndexType | mNumColumns |
LAMAArray< IndexType > | mRowIndexes |
used in case of sparse representation of ia | |
float | mCompressThreshold |
ratio at which compression is done, 0 for never, 1 for always | |
bool | mDiagonalProperty |
if true, diagonal elements are always stored at first position in each row | |
ContextPtr | mContext |
preferred context for the storage | |
Private Member Functions | |
IndexType | ellindex (const IndexType i, const IndexType jj) const |
Addressing function for the arrays ia and ja: column-wise. | |
virtual bool | checkDiagonalProperty () const |
checks storage data if diagonal property is given | |
void | buildRowIndexes (const ContextPtr loc) |
Help routine that computes array with row indexes for non-empty rows. | |
LAMA_LOG_DECL_STATIC_LOGGER (logger) | |
logger for this matrix format | |
void | matrixTimesMatrixELL (const ValueType alpha, const ELLStorage< ValueType > &a, const ELLStorage< ValueType > &b) |
Matrix times Matrix for ELL only. | |
void | matrixAddMatrixELL (const ValueType alpha, const ELLStorage< ValueType > &a, const ValueType beta, const ELLStorage< ValueType > &b) |
Matrix + Matrix for ELL only. | |
Private Attributes | |
IndexType | mNumValuesPerRow |
number of values in each row | |
LAMAArray< IndexType > | mIa |
size is numRows | |
LAMAArray< IndexType > | mJa |
size is numRows x numValuesPerRow | |
LAMAArray< ValueType > | mValues |
size is numRows x numValuesPerRow |
Storage format for an ELLPACK sparse matrix.
The ELLPACK format has the following data:
In contrary to the CSR sparse format, the number of values per row is the same for all rows. So an offset array ia is no more needed. On the other hand, the arrays must be filled up completely with values. For ja the value nIndex is used, for data the value 0.0.
T | is the value type for the matrix elements. |
Note: default copy constructor and assignment operator are enabled. Copies of LAMAArray will be deep copies.
typedef T lama::ELLStorage< T >::ValueType |
This is the type of the matrix values.
Reimplemented from lama::MatrixStorage< T >.
lama::ELLStorage< ValueType >::ELLStorage | ( | ) |
Default constructor, zero matrix.
lama::ELLStorage< ValueType >::ELLStorage | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const ContextType | con = Context::Host |
||
) |
Creates a sparse matrix with all values set to zero.
[in] | numRows | the number of rows of the matrix |
[in] | numColumns | the number of columns of the matrix |
References lama::WriteAccess< T >::get(), lama::_MatrixStorage::getContext(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, lama::ELLStorage< T >::mIa, lama::_MatrixStorage::mNumColumns, lama::_MatrixStorage::mNumRows, and lama::_MatrixStorage::setContext().
lama::ELLStorage< ValueType >::ELLStorage | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const IndexType | numValuesPerRows, | ||
const LAMAArray< IndexType > & | ia, | ||
const LAMAArray< IndexType > & | ja, | ||
const LAMAArray< ValueType > & | values | ||
) |
Constructor for ELL storage by corresponding arrays.
References lama::ELLStorage< T >::check(), and lama::_MatrixStorage::resetDiagonalProperty().
lama::ELLStorage< ValueType >::ELLStorage | ( | const ELLStorage< ValueType > & | other | ) |
Copy constructor can take any matrix storage.
References lama::MatrixStorage< T >::assign().
lama::ELLStorage< T >::ELLStorage | ( | const _MatrixStorage & | other | ) | [inline, explicit] |
lama::ELLStorage< T >::ELLStorage | ( | const _MatrixStorage & | other, |
const ContextPtr | context | ||
) | [inline] |
Copy constructor can take any matrix storage or context.
lama::ELLStorage< ValueType >::~ELLStorage | ( | ) | [virtual] |
Destructor of ELL sparse matrix.
void lama::_MatrixStorage::_assign | ( | const _MatrixStorage & | other | ) | [protected, virtual, inherited] |
References lama::LAMAArray< T >::clear(), lama::_MatrixStorage::mCompressThreshold, lama::_MatrixStorage::mDiagonalProperty, lama::_MatrixStorage::mNumColumns, lama::_MatrixStorage::mNumRows, and lama::_MatrixStorage::mRowIndexes.
Referenced by lama::CSRStorage< T >::assign(), lama::DenseStorageView< T >::assignDenseStorageImpl(), and lama::JDSStorage< T >::assignJDS().
void lama::_MatrixStorage::_assignTranspose | ( | const _MatrixStorage & | other | ) | [protected, virtual, inherited] |
void lama::ELLStorage< ValueType >::allocate | ( | const IndexType | numRows, |
const IndexType | numColumns | ||
) | [virtual] |
Specify sizes of the matrixes for a default matrix.
Implements lama::_MatrixStorage.
References lama::LAMAArrayUtils::assign(), and LAMA_REGION.
void lama::MatrixStorage< ValueType >::assign | ( | const _MatrixStorage< T > & | other | ) | [virtual, inherited] |
Format conversion of matrix storage.
A default implementation is provided using CSR data. Derived clauses might override this method with more efficient solutions.
Implements lama::_MatrixStorage.
Reimplemented in lama::CSRStorage< T >, and lama::DenseStorageView< T >.
References lama::_MatrixStorage::buildCSRData(), lama::_MatrixStorage::copyTo(), lama::CSR, lama::File::DOUBLE, lama::File::FLOAT, lama::_MatrixStorage::getFormat(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::_MatrixStorage::getValueType(), and lama::_LAMAArray::size().
Referenced by lama::DenseStorageView< T >::assign(), lama::SparseMatrix< T >::assign(), lama::COOStorage< T >::COOStorage(), lama::DIAStorage< T >::DIAStorage(), lama::ELLStorage< T >::ELLStorage(), lama::JDSStorage< T >::JDSStorage(), lama::SparseAssemblyStorage< T >::SparseAssemblyStorage(), and lama::MatrixStorage< T >::splitHalo().
void lama::MatrixStorage< ValueType >::assignTranspose | ( | const MatrixStorage< ValueType > & | other | ) | [virtual, inherited] |
Transpose of matrix storage.
A default implementation is provided using CSR data. Derived clauses might override this method with more efficient solutions.
Note: type conversion is not supported here
Reimplemented in lama::CSRStorage< T >.
References lama::MatrixStorage< T >::buildCSCData(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), and lama::_LAMAArray::size().
void lama::MatrixStorage< T >::buildCSCData | ( | LAMAArray< IndexType > & | cscIA, |
LAMAArray< IndexType > & | cscJA, | ||
LAMAArray< ValueType > & | cscValues | ||
) | const [virtual, inherited] |
This method builds CSC sparse data (column sizes, row indexes and data values) for a matrix storage.
For efficiency a derived class might override this method, e.g. for CSR storage.
Reimplemented in lama::CSRStorage< T >.
Referenced by lama::CSRStorage< T >::assignTranspose(), lama::MatrixStorage< T >::assignTranspose(), and lama::SparseMatrix< T >::assignTransposeImpl().
void lama::ELLStorage< ValueType >::buildCSR | ( | LAMAArray< IndexType > & | ia, |
LAMAArray< IndexType > * | ja, | ||
LAMAArray< OtherValueType > * | values, | ||
const ContextPtr | loc | ||
) | const |
General routine to build any kind of CSR storage.
[out] | ia | is the CSR offset array |
[out] | ja | is the array with the column indexes (optional) |
[out] | values | is the array with the non-zero matrix values (optional) |
[in] | loc | is the Context where conversion should be done |
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN, LAMA_INTERFACE_FN_TT, and lama::WriteAccess< T >::resize().
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::buildCSRData | ( | LAMAArray< IndexType > & | csrIA, |
LAMAArray< IndexType > & | csrJA, | ||
_LAMAArray & | csrValues | ||
) | const [inline, virtual, inherited] |
Get the matrix data of the storage in CSR format.
[out] | csrIA | offset array for rows, csrIA.size() == numRows + 1 |
[out] | csrJA | column indexes, csrJA.size() == csrIA[ csrIA.size() ] |
[out] | csrValues | are the non-zero matrix values, csrJA.size() == csrValues.size() |
The csr data will have the diagonal property if this->hasDiagonalProperty() is true.
Note: This routine supports also type conversion between different value types.
DenseStorage<double> dense( ... ) LAMAArray<IndexType> ia, ja; LAMAArray<float> values; // get non-zero values of dense matrix as float values dense.buildCSRData( ia, ja, values );
This routine must be provided by each matrix storage format.
Implements lama::_MatrixStorage.
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::buildCSRSizes | ( | LAMAArray< IndexType > & | ia | ) | const [inline, virtual, inherited] |
Implementation for _MatrixStorage::buildCSRSizes.
Implements lama::_MatrixStorage.
void lama::MatrixStorage< ValueType >::buildHalo | ( | class Halo & | halo, |
const class Distribution & | colDist | ||
) | [virtual, inherited] |
Special version of splitHalo where this matrix contains no local data and where haloData is aliased to this matrix.
This routine is used to translate the non-local column indexes (required values) to local halo indexes and to set up the exchange schedule.
References lama::Distribution::getGlobalSize(), LAMA_ASSERT_EQUAL, and lama::_LAMAArray::size().
void lama::ELLStorage< ValueType >::buildRowIndexes | ( | const ContextPtr | loc | ) | [private] |
Help routine that computes array with row indexes for non-empty rows.
The array is only built if number of non-zero rows is smaller than a certain percentage ( mThreshold ).
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN.
void lama::ELLStorage< ValueType >::check | ( | const char * | msg | ) | const [virtual] |
Test the storage data for inconsistencies.
[in] | msg | is a string message to identify caller site |
Exception | in case of any inconsistency. |
Implements lama::_MatrixStorage.
References lama::ReadAccess< T >::get(), LAMA_ASSERT_EQUAL_ERROR, LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN.
Referenced by lama::ELLStorage< T >::ELLStorage().
bool lama::ELLStorage< ValueType >::checkDiagonalProperty | ( | ) | const [private, virtual] |
checks storage data if diagonal property is given
Implements lama::_MatrixStorage.
References lama::ReadAccess< T >::get(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN, and lama::min().
void lama::ELLStorage< ValueType >::clear | ( | ) | [virtual] |
Implementation for pure method of _MatrixStorage::clear.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::compress | ( | const ValueType | eps = 0.0 | ) |
compress compresses this by removing non-diagonal elements that are smaller than eps.
compress compresses this by removing non-diagonal elements that are smaller than eps. compress has linear runtime. compress is used by CSRSparseMatrix Multiplication.
[in] | eps | the threshold to set a element of this to zero and remove it. (Default: 0.0) |
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::ContextFactory::getContext(), lama::Context::Host, and LAMA_INTERFACE_FN_T.
void lama::MatrixStorage< ValueType >::convertCSR2CSC | ( | LAMAArray< IndexType > & | colIA, |
LAMAArray< IndexType > & | colJA, | ||
LAMAArray< ValueType > & | colValues, | ||
const IndexType | numColumns, | ||
const LAMAArray< IndexType > & | rowIA, | ||
const LAMAArray< IndexType > & | rowJA, | ||
const LAMAArray< ValueType > & | rowValues, | ||
const ContextPtr | loc | ||
) | [static, inherited] |
Conversion routine of Compressed Sparse Row data to Compressed Sparse Column.
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_ASSERT_EQUAL_DEBUG, LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, LAMA_REGION, and lama::_LAMAArray::size().
ELLStorage< ValueType > * lama::ELLStorage< ValueType >::copy | ( | ) | const [virtual] |
Implementation of MatrixStorage::copy for derived class.
Implements lama::MatrixStorage< T >.
void lama::MatrixStorage< ValueType >::copyTo | ( | _MatrixStorage< T > & | other | ) | const [virtual, inherited] |
The opposite routine to assign, for convenience as the other way around is sometimes more efficient.
Implements lama::_MatrixStorage.
Reimplemented in lama::CSRStorage< T >.
References LAMA_ASSERT_EQUAL_DEBUG, lama::_MatrixStorage::setCSRData(), and lama::_LAMAArray::size().
ELLStorage< ValueType > * lama::ELLStorage< ValueType >::create | ( | ) | const [virtual] |
Implementation of MatrixStorage::create for derived class.
Implements lama::MatrixStorage< T >.
IndexType lama::ELLStorage< T >::ellindex | ( | const IndexType | i, |
const IndexType | jj | ||
) | const [inline, private] |
Addressing function for the arrays ia and ja: column-wise.
void lama::MatrixStorage< ValueType >::exchangeHalo | ( | const class Halo & | halo, |
const MatrixStorage< ValueType > & | matrix, | ||
const class Communicator & | comm | ||
) | [virtual, inherited] |
Build a halo matrix with all rows of required indexes.
References lama::_MatrixStorage::buildCSRData(), lama::_MatrixStorage::getNumColumns(), and lama::_LAMAArray::size().
Referenced by lama::SparseMatrix< T >::matrixTimesMatrixImpl().
const Context& lama::_MatrixStorage::getContext | ( | ) | const [inline, inherited] |
Getter for the preferred context of the storage data.
Referenced by lama::ELLStorage< T >::ELLStorage().
ContextPtr lama::_MatrixStorage::getContextPtr | ( | ) | const [inline, inherited] |
Getter for the preferred context of the storage data, returns pointer.
Referenced by lama::SpecializedJacobi::iterateTyped(), and lama::JDSStorage< T >::JDSStorage().
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::getDiagonal | ( | _LAMAArray & | diagonal | ) | const [inline, virtual, inherited] |
This method returns the diagonal of the matrix.
[out] | diagonal | is the destination array |
The values will be stored in diagonal that can be of any type for which implicit conversion is available.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::getDiagonalImpl | ( | LAMAArray< OtherType > & | diagonal | ) | const |
This method returns the diagonal.
[in] | diagonal | is the destination array |
Calculations are dependent to the diagonal property
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_TT, and lama::min().
MatrixStorageFormat lama::ELLStorage< ValueType >::getFormat | ( | ) | const [virtual] |
Getter routine for the enum value that stands for this format.
Implements lama::_MatrixStorage.
References lama::ELL.
const LAMAArray< IndexType > & lama::ELLStorage< ValueType >::getIA | ( | ) | const |
getter for member variables IA, JA, Data, only const reference
Referenced by lama::ELLStorage< T >::matrixAddMatrixELL(), and lama::ELLStorage< T >::matrixTimesMatrixELL().
const LAMAArray< IndexType > & lama::ELLStorage< ValueType >::getJA | ( | ) | const |
size_t lama::_MatrixStorage::getMemoryUsage | ( | ) | const [inherited] |
Returns the number of bytes needed for the current matrix.
Note: This routine does not tell how many memory is really allocated. Storage data might be allocated on more than one device. Furthermore, it is possible that arrays have more memory reserved than needed for its current size.
References lama::_MatrixStorage::getMemoryUsageImpl(), lama::_MatrixStorage::mRowIndexes, and lama::_LAMAArray::size().
size_t lama::ELLStorage< ValueType >::getMemoryUsageImpl | ( | ) | const [virtual] |
Returns the number of bytes needed for the current matrix.
This pure function must be implemented by each derived class. Relevant for the number of bytes is the current size of the used (LAMA) arrays.
Note: This routine does not tell how many memory is really allocated. Storage data might be allocated on more than one device. Furthermore, it is possible that arrays have more memory reserved than needed for its current size.
Implements lama::_MatrixStorage.
IndexType lama::_MatrixStorage::getNumColumns | ( | ) | const [inline, inherited] |
References lama::_MatrixStorage::mNumColumns.
Referenced by lama::SparseMatrix< T >::assign(), lama::DenseMatrix< T >::assign(), lama::MatrixStorage< T >::assign(), lama::MatrixStorage< T >::assignTranspose(), lama::SparseMatrix< T >::assignTransposeImpl(), lama::InverseSolver::decompose(), lama::MatrixStorage< T >::exchangeHalo(), lama::InverseSolver::invert(), lama::JDSStorage< T >::jacobiIterateHalo(), lama::ELLStorage< T >::jacobiIterateHalo(), lama::CSRStorage< T >::jacobiIterateHalo(), lama::DenseMatrix< T >::joinColumnData(), lama::MatrixStorage< T >::joinHalo(), lama::_MatrixStorage::localize(), lama::DenseMatrix< T >::localize(), lama::MatrixStorage< T >::localize(), lama::CSRStorage< T >::matrixAddMatrixCSR(), lama::ELLStorage< T >::matrixAddMatrixELL(), lama::CSRStorage< T >::matrixTimesMatrixCSR(), lama::DenseStorageView< T >::matrixTimesMatrixDense(), lama::ELLStorage< T >::matrixTimesMatrixELL(), lama::DenseStorageView< T >::maxDiffNorm(), lama::CSRStorage< T >::maxDiffNorm(), lama::MatrixStorage< T >::maxDiffNorm(), lama::MatrixStorage< T >::redistribute(), lama::DenseMatrix< T >::redistributeRows(), lama::MatrixStorage< T >::replicate(), lama::replicate(), lama::SparseMatrix< T >::set(), lama::DenseMatrix< T >::splitColumnData(), lama::JDSSparseMatrix< T >::swapLocalStorage(), lama::CSRSparseMatrix< T >::swapLocalStorage(), lama::COOSparseMatrix< T >::swapLocalStorage(), lama::DIASparseMatrix< T >::swapLocalStorage(), and lama::ELLSparseMatrix< T >::swapLocalStorage().
IndexType lama::_MatrixStorage::getNumRows | ( | ) | const [inline, inherited] |
References lama::_MatrixStorage::mNumRows.
Referenced by lama::SparseMatrix< T >::assign(), lama::DenseMatrix< T >::assign(), lama::MatrixStorage< T >::assign(), lama::MatrixStorage< T >::assignTranspose(), lama::InverseSolver::decompose(), lama::InverseSolver::invert(), lama::DenseMatrix< T >::invertCyclic(), lama::SOR::iterateImpl(), lama::JDSStorage< T >::jacobiIterateHalo(), lama::ELLStorage< T >::jacobiIterateHalo(), lama::CSRStorage< T >::jacobiIterateHalo(), lama::DenseMatrix< T >::joinColumnData(), lama::MatrixStorage< T >::joinHalo(), lama::_MatrixStorage::localize(), lama::DenseMatrix< T >::localize(), lama::MatrixStorage< T >::localize(), lama::CSRStorage< T >::matrixAddMatrixCSR(), lama::ELLStorage< T >::matrixAddMatrixELL(), lama::CSRStorage< T >::matrixTimesMatrixCSR(), lama::DenseStorageView< T >::matrixTimesMatrixDense(), lama::ELLStorage< T >::matrixTimesMatrixELL(), lama::DenseStorageView< T >::maxDiffNorm(), lama::CSRStorage< T >::maxDiffNorm(), lama::MatrixStorage< T >::maxDiffNorm(), lama::MatrixStorage< T >::redistribute(), lama::MatrixStorage< T >::replicate(), lama::replicate(), lama::SparseMatrix< T >::set(), lama::DenseMatrix< T >::splitColumnData(), lama::JDSSparseMatrix< T >::swapLocalStorage(), lama::CSRSparseMatrix< T >::swapLocalStorage(), lama::COOSparseMatrix< T >::swapLocalStorage(), lama::DIASparseMatrix< T >::swapLocalStorage(), and lama::ELLSparseMatrix< T >::swapLocalStorage().
IndexType lama::ELLStorage< ValueType >::getNumValues | ( | ) | const [virtual] |
Getter routine for the number of stored values.
Reimplemented from lama::_MatrixStorage.
References lama::ReadAccess< T >::get(), LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_T.
IndexType lama::ELLStorage< ValueType >::getNumValuesPerRow | ( | ) | const |
Getter routine for the number of num values per row.
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::getRow | ( | _LAMAArray & | row, |
const IndexType | i | ||
) | const [inline, virtual, inherited] |
Get the i-th row of a storage as LAMA array.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::getRowImpl | ( | LAMAArray< OtherType > & | row, |
const IndexType | i | ||
) | const |
Template method for getting row.
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_ASSERT_DEBUG, LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_TT.
const LAMAArray< IndexType > & lama::_MatrixStorage::getRowIndexes | ( | ) | const [inline, inherited] |
References lama::_MatrixStorage::mRowIndexes.
virtual const char* lama::CRTPMatrixStorage< ELLStorage< T > , T >::getTypeName | ( | ) | const [inline, virtual, inherited] |
Implementation of MatrixStorage::getTypeName for derived class.
Implements lama::_MatrixStorage.
ValueType lama::ELLStorage< ValueType >::getValue | ( | IndexType | i, |
IndexType | j | ||
) | const [virtual] |
Get a value of the matrix.
[in] | i | is the row index, 0 <= i < mNumRows |
[in] | j | is the colum index, 0 <= j < mNumRows |
Out-of-range check is enabled for DEBUG version.
Implements lama::MatrixStorage< T >.
References lama::ReadAccess< T >::get(), LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_TT.
const LAMAArray< ValueType > & lama::ELLStorage< ValueType >::getValues | ( | ) | const |
Scalar::ScalarType lama::MatrixStorage< ValueType >::getValueType | ( | ) | const [virtual, inherited] |
Implementation of pure method.
Implements lama::_MatrixStorage.
Reimplemented in lama::DenseStorageView< T >.
Referenced by lama::DenseStorageView< T >::maxDiffNorm(), and lama::CSRStorage< T >::maxDiffNorm().
bool lama::_MatrixStorage::hasDiagonalProperty | ( | ) | const [inline, inherited] |
void lama::_MatrixStorage::init | ( | const IndexType | numRows, |
const IndexType | numColumns | ||
) | [inherited] |
Initialization of base class due to a resize.
References lama::_MatrixStorage::mCompressThreshold, lama::_MatrixStorage::mDiagonalProperty, lama::_MatrixStorage::mNumColumns, and lama::_MatrixStorage::mNumRows.
Referenced by lama::_MatrixStorage::_MatrixStorage(), lama::SparseAssemblyStorage< T >::allocate(), lama::CSRStorage< T >::allocate(), lama::JDSStorage< T >::setCSRDataImpl(), lama::ELLStorage< T >::setCSRDataImpl(), lama::DIAStorage< T >::setCSRDataImpl(), and lama::CSRStorage< T >::setIdentity().
void lama::MatrixStorage< ValueType >::invert | ( | const MatrixStorage< ValueType > & | other | ) | [virtual, inherited] |
assign this storage with the inverse of another matrix.
[in] | other | is matrix to invert, must be square |
Note: other matrix storage can be aliased with this storage.
Reimplemented in lama::DenseStorageView< T >.
References lama::DenseStorageView< T >::invert().
void lama::ELLStorage< ValueType >::jacobiIterate | ( | LAMAArrayView< ValueType > | solution, |
const LAMAArrayConstView< ValueType > | oldSolution, | ||
const LAMAArrayConstView< ValueType > | rhs, | ||
const ValueType | omega | ||
) | const [virtual] |
Implementation of MatrixStorage::jacobiIterate for ELL.
Reimplemented from lama::MatrixStorage< T >.
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_ASSERT_EQUAL_DEBUG, LAMA_ASSERT_ERROR, LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, LAMA_THROWEXCEPTION, lama::LAMAArrayView< T >::size(), and lama::LAMAArrayConstView< T >::size().
std::auto_ptr< SyncToken > lama::MatrixStorage< ValueType >::jacobiIterateAsync | ( | LAMAArrayView< ValueType > | solution, |
const LAMAArrayConstView< ValueType > | oldSolution, | ||
const LAMAArrayConstView< ValueType > | rhs, | ||
const ValueType | omega | ||
) | const [virtual, inherited] |
Asynchrounous version of jacobiIterate.
Referenced by lama::SpecializedJacobi::iterateTyped().
void lama::ELLStorage< ValueType >::jacobiIterateHalo | ( | LAMAArrayView< ValueType > | localSolution, |
const MatrixStorage< ValueType > & | localStorage, | ||
const LAMAArrayConstView< ValueType > | haloOldSolution, | ||
const ValueType | omega | ||
) | const [virtual] |
Implementation of MatrixStorage::jacobiIterateHalo for ELL.
Reimplemented from lama::MatrixStorage< T >.
References lama::ELL, lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::_MatrixStorage::getDiagonal(), lama::_MatrixStorage::getFormat(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::_MatrixStorage::hasDiagonalProperty(), LAMA_ASSERT_DEBUG, LAMA_ASSERT_EQUAL_DEBUG, LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, lama::ELLStorage< T >::mValues, lama::LAMAArrayView< T >::size(), and lama::LAMAArrayConstView< T >::size().
void lama::MatrixStorage< ValueType >::joinHalo | ( | const _MatrixStorage< T > & | localData, |
const _MatrixStorage< T > & | haloData, | ||
const class Halo & | halo, | ||
const class Distribution & | colDist | ||
) | [virtual, inherited] |
Join local and halo storage back into one storage as needed for NoDistribution.
This matrix storage is used as output matrix.
[in] | localData | is matrix storage with local data |
[in] | haloData | is the matrix storage with halo data |
[in] | halo | is the communicaton halo, contains also mapping halo to global indexes |
[in] | colDist | is the distribution that has be used for getting the local data |
Attention: localData might be aliased with this matrix storage, while haloData must not
Derived classes might use a default implementation that is based on joining CSR data with corresponding conversions.
References lama::_MatrixStorage::buildCSRData(), lama::Distribution::getGlobalSize(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::Halo::getRequiredIndexes(), lama::_MatrixStorage::hasDiagonalProperty(), lama::Distribution::local2global(), lama::min(), and lama::_LAMAArray::size().
Referenced by lama::SparseMatrix< T >::writeToFile().
void lama::MatrixStorage< ValueType >::joinRows | ( | LAMAArray< IndexType > & | outIA, |
LAMAArray< IndexType > & | outJA, | ||
LAMAArray< ValueType > & | outValues, | ||
const IndexType | numRows, | ||
const LAMAArray< IndexType > & | rowIndexes, | ||
const LAMAArray< IndexType > & | inIA, | ||
const LAMAArray< IndexType > & | inJA, | ||
const LAMAArray< ValueType > & | inValues | ||
) | [static, inherited] |
Method that joins rows of another matrix storage.
row(i) of out contains all elements of in(k) with rowIndexes[k] == i
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::WriteAccess< T >::resize(), lama::ReadAccess< T >::size(), and lama::WriteAccess< T >::size().
lama::ELLStorage< T >::LAMA_LOG_DECL_STATIC_LOGGER | ( | logger | ) | [private] |
logger for this matrix format
Reimplemented from lama::_MatrixStorage.
void lama::_MatrixStorage::localize | ( | const _MatrixStorage & | global, |
const Distribution & | rowDist | ||
) | [virtual, inherited] |
This operation localizes the matrix storage of a full matrix to the part that is owned by this processor.
This means that only the owned rows of the matrix will be kept.
Notes:
* routine can also be used if global is aliased with this matrix. * this routine is the same as an assign in case of a replicated distribution
References lama::Distribution::getGlobalSize(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), LAMA_ASSERT_EQUAL_ERROR, and LAMA_THROWEXCEPTION.
void lama::MatrixStorage< ValueType >::localize | ( | const _MatrixStorage< T > & | globalData, |
const class Distribution & | rowDist | ||
) | [virtual, inherited] |
This method build for this matrix the local part of a global matrix.
The row distribution specifies which rows of the global matrix will be used for this storage locally.
Attention: globalMatrix might be aliased to this storage.
References lama::_MatrixStorage::buildCSRData(), lama::Distribution::getGlobalSize(), lama::Distribution::getLocalSize(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::Distribution::isReplicated(), LAMA_ASSERT_EQUAL_ERROR, and lama::_LAMAArray::size().
Referenced by lama::DenseMatrix< T >::assign(), and lama::MatrixStorage< T >::splitHalo().
void lama::ELLStorage< ValueType >::matrixAddMatrixELL | ( | const ValueType | alpha, |
const ELLStorage< ValueType > & | a, | ||
const ValueType | beta, | ||
const ELLStorage< ValueType > & | b | ||
) | [private] |
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::ContextFactory::getContext(), lama::ELLStorage< T >::getIA(), lama::ELLStorage< T >::getJA(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::ELLStorage< T >::getValues(), lama::Context::Host, LAMA_ASSERT_EQUAL_ERROR, LAMA_ASSERT_ERROR, LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_T.
Referenced by lama::ELLStorage< T >::matrixTimesMatrix().
void lama::ELLStorage< ValueType >::matrixTimesMatrix | ( | const ValueType | alpha, |
const MatrixStorage< ValueType > & | a, | ||
const MatrixStorage< ValueType > & | b, | ||
const ValueType | beta, | ||
const MatrixStorage< ValueType > & | c | ||
) | [virtual] |
Implementation of MatrixStorage::matrixTimesMatrix for ELL.
Reimplemented from lama::MatrixStorage< T >.
References lama::ELL, lama::_MatrixStorage::getFormat(), LAMA_ASSERT_DEBUG, LAMA_THROWEXCEPTION, LAMA_UNSUPPORTED, lama::ELLStorage< T >::matrixAddMatrixELL(), and lama::ELLStorage< T >::matrixTimesMatrixELL().
void lama::ELLStorage< ValueType >::matrixTimesMatrixELL | ( | const ValueType | alpha, |
const ELLStorage< ValueType > & | a, | ||
const ELLStorage< ValueType > & | b | ||
) | [private] |
Matrix times Matrix for ELL only.
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::ContextFactory::getContext(), lama::ELLStorage< T >::getIA(), lama::ELLStorage< T >::getJA(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::ELLStorage< T >::getValues(), lama::Context::Host, LAMA_ASSERT_EQUAL_ERROR, LAMA_ASSERT_ERROR, LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_T.
Referenced by lama::ELLStorage< T >::matrixTimesMatrix().
void lama::MatrixStorage< ValueType >::matrixTimesScalar | ( | const ValueType | alpha, |
const MatrixStorage< ValueType > & | a | ||
) | [virtual, inherited] |
Assign this = alpha * a.
The default implementation assigns the matrix a and scales it afterwards.
void lama::ELLStorage< ValueType >::matrixTimesVector | ( | LAMAArrayView< ValueType > | result, |
const ValueType | alpha, | ||
const LAMAArrayConstView< ValueType > | x, | ||
const ValueType | beta, | ||
const LAMAArrayConstView< ValueType > | y | ||
) | const [virtual] |
Implementation of MatrixStorage::matrixTimesVector for ELL.
Reimplemented from lama::MatrixStorage< T >.
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_ASSERT_EQUAL_ERROR, LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, and lama::LAMAArrayConstView< T >::size().
std::auto_ptr< SyncToken > lama::ELLStorage< ValueType >::matrixTimesVectorAsync | ( | LAMAArrayView< ValueType > | result, |
const ValueType | alpha, | ||
const LAMAArrayConstView< ValueType > | x, | ||
const ValueType | beta, | ||
const LAMAArrayConstView< ValueType > | y | ||
) | const [virtual] |
Implementation of MatrixStorage::matrixTimesVectorAsync for ELL.
Reimplemented from lama::MatrixStorage< T >.
References LAMA_ASSERT_EQUAL_ERROR, LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, lama::SyncToken::pushAccess(), and lama::LAMAArrayConstView< T >::size().
void lama::MatrixStorage< ValueType >::matrixTimesVectorN | ( | LAMAArrayView< ValueType > | result, |
const IndexType | n, | ||
const ValueType | alpha, | ||
const LAMAArrayConstView< ValueType > | x, | ||
const ValueType | beta, | ||
const LAMAArrayConstView< ValueType > | y | ||
) | const [virtual, inherited] |
Reimplemented in lama::CSRStorage< T >.
References LAMA_UNSUPPORTED, and lama::CSRStorage< T >::matrixTimesVectorN().
ValueType lama::MatrixStorage< ValueType >::maxDiffNorm | ( | const MatrixStorage< ValueType > & | other | ) | [virtual, inherited] |
Get the maximal absolue element-wise difference between two matrix storages.
Reimplemented in lama::CSRStorage< T >, and lama::DenseStorageView< T >.
References lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), LAMA_ASSERT_EQUAL_ERROR, LAMA_UNSUPPORTED, and lama::DenseStorageView< T >::maxDiffNorm().
void lama::_MatrixStorage::offsets2sizes | ( | LAMAArray< IndexType > & | offsets | ) | [static, inherited] |
Help routines to convert arrays with sizes to offsets and vice versa.
References lama::WriteAccess< T >::resize(), and lama::_LAMAArray::size().
Referenced by lama::_MatrixStorage::offsets2sizes().
void lama::_MatrixStorage::offsets2sizes | ( | LAMAArray< IndexType > & | sizes, |
const LAMAArray< IndexType > & | offsets | ||
) | [static, inherited] |
ELLStorage<ValueType>& lama::ELLStorage< T >::operator= | ( | const _MatrixStorage & | other | ) | [inline] |
void lama::_MatrixStorage::prefetch | ( | ) | const [inline, inherited] |
Method that prefetches storage data to its preferred location.
References lama::_MatrixStorage::prefetch().
Referenced by lama::_MatrixStorage::prefetch().
void lama::ELLStorage< ValueType >::prefetch | ( | const ContextPtr | location | ) | const [virtual] |
Initiate an asynchronous data transfer to a specified location.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::print | ( | ) | const |
Print out the ELL storage on std::out, use only for debug.
void lama::ELLStorage< ValueType >::purge | ( | ) | [virtual] |
Implementation of pure method of class MatrixStorage.
Implements lama::_MatrixStorage.
void lama::MatrixStorage< ValueType >::readFromFile | ( | const std::string & | fileName | ) | [virtual, inherited] |
References lama::_LAMAArray::size().
void lama::MatrixStorage< ValueType >::redistribute | ( | const _MatrixStorage< T > & | other, |
const class Redistributor & | redistributor | ||
) | [virtual, inherited] |
This methods assigns a redistributed matrix.
[in] | other | is the local part of the matrix data to redistribute |
[in] | redistributor | contains source distribution of other and target distribution of this |
References lama::_MatrixStorage::buildCSRData(), lama::Distribution::getLocalSize(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::Redistributor::getSourceDistributionPtr(), lama::Redistributor::getTargetDistributionPtr(), lama::Distribution::isReplicated(), LAMA_ASSERT_EQUAL_ERROR, and lama::_LAMAArray::size().
void lama::MatrixStorage< ValueType >::replicate | ( | const _MatrixStorage< T > & | localData, |
const class Distribution & | rowDist | ||
) | [virtual, inherited] |
This routine builds the full matrix storage for a distributed matrix.
This routine is exactly the inverse routine to the localize routine. After this operation this matrix storage will contain on each processor the global matrix data.
References lama::Distribution::getGlobalSize(), lama::Distribution::getLocalSize(), lama::_MatrixStorage::getNumColumns(), lama::_MatrixStorage::getNumRows(), lama::Distribution::isReplicated(), LAMA_ASSERT_EQUAL_ERROR, and lama::_LAMAArray::size().
void lama::_MatrixStorage::resetDiagonalProperty | ( | ) | [inherited] |
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::scale | ( | const Scalar | value | ) | [inline, virtual, inherited] |
This method scales all matrix values with a scalar.
[in] | value | is the source value |
Implements lama::_MatrixStorage.
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::scale | ( | const _LAMAArray & | diagonal | ) | [inline, virtual, inherited] |
Polymorph implementation for MatrixStorage<T>::scale.
Implements lama::_MatrixStorage.
void lama::ELLStorage< T >::scaleImpl | ( | const LAMAArray< OtherType > & | values | ) |
Template version used for virtual routine scale with known value type.
void lama::ELLStorage< ValueType >::scaleImpl | ( | const Scalar | value | ) |
Implementation of pure method.
References lama::WriteAccess< T >::get(), lama::Scalar::getValue(), LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_TT.
void lama::ELLStorage< T >::scaleImpl | ( | const LAMAArray< OtherValueType > & | values | ) |
void lama::_MatrixStorage::setCompressThreshold | ( | float | ratio | ) | [inherited] |
Allow for additional row compression.
References LAMA_THROWEXCEPTION, and lama::_MatrixStorage::mCompressThreshold.
Referenced by lama::MatrixStorage< T >::splitHalo().
void lama::_MatrixStorage::setContext | ( | ContextPtr | context | ) | [inherited] |
Set the preferred context for the matrix storage.
[in] | context | specifies where the storage should be allocated and where operations should be done |
References lama::_MatrixStorage::mContext.
Referenced by lama::CSRStorage< T >::CSRStorage(), lama::DenseStorage< T >::DenseStorage(), and lama::ELLStorage< T >::ELLStorage().
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::setCSRData | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const IndexType | numValues, | ||
const LAMAArray< IndexType > & | ia, | ||
const LAMAArray< IndexType > & | ja, | ||
const _LAMAArray & | values | ||
) | [inline, virtual, inherited] |
Implementation of _MatrixStorage::setCSRData for derived class.
This routine requires that the derived class provides a corresponding routine setCSRDataImpl that can deal with a typed version of values.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::setCSRDataImpl | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const IndexType | numValues, | ||
const LAMAArray< IndexType > & | ia, | ||
const LAMAArray< IndexType > & | ja, | ||
const LAMAArray< OtherValueType > & | values, | ||
const ContextPtr | loc | ||
) |
fills ELLPACK sparse matrix by csr sparse data.
[in] | numRows | number of rows |
[in] | numColumns | number of columns |
[in] | numValues | the number of stored elements in the matrix |
[in] | ia | row pointer of the input csr sparse matrix |
[in] | ja | column indexes of the input csr sparse matrix |
[in] | values | the data values of the input csr sparse matrix |
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), lama::_MatrixStorage::init(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN, LAMA_INTERFACE_FN_T, LAMA_INTERFACE_FN_TT, LAMA_REGION, lama::min(), lama::WriteAccess< T >::resize(), and lama::WriteAccess< T >::size().
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::setDiagonal | ( | const Scalar | value | ) | [inline, virtual, inherited] |
Implements lama::_MatrixStorage.
void lama::CRTPMatrixStorage< ELLStorage< T > , T >::setDiagonal | ( | const _LAMAArray & | diagonal | ) | [inline, virtual, inherited] |
This method sets the diagonal of a matrix storage.
Implementation of this routine must be provided by all derived classes.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::setDiagonalImpl | ( | const LAMAArray< OtherType > & | diagonal | ) |
This method replaces the diagonal.
[in] | diagonal | is the source array |
Calculations are dependent to the diagonal property
References lama::ReadAccess< T >::get(), lama::WriteAccess< T >::get(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_TT, and lama::min().
void lama::ELLStorage< ValueType >::setDiagonalImpl | ( | const Scalar | scalar | ) |
This method replaces the diagonal by a diagonal value.
[in] | sclar | is the source value |
Calculations are dependent to the diagonal property
References lama::WriteAccess< T >::get(), lama::Scalar::getValue(), LAMA_CONTEXT_ACCESS, LAMA_INTERFACE_FN_T, and lama::min().
void lama::ELLStorage< ValueType >::setIdentity | ( | const IndexType | size | ) | [virtual] |
Implementation of pure method.
Implements lama::_MatrixStorage.
References lama::WriteAccess< T >::get(), LAMA_CONTEXT_ACCESS, and LAMA_INTERFACE_FN_T.
void lama::MatrixStorage< ValueType >::setRawCSRData | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const IndexType | numValues, | ||
const IndexType *const | ia, | ||
const IndexType *const | ja, | ||
const OtherValueType *const | values | ||
) | [inherited] |
fills matrix storage by csr sparse data.
[in] | numRows | number of rows |
[in] | numColumns | number of columns |
[in] | numValues | the number of stored elements in the matrix |
[in] | ia | row pointer of the input csr sparse matrix |
[in] | ja | column indexes of the input csr sparse matrix |
[in] | values | the data values of the input csr sparse matrix |
Referenced by lama::MatrixCreator< T >::fillRandom().
template LAMA_DLL_IMPORTEXPORT void lama::MatrixStorage< T >::setRawDenseData | ( | const IndexType | numRows, |
const IndexType | numColumns, | ||
const OtherValueType | values[], | ||
const ValueType | eps = 0.0 |
||
) | [inherited] |
Construct a matrix from a dense matrix in row-major order (C-style).
Values of the matrix will be considered as zero if their absolute value is smaller than eps.
[in] | numRows | number of rows |
[in] | numColumns | number of columns |
[in] | values | the dense matrix values in row-major order (C-style) |
[in] | eps | threshold value for non-zero elements |
Sparse matrix formats will have the diagonal property if numRows == numColums
References LAMA_ASSERT_ERROR, and lama::_LAMAArray::size().
IndexType lama::_MatrixStorage::sizes2offsets | ( | LAMAArray< IndexType > & | sizes | ) | [static, inherited] |
Utitily to compute the offset array from a sizes array.
References lama::WriteAccess< T >::resize(), and lama::_LAMAArray::size().
Referenced by lama::SparseAssemblyStorage< T >::buildCSR().
void lama::MatrixStorage< ValueType >::splitHalo | ( | MatrixStorage< ValueType > & | localData, |
MatrixStorage< ValueType > & | haloData, | ||
class Halo & | halo, | ||
const class Distribution & | colDist, | ||
const class Distribution * | rowDist | ||
) | const [virtual, inherited] |
Splitting of matrix storage for halo.
[out] | localData | will contain all columns owned by this processor |
[out] | haloData | will contain all columns not owned by this processor |
[out] | halo | will be the exchange schedule |
[in] | colDist | specifies the distribution of the columns |
[in] | rowDist | optional, localizes the rows before splitting |
References lama::_MatrixStorage::allocate(), lama::MatrixStorage< T >::assign(), lama::_MatrixStorage::check(), lama::Distribution::getGlobalSize(), lama::Distribution::getLocalSize(), lama::Distribution::isReplicated(), LAMA_ASSERT_EQUAL, LAMA_ASSERT_EQUAL_DEBUG, lama::MatrixStorage< T >::localize(), lama::_MatrixStorage::setCompressThreshold(), lama::_MatrixStorage::setCSRData(), and lama::_LAMAArray::size().
Referenced by lama::SparseMatrix< T >::set().
void lama::ELLStorage< ValueType >::swap | ( | ELLStorage< ValueType > & | other | ) |
Swap this ELL storage data with another ELL storage.
[in,out] | other | is the ELL storage with with this storage is swapped |
Note: swap is only possible for two storages of the same format and same type.
References lama::ELLStorage< T >::mIa, lama::ELLStorage< T >::mJa, lama::ELLStorage< T >::mNumValuesPerRow, lama::ELLStorage< T >::mValues, and lama::MatrixStorage< T >::swap().
void lama::_MatrixStorage::swap | ( | _MatrixStorage & | other | ) | [protected, inherited] |
Swaps this with other.
swap is protected to avoid accidently wrong swaps of base classes which do not implement their own swap.
[in,out] | other | the _MatrixStorage to swap this with |
References lama::_MatrixStorage::mCompressThreshold, lama::_MatrixStorage::mContext, lama::_MatrixStorage::mDiagonalProperty, lama::_MatrixStorage::mNumColumns, lama::_MatrixStorage::mNumRows, lama::_MatrixStorage::mRowIndexes, and lama::LAMAArray< T >::swap().
void lama::MatrixStorage< ValueType >::swap | ( | MatrixStorage< ValueType > & | other | ) | [protected, inherited] |
Swap member variables of base class MatrixStorage<T>
[in,out] | other | the MatrixStorage to swap this with |
swap is protected to avoid accidently wrong swaps of derived classes which do not implement their own swap or where storages of different format or types are involved.
CSRStorage<float> csr; CSRStorage<double> csr1; ELLStorage<float> ell; csr.swap( ell ); // NOT ALLOWED, different format csr.swap( csr1 ); // NOT ALLOWED, different type
References lama::MatrixStorage< T >::mEpsilon.
Referenced by lama::SparseAssemblyStorage< T >::swap(), lama::DenseStorageView< T >::swap(), lama::JDSStorage< T >::swap(), lama::COOStorage< T >::swap(), lama::DIAStorage< T >::swap(), lama::CSRStorage< T >::swap(), and lama::ELLStorage< T >::swap().
const char * lama::ELLStorage< float >::typeName | ( | ) |
const char * lama::ELLStorage< double >::typeName | ( | ) |
static const char* lama::ELLStorage< T >::typeName | ( | ) | [static] |
get typename of the matrix storage format.
void lama::ELLStorage< ValueType >::wait | ( | ) | const [virtual] |
Will wait for all outstanding asynchronous data transfers.
Implements lama::_MatrixStorage.
void lama::ELLStorage< ValueType >::writeAt | ( | std::ostream & | stream | ) | const [virtual] |
Print relevant information about matrix storage format.
Reimplemented from lama::_MatrixStorage.
void lama::MatrixStorage< ValueType >::writeToFile | ( | const std::string & | fileName, |
const File::FileType | fileType = File::BINARY , |
||
const File::DataType | dataType = File::INTERNAL , |
||
const File::IndexDataType | indexDataTypeIA = File::INT , |
||
const File::IndexDataType | indexDataTypeJA = File::INT |
||
) | const [virtual, inherited] |
get the number of elements left/right of the diagonal for the given row
[in] | row | global Index of row |
[out] | left | maximal distance of non-zero element to diagonal from the left |
[out] | right | maximal distance of non-zero element to diagonal from the right |
Referenced by lama::SparseMatrix< T >::writeToFile().
void lama::MatrixStorage< ValueType >::writeToFile | ( | const PartitionId | size, |
const PartitionId | rank, | ||
const std::string & | fileName, | ||
const File::FileType | fileType = File::BINARY , |
||
const File::DataType | dataType = File::INTERNAL , |
||
const File::IndexDataType | indexDataTypeIA = File::INT , |
||
const File::IndexDataType | indexDataTypeJA = File::INT |
||
) | const [virtual, inherited] |
float lama::_MatrixStorage::mCompressThreshold [protected, inherited] |
ratio at which compression is done, 0 for never, 1 for always
Referenced by lama::_MatrixStorage::_assign(), lama::_MatrixStorage::_assignTranspose(), lama::_MatrixStorage::init(), lama::_MatrixStorage::setCompressThreshold(), and lama::_MatrixStorage::swap().
ContextPtr lama::_MatrixStorage::mContext [protected, inherited] |
preferred context for the storage
Referenced by lama::_MatrixStorage::setContext(), and lama::_MatrixStorage::swap().
bool lama::_MatrixStorage::mDiagonalProperty [protected, inherited] |
if true, diagonal elements are always stored at first position in each row
Referenced by lama::_MatrixStorage::_assign(), lama::_MatrixStorage::_assignTranspose(), lama::CSRStorage< T >::CSRStorage(), lama::DenseStorageView< T >::DenseStorageView(), lama::DIAStorage< T >::DIAStorage(), lama::_MatrixStorage::hasDiagonalProperty(), lama::_MatrixStorage::init(), lama::CSRStorage< T >::maxDiffNormImpl(), lama::_MatrixStorage::resetDiagonalProperty(), lama::SparseAssemblyStorage< T >::setCSRDataImpl(), lama::_MatrixStorage::swap(), and lama::SparseAssemblyStorage< T >::writeAt().
ValueType lama::MatrixStorage< T >::mEpsilon [protected, inherited] |
The value mEpsilon is an individual value for each matrix storage that specifies a threshold when a matrix values can be considered as zero.
It is used internally especially when setting dense data or when the storage data is compressed.
Referenced by lama::MatrixStorage< T >::swap().
LAMAArray<IndexType> lama::ELLStorage< T >::mIa [private] |
size is numRows
Referenced by lama::ELLStorage< T >::ELLStorage(), and lama::ELLStorage< T >::swap().
LAMAArray<IndexType> lama::ELLStorage< T >::mJa [private] |
size is numRows x numValuesPerRow
Referenced by lama::ELLStorage< T >::swap().
IndexType lama::_MatrixStorage::mNumColumns [protected, inherited] |
Referenced by lama::_MatrixStorage::_assign(), lama::_MatrixStorage::_assignTranspose(), lama::_MatrixStorage::_MatrixStorage(), lama::LUSolver::computeLUFactorization(), lama::COOStorage< T >::COOStorage(), lama::CSRStorage< T >::CSRStorage(), lama::DenseStorage< T >::DenseStorage(), lama::DIAStorage< T >::DIAStorage(), lama::ELLStorage< T >::ELLStorage(), lama::SparseAssemblyStorage< T >::fixDiagonalProperty(), lama::SparseAssemblyStorage< T >::getDiagonalImpl(), lama::_MatrixStorage::getNumColumns(), lama::SparseAssemblyStorage< T >::getRowImpl(), lama::_MatrixStorage::init(), lama::JDSStorage< T >::JDSStorage(), lama::SparseAssemblyStorage< T >::operator()(), lama::SparseAssemblyStorage< T >::operator=(), lama::LUSolver::piamax_own(), lama::SparseAssemblyStorage< T >::print(), lama::LUSolver::ptrsm(), lama::SparseAssemblyStorage< T >::set(), lama::SparseAssemblyStorage< T >::setCSRDataImpl(), lama::SparseAssemblyStorage< T >::setDiagonalImpl(), lama::SparseAssemblyStorage< T >::setNumColumns(), lama::SparseAssemblyStorage< T >::SparseAssemblyStorage(), lama::_MatrixStorage::swap(), lama::SparseAssemblyStorage< T >::writeAt(), and lama::_MatrixStorage::writeAt().
IndexType lama::_MatrixStorage::mNumRows [protected, inherited] |
Referenced by lama::_MatrixStorage::_assign(), lama::_MatrixStorage::_assignTranspose(), lama::_MatrixStorage::_MatrixStorage(), lama::SparseAssemblyStorage< T >::buildCSR(), lama::LUSolver::computeLUFactorization(), lama::COOStorage< T >::COOStorage(), lama::CSRStorage< T >::CSRStorage(), lama::DenseStorage< T >::DenseStorage(), lama::DIAStorage< T >::DIAStorage(), lama::ELLStorage< T >::ELLStorage(), lama::SparseAssemblyStorage< T >::getDiagonalImpl(), lama::_MatrixStorage::getNumRows(), lama::_MatrixStorage::getNumValues(), lama::SparseAssemblyStorage< T >::getRowImpl(), lama::_MatrixStorage::init(), lama::JDSStorage< T >::JDSStorage(), lama::SparseAssemblyStorage< T >::operator=(), lama::LUSolver::pgetf2(), lama::LUSolver::piamax_own(), lama::SparseAssemblyStorage< T >::print(), lama::LUSolver::ptrsm(), lama::SparseAssemblyStorage< T >::scaleImpl(), lama::SparseAssemblyStorage< T >::set(), lama::SparseAssemblyStorage< T >::setCSRDataImpl(), lama::SparseAssemblyStorage< T >::setDiagonalImpl(), lama::SparseAssemblyStorage< T >::setIdentity(), lama::SparseAssemblyStorage< T >::SparseAssemblyStorage(), lama::_MatrixStorage::swap(), lama::SparseAssemblyStorage< T >::writeAt(), and lama::_MatrixStorage::writeAt().
IndexType lama::ELLStorage< T >::mNumValuesPerRow [private] |
number of values in each row
Referenced by lama::ELLStorage< T >::swap().
LAMAArray<IndexType> lama::_MatrixStorage::mRowIndexes [protected, inherited] |
used in case of sparse representation of ia
Referenced by lama::_MatrixStorage::_assign(), lama::_MatrixStorage::_assignTranspose(), lama::_MatrixStorage::getMemoryUsage(), lama::_MatrixStorage::getRowIndexes(), and lama::_MatrixStorage::swap().
LAMAArray<ValueType> lama::ELLStorage< T >::mValues [private] |
size is numRows x numValuesPerRow
Referenced by lama::ELLStorage< T >::jacobiIterateHalo(), and lama::ELLStorage< T >::swap().