Ginkgo: gko::matrix::Hybrid< 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::Hybrid< ValueType, IndexType > Class Template Reference
Linear Operators » SpMV employing different Matrix formats | Linear Operators

HYBRID is a matrix format which splits the matrix into ELLPACK and COO format. More...

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

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

## Classes
class | strategy_type
| strategy_type is to decide how to set the hybrid config. More...
class | column_limit
| column_limit is a strategy_type which decides the number of stored elements per row of the ell part by specifying the number of columns. More...
class | imbalance_limit
| imbalance_limit is a strategy_type which decides the number of stored elements per row of the ell part according to the percent. More...
class | imbalance_bounded_limit
| imbalance_bounded_limit is a strategy_type which decides the number of stored elements per row of the ell part. More...
class | minimal_storage_limit
| minimal_storage_limit is a strategy_type which decides the number of stored elements per row of the ell part. More...
class | automatic
| automatic is a strategy_type which decides the number of stored elements per row of the ell part automatically. More...

## 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 | coo_type = Coo<ValueType, IndexType>
using | ell_type = Ell<ValueType, IndexType>
using | absolute_type = remove_complex<Hybrid>
Public Types inherited from gko::EnablePolymorphicAssignment< Hybrid< 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< Hybrid< default_precision, int32 > > >
using | absolute_type

## Public Member Functions
void | convert_to (Hybrid< next_precision< ValueType >, IndexType > *result) const override
void | move_to (Hybrid< 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_ell_values () noexcept
| Returns the values of the ell part.
const value_type * | get_const_ell_values () const noexcept
| Returns the values of the ell part.
index_type * | get_ell_col_idxs () noexcept
| Returns the column indexes of the ell part.
const index_type * | get_const_ell_col_idxs () const noexcept
| Returns the column indexes of the ell part.
size_type | get_ell_num_stored_elements_per_row () const noexcept
| Returns the number of stored elements per row of ell part.
size_type | get_ell_stride () const noexcept
| Returns the stride of the ell part.
size_type | get_ell_num_stored_elements () const noexcept
| Returns the number of elements explicitly stored in the ell part.
value_type & | ell_val_at (size_type row, size_type idx) noexcept
| Returns the idx-th non-zero element of the row-th row in the ell part.
value_type | ell_val_at (size_type row, size_type idx) const noexcept
| Returns the idx-th non-zero element of the row-th row in the ell part.
index_type & | ell_col_at (size_type row, size_type idx) noexcept
| Returns the idx-th column index of the row-th row in the ell part.
index_type | ell_col_at (size_type row, size_type idx) const noexcept
| Returns the idx-th column index of the row-th row in the ell part.
const ell_type * | get_ell () const noexcept
| Returns the matrix of the ell part.
value_type * | get_coo_values () noexcept
| Returns the values of the coo part.
const value_type * | get_const_coo_values () const noexcept
| Returns the values of the coo part.
index_type * | get_coo_col_idxs () noexcept
| Returns the column indexes of the coo part.
const index_type * | get_const_coo_col_idxs () const noexcept
| Returns the column indexes of the coo part.
index_type * | get_coo_row_idxs () noexcept
| Returns the row indexes of the coo part.
const index_type * | get_const_coo_row_idxs () const noexcept
| Returns the row indexes of the coo part.
size_type | get_coo_num_stored_elements () const noexcept
| Returns the number of elements explicitly stored in the coo part.
const coo_type * | get_coo () const noexcept
| Returns the matrix of the coo part.
size_type | get_num_stored_elements () const noexcept
| Returns the number of elements explicitly stored in the matrix.
std::shared_ptr< strategy_type > | get_strategy () const noexcept
| Returns the strategy.
template<typename HybType>
std::shared_ptr< typename HybType::strategy_type > | get_strategy () const
| Returns the current strategy allowed in given hybrid format.
Hybrid & | operator= (const Hybrid &)
| Copy-assigns a Hybrid matrix.
Hybrid & | operator= (Hybrid &&)
| Move-assigns a Hybrid matrix.
| Hybrid (const Hybrid &)
| Copy-assigns a Hybrid matrix.
| Hybrid (Hybrid &&)
| Move-assigns a Hybrid matrix.
Public Member Functions inherited from gko::EnableLinOp< Hybrid< default_precision, int32 > >
const Hybrid< default_precision, int32 > * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const
Public Member Functions inherited from gko::EnablePolymorphicAssignment< Hybrid< 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< Hybrid< default_precision, int32 > > >
std::unique_ptr< LinOp > | compute_absolute_linop () const override
| Gets the absolute LinOp.

## Static Public Member Functions
static std::unique_ptr< Hybrid > | create (std::shared_ptr< const Executor > exec, std::shared_ptr< strategy_type > strategy=std::make_shared< automatic >())
| Creates an uninitialized Hybrid matrix of specified method.
static std::unique_ptr< Hybrid > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, std::shared_ptr< strategy_type > strategy=std::make_shared< automatic >())
| Creates an uninitialized Hybrid matrix of the specified size and method.
static std::unique_ptr< Hybrid > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, size_type num_stored_elements_per_row, std::shared_ptr< strategy_type > strategy=std::make_shared< automatic >())
| Creates an uninitialized Hybrid matrix of the specified size and method.
static std::unique_ptr< Hybrid > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, size_type num_stored_elements_per_row, size_type stride, std::shared_ptr< strategy_type > strategy)
| Creates an uninitialized Hybrid matrix of the specified size and method.
static std::unique_ptr< Hybrid > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, size_type num_stored_elements_per_row, size_type stride, size_type num_nonzeros={}, std::shared_ptr< strategy_type > strategy=std::make_shared< automatic >())
| Creates an uninitialized Hybrid matrix of the specified size and method.

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

