Ginkgo: gko::matrix::Ell< ValueType, IndexType > Class Template Reference

| Ginkgo Generated from branch based on main. Ginkgo version 1.11.0 A numerical linear algebra library targeting many-core architectures

Loading...
Searching...
No Matches
gko::matrix::Ell< ValueType, IndexType > Class Template Reference
Linear Operators » SpMV employing different Matrix formats | Linear Operators

ELL is a matrix format where stride with explicit zeros is used such that all rows have the same number of stored elements. More...

`#include <ginkgo/core/matrix/ell.hpp>`

Inheritance diagram for gko::matrix::Ell< ValueType, IndexType >:
[legend]
Collaboration diagram for gko::matrix::Ell< ValueType, IndexType >:
[legend]

## Public Types
using | value_type = ValueType
using | index_type = IndexType
using | mat_data = matrix_data<ValueType, IndexType>
using | device_mat_data = device_matrix_data<ValueType, IndexType>
using | absolute_type = remove_complex<Ell>
Public Types inherited from gko::EnablePolymorphicAssignment< Ell< default_precision, int32 > >
using | result_type
Public Types inherited from gko::DiagonalExtractable< default_precision >
using | value_type
Public Types inherited from gko::ReadableFromMatrixData< default_precision, int32 >
using | value_type
using | index_type
Public Types inherited from gko::WritableToMatrixData< default_precision, int32 >
using | value_type
using | index_type
Public Types inherited from gko::EnableAbsoluteComputation< remove_complex< Ell< default_precision, int32 > > >
using | absolute_type

## Public Member Functions
void | convert_to (Ell< next_precision< ValueType >, IndexType > *result) const override
void | move_to (Ell< next_precision< ValueType >, IndexType > *result) override
void | convert_to (Dense< ValueType > *other) const override
void | move_to (Dense< ValueType > *other) override
void | convert_to (Csr< ValueType, IndexType > *other) const override
void | move_to (Csr< ValueType, IndexType > *other) override
void | read (const mat_data &data) override
void | read (const device_mat_data &data) override
void | read (device_mat_data &&data) override
void | write (mat_data &data) const override
std::unique_ptr< Diagonal< ValueType > > | extract_diagonal () const override
| Extracts the diagonal entries of the matrix into a vector.
std::unique_ptr< absolute_type > | compute_absolute () const override
| Gets the AbsoluteLinOp.
void | compute_absolute_inplace () override
| Compute absolute inplace on each element.
value_type * | get_values () noexcept
| Returns the values of the matrix.
const value_type * | get_const_values () const noexcept
| Returns the values of the matrix.
index_type * | get_col_idxs () noexcept
| Returns the column indexes of the matrix.
const index_type * | get_const_col_idxs () const noexcept
| Returns the column indexes of the matrix.
size_type | get_num_stored_elements_per_row () const noexcept
| Returns the number of stored elements per row.
size_type | get_stride () const noexcept
| Returns the stride of the matrix.
size_type | get_num_stored_elements () const noexcept
| Returns the number of elements explicitly stored in the matrix.
value_type & | val_at (size_type row, size_type idx) noexcept
| Returns the idx-th non-zero element of the row-th row .
value_type | val_at (size_type row, size_type idx) const noexcept
| Returns the idx-th non-zero element of the row-th row .
index_type & | col_at (size_type row, size_type idx) noexcept
| Returns the idx-th column index of the row-th row .
index_type | col_at (size_type row, size_type idx) const noexcept
| Returns the idx-th column index of the row-th row .
Ell & | operator= (const Ell &)
| Copy-assigns an Ell matrix.
Ell & | operator= (Ell &&)
| Move-assigns an Ell matrix.
| Ell (const Ell &)
| Copy-constructs an Ell matrix.
| Ell (Ell &&)
| Move-constructs an Ell matrix.
Public Member Functions inherited from gko::EnableLinOp< Ell< default_precision, int32 > >
const Ell< default_precision, int32 > * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const
Public Member Functions inherited from gko::EnablePolymorphicAssignment< Ell< default_precision, int32 > >
void | convert_to (result_type *result) const override
void | move_to (result_type *result) override
Public Member Functions inherited from gko::DiagonalExtractable< default_precision >
std::unique_ptr< LinOp > | extract_diagonal_linop () const override
| Extracts the diagonal entries of the matrix into a vector.
Public Member Functions inherited from gko::ReadableFromMatrixData< default_precision, int32 >
virtual void | read (const matrix_data< default_precision, int32 > &data)=0
| Reads a matrix from a matrix_data structure.
Public Member Functions inherited from gko::WritableToMatrixData< default_precision, int32 >
virtual void | write (matrix_data< default_precision, int32 > &data) const=0
| Writes a matrix to a matrix_data structure.
Public Member Functions inherited from gko::EnableAbsoluteComputation< remove_complex< Ell< default_precision, int32 > > >
std::unique_ptr< LinOp > | compute_absolute_linop () const override
| Gets the absolute LinOp.