## Detailed Description

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

HYBRID is a matrix format which splits the matrix into ELLPACK and COO format.

Achieve the excellent performance with a proper partition of ELLPACK and COO.

Template Parameters

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

## Constructor & Destructor Documentation

## ◆ Hybrid() [1/2]

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

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

Copy-assigns a Hybrid matrix.

Inherits the executor, copies the Ell and Coo matrices.

References Hybrid().

Referenced by get_strategy(), Hybrid(), Hybrid(), operator=(), and operator=().

## ◆ Hybrid() [2/2]

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

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

Move-assigns a Hybrid matrix.

Inherits the executor, moves the Ell and Coo matrices. The moved-from matrix is empty (0x0 with empty Ell/Coo matrices).

References Hybrid().

## Member Function Documentation

## ◆ compute_absolute()

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

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

Gets the AbsoluteLinOp.

Returns
  a pointer to the new absolute object

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

## ◆ compute_absolute_inplace()

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

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

Compute absolute inplace on each element.

Implements gko::AbsoluteComputable.

## ◆ create() [1/5]

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

std::unique_ptr< Hybrid > gko::matrix::Hybrid< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | size_type | num_stored_elements_per_row,
|  | size_type | stride,
|  | size_type | num_nonzeros = {},
|  | std::shared_ptr< strategy_type > | strategy = std::make_shared< automatic >() )
| static

Creates an uninitialized Hybrid matrix of the specified size and method.

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 rows
  num_nonzeros | number of nonzeros
  strategy | strategy of deciding the Hybrid config

Returns
  A smart pointer to the newly created matrix.

## ◆ create() [2/5]

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

std::unique_ptr< Hybrid > gko::matrix::Hybrid< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | size_type | num_stored_elements_per_row,
|  | size_type | stride,
|  | std::shared_ptr< strategy_type > | strategy )
| static

Creates an uninitialized Hybrid matrix of the specified size and method.

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 rows
  strategy | strategy of deciding the Hybrid config

Returns
  A smart pointer to the newly created matrix.

## ◆ create() [3/5]

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

std::unique_ptr< Hybrid > gko::matrix::Hybrid< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | size_type | num_stored_elements_per_row,
|  | std::shared_ptr< strategy_type > | strategy = std::make_shared< automatic >() )
| static

Creates an uninitialized Hybrid matrix of the specified size and method.

(ell_stride is set to the number of rows of the matrix.)

Parameters

  exec | Executor associated to the matrix
  size | size of the matrix
  num_stored_elements_per_row | the number of stored elements per row
  strategy | strategy of deciding the Hybrid config

Returns
  A smart pointer to the newly created matrix.

## ◆ create() [4/5]

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

std::unique_ptr< Hybrid > gko::matrix::Hybrid< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | const dim< 2 > & | size,
|  | std::shared_ptr< strategy_type > | strategy = std::make_shared< automatic >() )
| static

Creates an uninitialized Hybrid matrix of the specified size and method.

(ell_num_stored_elements_per_row is set to the number of cols of the matrix. ell_stride is set to the number of rows of the matrix.)

Parameters

  exec | Executor associated to the matrix
  size | size of the matrix
  strategy | strategy of deciding the Hybrid config

Returns
  A smart pointer to the newly created matrix.

## ◆ create() [5/5]

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

std::unique_ptr< Hybrid > gko::matrix::Hybrid< ValueType, IndexType >::create | ( | std::shared_ptr< const Executor > | exec,
|  | std::shared_ptr< strategy_type > | strategy = std::make_shared< automatic >() )
| static

Creates an uninitialized Hybrid matrix of specified method.

(ell_num_stored_elements_per_row is set to the number of cols of the matrix. ell_stride is set to the number of rows of the matrix.)

Parameters

  exec | Executor associated to the matrix
  strategy | strategy of deciding the Hybrid config

Returns
  A smart pointer to the newly created matrix.

## ◆ ell_col_at() [1/2]

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

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

Returns the idx-th column index of the row-th row in the ell part.

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)

## ◆ ell_col_at() [2/2]

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

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

Returns the idx-th column index of the row-th row in the ell part.

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)

## ◆ ell_val_at() [1/2]

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

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

Returns the idx-th non-zero element of the row-th row in the ell part.

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)

## ◆ ell_val_at() [2/2]

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

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

Returns the idx-th non-zero element of the row-th row in the ell part.

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)

## ◆ extract_diagonal()

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

std::unique_ptr< Diagonal< ValueType > > gko::matrix::Hybrid< 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_const_coo_col_idxs()

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