## Static Public Member Functions
static std::unique_ptr< Ell > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size={}, size_type num_stored_elements_per_row=0, size_type stride=0)
| Creates an uninitialized Ell matrix of the specified size.
static std::unique_ptr< Ell > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, array< value_type > values, array< index_type > col_idxs, size_type num_stored_elements_per_row, size_type stride)
| Creates an ELL matrix from already allocated (and initialized) column index and value arrays.
template<typename InputValueType, typename InputColumnIndexType>
static std::unique_ptr< Ell > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, std::initializer_list< InputValueType > values, std::initializer_list< InputColumnIndexType > col_idxs, size_type num_stored_elements_per_row, size_type stride)
| create(std::shared_ptr<const Executor>,const dim<2>&, array<value_type>, array<index_type>, size_type,size_type)
static std::unique_ptr< const Ell > | create_const (std::shared_ptr< const Executor > exec, const dim< 2 > &size, gko::detail::const_array_view< ValueType > &&values, gko::detail::const_array_view< IndexType > &&col_idxs, size_type num_stored_elements_per_row, size_type stride)
| Creates a constant (immutable) Ell matrix from a set of constant arrays.

## Friends
class | EnablePolymorphicObject< Ell, LinOp >
class | Dense< ValueType >
class | Coo< ValueType, IndexType >
class | Csr< ValueType, IndexType >
class | Ell< to_complex< ValueType >, IndexType >
class | Ell< previous_precision< ValueType >, IndexType >
class | Hybrid< ValueType, IndexType >

## Detailed Description

template<typename ValueType = default_precision, typename IndexType = int32>
class gko::matrix::Ell< ValueType, IndexType >

ELL is a matrix format where stride with explicit zeros is used such that all rows have the same number of stored elements.

The number of elements stored in each row is the largest number of nonzero elements in any of the rows (obtainable through get_num_stored_elements_per_row() method). This removes the need of a row pointer like in the CSR format, and allows for SIMD processing of the distinct rows. For efficient processing, the nonzero elements and the corresponding column indices are stored in column-major fashion. The columns are padded to the length by user-defined stride parameter whose default value is the number of rows of the matrix.

This implementation uses the column index value invalid_index<IndexType>() to mark padding entries that are not part of the sparsity pattern.

Template Parameters

  ValueType | precision of matrix elements
  IndexType | precision of matrix indexes

## Constructor & Destructor Documentation

## ◆ Ell() [1/2]

template<typename ValueType = default_precision, typename IndexType = int32>

gko::matrix::Ell< ValueType, IndexType >::Ell | ( | const Ell< ValueType, IndexType > & |  | ) |

Copy-constructs an Ell matrix.

Inherits executor and dimensions, but copies data without padding.

## ◆ Ell() [2/2]

template<typename ValueType = default_precision, typename IndexType = int32>

gko::matrix::Ell< ValueType, IndexType >::Ell | ( | Ell< ValueType, IndexType > && |  | ) |

Move-constructs an Ell matrix.

Inherits executor, dimensions and data with padding. The moved-from object is empty (0x0 with empty Array).

## Member Function Documentation

## ◆ col_at() [1/2]

template<typename ValueType = default_precision, typename IndexType = int32>

index_type gko::matrix::Ell< ValueType, IndexType >::col_at | ( | size_type | row,
|  | size_type | idx ) const
| inlinenoexcept

Returns the idx-th column index of the row-th row .

Parameters

  row | the row of the requested element
  idx | the idx-th stored element of the row

Note
  the method has to be called on the same Executor the matrix is stored at (e.g. trying to call this method on a GPU matrix from the OMP results in a runtime error)

## ◆ col_at() [2/2]

template<typename ValueType = default_precision, typename IndexType = int32>

index_type & gko::matrix::Ell< ValueType, IndexType >::col_at | ( | size_type | row,
|  | size_type | idx )
| inlinenoexcept

Returns the idx-th column index of the row-th row .

Parameters

  row | the row of the requested element
  idx | the idx-th stored element of the row

Note
  the method has to be called on the same Executor the matrix is stored at (e.g. trying to call this method on a GPU matrix from the OMP results in a runtime error)

## ◆ compute_absolute()

template<typename ValueType = default_precision, typename IndexType = int32>

std::unique_ptr< absolute_type > gko::matrix::Ell< ValueType, IndexType >::compute_absolute | ( |  | ) | const
| overridevirtual

Gets the AbsoluteLinOp.

Returns
  a pointer to the new absolute object

Implements gko::EnableAbsoluteComputation< remove_complex< Ell< default_precision, int32 > > >.

## ◆ compute_absolute_inplace()

template<typename ValueType = default_precision, typename IndexType = int32>

void gko::matrix::Ell< ValueType, IndexType >::compute_absolute_inplace | ( |  | ) |
| overridevirtual

Compute absolute inplace on each element.

Implements gko::AbsoluteComputable.

## ◆ create() [1/3]

template<typename ValueType = default_precision, typename IndexType = int32>

std::unique_ptr< Ell > gko::matrix::Ell< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | array< value_type > | values,
|  | array< index_type > | col_idxs,
|  | size_type | num_stored_elements_per_row,
|  | size_type | stride )
| static

Creates an ELL matrix from already allocated (and initialized) column index and value arrays.

Parameters

  exec | Executor associated to the matrix
  size | size of the matrix
  values | array of matrix values
  col_idxs | array of column indexes
  num_stored_elements_per_row | the number of stored elements per row
  stride | stride of the rows

Note
  If one of col_idxs or values is not an rvalue, not an array of IndexType and ValueType, respectively, or is on the wrong executor, an internal copy of that array will be created, and the original array data will not be used in the matrix.

Returns
  A smart pointer to the newly created matrix.

## ◆ create() [2/3]

template<typename ValueType = default_precision, typename IndexType = int32>
template<typename InputValueType, typename InputColumnIndexType>

std::unique_ptr< Ell > gko::matrix::Ell< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | std::initializer_list< InputValueType > | values,
|  | std::initializer_list< InputColumnIndexType > | col_idxs,
|  | size_type | num_stored_elements_per_row,
|  | size_type | stride )
| inlinestatic

create(std::shared_ptr<const Executor>,const dim<2>&, array<value_type>, array<index_type>, size_type,size_type)

create(std::shared_ptr<const Executor>,const dim<2>&, array<value_type>, array<index_type>, size_type,size_type)

## ◆ create() [3/3]

template<typename ValueType = default_precision, typename IndexType = int32>

std::unique_ptr< Ell > gko::matrix::Ell< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size = {},
|  | size_type | num_stored_elements_per_row = 0,
|  | size_type | stride = 0 )
| static

Creates an uninitialized Ell matrix of the specified size.

Parameters

  exec | Executor associated to the matrix
  size | size of the matrix
  num_stored_elements_per_row | the number of stored elements per row
  stride | stride of the columns. If it is set to 0, size[0] will be used instead.

Returns
  A smart pointer to the newly created matrix.

Referenced by gko::matrix::Ell< value_type, index_type >::create().

## ◆ create_const()

template<typename ValueType = default_precision, typename IndexType = int32>

std::unique_ptr< const Ell > gko::matrix::Ell< ValueType, IndexType >::create_const | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | gko::detail::const_array_view< ValueType > && | values,
|  | gko::detail::const_array_view< IndexType > && | col_idxs,
|  | size_type | num_stored_elements_per_row,
|  | size_type | stride )
| static

Creates a constant (immutable) Ell matrix from a set of constant arrays.

Parameters

  exec | the executor to create the matrix on
  size | the dimensions of the matrix
  values | the value array of the matrix
  col_idxs | the column index array of the matrix
  num_stored_elements_per_row | the number of stored nonzeros per row
  stride | the column-stride of the value and column index array

Returns
  A smart pointer to the constant matrix wrapping the input arrays (if they reside on the same executor as the matrix) or a copy of the arrays on the correct executor.

## ◆ extract_diagonal()

template<typename ValueType = default_precision, typename IndexType = int32>

std::unique_ptr< Diagonal< ValueType > > gko::matrix::Ell< ValueType, IndexType >::extract_diagonal | ( |  | ) | const
| overridevirtual

Extracts the diagonal entries of the matrix into a vector.

Parameters

  diag | the vector into which the diagonal will be written

Implements gko::DiagonalExtractable< default_precision >.

## ◆ get_col_idxs()