const index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_const_coo_col_idxs | ( |  | ) | const
| inlinenoexcept

Returns the column indexes of the coo part.

Returns
  the column indexes of the coo part.

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_const_coo_row_idxs()

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

const index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_const_coo_row_idxs | ( |  | ) | const
| inlinenoexcept

Returns the row indexes of the coo part.

Returns
  the row indexes of the coo part.

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_const_coo_values()

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

const value_type * gko::matrix::Hybrid< ValueType, IndexType >::get_const_coo_values | ( |  | ) | const
| inlinenoexcept

Returns the values of the coo part.

Returns
  the values of the coo part.

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_const_ell_col_idxs()

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

const index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_const_ell_col_idxs | ( |  | ) | const
| inlinenoexcept

Returns the column indexes of the ell part.

Returns
  the column indexes of the ell part

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_const_ell_values()

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

const value_type * gko::matrix::Hybrid< ValueType, IndexType >::get_const_ell_values | ( |  | ) | const
| inlinenoexcept

Returns the values of the ell part.

Returns
  the values of the ell part

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_coo()

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

const coo_type * gko::matrix::Hybrid< ValueType, IndexType >::get_coo | ( |  | ) | const
| inlinenoexcept

Returns the matrix of the coo part.

Returns
  the matrix of the coo part

## ◆ get_coo_col_idxs()

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

index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_coo_col_idxs | ( |  | ) |
| inlinenoexcept

Returns the column indexes of the coo part.

Returns
  the column indexes of the coo part.

## ◆ get_coo_num_stored_elements()

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

size_type gko::matrix::Hybrid< ValueType, IndexType >::get_coo_num_stored_elements | ( |  | ) | const
| inlinenoexcept

Returns the number of elements explicitly stored in the coo part.

Returns
  the number of elements explicitly stored in the coo part

## ◆ get_coo_row_idxs()

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

index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_coo_row_idxs | ( |  | ) |
| inlinenoexcept

Returns the row indexes of the coo part.

Returns
  the row indexes of the coo part.

## ◆ get_coo_values()

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

value_type * gko::matrix::Hybrid< ValueType, IndexType >::get_coo_values | ( |  | ) |
| inlinenoexcept

Returns the values of the coo part.

Returns
  the values of the coo part.

## ◆ get_ell()

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

const ell_type * gko::matrix::Hybrid< ValueType, IndexType >::get_ell | ( |  | ) | const
| inlinenoexcept

Returns the matrix of the ell part.

Returns
  the matrix of the ell part

## ◆ get_ell_col_idxs()

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

index_type * gko::matrix::Hybrid< ValueType, IndexType >::get_ell_col_idxs | ( |  | ) |
| inlinenoexcept

Returns the column indexes of the ell part.

Returns
  the column indexes of the ell part

## ◆ get_ell_num_stored_elements()

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

size_type gko::matrix::Hybrid< ValueType, IndexType >::get_ell_num_stored_elements | ( |  | ) | const
| inlinenoexcept

Returns the number of elements explicitly stored in the ell part.

Returns
  the number of elements explicitly stored in the ell part

## ◆ get_ell_num_stored_elements_per_row()

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

size_type gko::matrix::Hybrid< ValueType, IndexType >::get_ell_num_stored_elements_per_row | ( |  | ) | const
| inlinenoexcept

Returns the number of stored elements per row of ell part.

Returns
  the number of stored elements per row of ell part

## ◆ get_ell_stride()

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

size_type gko::matrix::Hybrid< ValueType, IndexType >::get_ell_stride | ( |  | ) | const
| inlinenoexcept

Returns the stride of the ell part.

Returns
  the stride of the ell part

## ◆ get_ell_values()

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

value_type * gko::matrix::Hybrid< ValueType, IndexType >::get_ell_values | ( |  | ) |
| inlinenoexcept

Returns the values of the ell part.

Returns
  the values of the ell part

## ◆ get_num_stored_elements()

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

size_type gko::matrix::Hybrid< 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_strategy() [1/2]

template<typename ValueType, typename IndexType>
template<typename HybType>

std::shared_ptr< typename HybType::strategy_type > gko::matrix::Hybrid< ValueType, IndexType >::get_strategy | ( |  | ) | const

Returns the current strategy allowed in given hybrid format.

Template Parameters

  HybType | hybrid type

Returns
  the strategy

References Hybrid().

## ◆ get_strategy() [2/2]

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

std::shared_ptr< strategy_type > gko::matrix::Hybrid< ValueType, IndexType >::get_strategy | ( |  | ) | const
| inlinenoexcept

Returns the strategy.

Returns
  the strategy

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

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

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

Copy-assigns a Hybrid matrix.

Preserves the executor, copy-assigns the Ell and Coo matrices.

References Hybrid().

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

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

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

Move-assigns a Hybrid matrix.

Preserves the executor, move-assigns the Ell and Coo matrices. The moved-from matrix is empty (0x0 with empty Ell/Coo matrices).

References Hybrid().

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

- ginkgo/core/matrix/coo.hpp
- ginkgo/core/matrix/hybrid.hpp