template<typename ValueType = default_precision, typename IndexType = int32>

index_type * gko::matrix::Ell< ValueType, IndexType >::get_col_idxs | ( |  | ) |
| inlinenoexcept

Returns the column indexes of the matrix.

Returns
  the column indexes of the matrix.

Referenced by gko::matrix::Ell< value_type, index_type >::col_at().

## ◆ get_const_col_idxs()

template<typename ValueType = default_precision, typename IndexType = int32>

const index_type * gko::matrix::Ell< ValueType, IndexType >::get_const_col_idxs | ( |  | ) | const
| inlinenoexcept

Returns the column indexes of the matrix.

Returns
  the column indexes of the matrix.

Note
  This is the constant version of the function, which can be significantly more memory efficient than the non-constant version, so always prefer this version.

Referenced by gko::matrix::Ell< value_type, index_type >::col_at().

## ◆ get_const_values()

template<typename ValueType = default_precision, typename IndexType = int32>

const value_type * gko::matrix::Ell< ValueType, IndexType >::get_const_values | ( |  | ) | const
| inlinenoexcept

Returns the values of the matrix.

Returns
  the values of the matrix.

Note
  This is the constant version of the function, which can be significantly more memory efficient than the non-constant version, so always prefer this version.

## ◆ get_num_stored_elements()

template<typename ValueType = default_precision, typename IndexType = int32>

size_type gko::matrix::Ell< ValueType, IndexType >::get_num_stored_elements | ( |  | ) | const
| inlinenoexcept

Returns the number of elements explicitly stored in the matrix.

Returns
  the number of elements explicitly stored in the matrix

## ◆ get_num_stored_elements_per_row()

template<typename ValueType = default_precision, typename IndexType = int32>

size_type gko::matrix::Ell< ValueType, IndexType >::get_num_stored_elements_per_row | ( |  | ) | const
| inlinenoexcept

Returns the number of stored elements per row.

Returns
  the number of stored elements per row.

## ◆ get_stride()

template<typename ValueType = default_precision, typename IndexType = int32>

size_type gko::matrix::Ell< ValueType, IndexType >::get_stride | ( |  | ) | const
| inlinenoexcept

Returns the stride of the matrix.

Returns
  the stride of the matrix.

## ◆ get_values()

template<typename ValueType = default_precision, typename IndexType = int32>

value_type * gko::matrix::Ell< ValueType, IndexType >::get_values | ( |  | ) |
| inlinenoexcept

Returns the values of the matrix.

Returns
  the values of the matrix.

## ◆ operator=() [1/2]

template<typename ValueType = default_precision, typename IndexType = int32>

Ell & gko::matrix::Ell< ValueType, IndexType >::operator= | ( | const Ell< ValueType, IndexType > & |  | ) |

Copy-assigns an Ell matrix.

Preserves the executor, reallocates the matrix with minimal stride if the dimensions don't match, then copies the data over, ignoring padding.

## ◆ operator=() [2/2]

template<typename ValueType = default_precision, typename IndexType = int32>

Ell & gko::matrix::Ell< ValueType, IndexType >::operator= | ( | Ell< ValueType, IndexType > && |  | ) |

Move-assigns an Ell matrix.

Preserves the executor, moves the data over preserving size and stride. Leaves the moved-from object in an empty state (0x0 with empty Array).

## ◆ val_at() [1/2]

template<typename ValueType = default_precision, typename IndexType = int32>

value_type gko::matrix::Ell< ValueType, IndexType >::val_at | ( | size_type | row,
|  | size_type | idx ) const
| inlinenoexcept

Returns the idx-th non-zero element of the row-th row .

Parameters

  row | the row of the requested element
  idx | the idx-th stored element of the row

Note
  the method has to be called on the same Executor the matrix is stored at (e.g. trying to call this method on a GPU matrix from the OMP results in a runtime error)

## ◆ val_at() [2/2]

template<typename ValueType = default_precision, typename IndexType = int32>

value_type & gko::matrix::Ell< ValueType, IndexType >::val_at | ( | size_type | row,
|  | size_type | idx )
| inlinenoexcept

Returns the idx-th non-zero element of the row-th row .

Parameters

  row | the row of the requested element
  idx | the idx-th stored element of the row

Note
  the method has to be called on the same Executor the matrix is stored at (e.g. trying to call this method on a GPU matrix from the OMP results in a runtime error)

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

- ginkgo/core/matrix/csr.hpp
- ginkgo/core/matrix/ell.hpp