Fbcsr< ValueType, IndexType > Class Template Reference#
|
Reference API
|
Fixed-block compressed sparse row storage matrix format. More...
#include <ginkgo/core/matrix/fbcsr.hpp>
Public Types | |
| using | value_type = ValueType |
| using | index_type = IndexType |
| using | transposed_type = Fbcsr< ValueType, IndexType > |
| using | mat_data = matrix_data< ValueType, IndexType > |
| using | device_mat_data = device_matrix_data< ValueType, IndexType > |
| using | absolute_type = remove_complex< Fbcsr > |
Public Types inherited from gko::EnablePolymorphicAssignment< ConcreteLinOp > | |
| using | result_type = ConcreteLinOp |
Public Types inherited from gko::ConvertibleTo< ResultType > | |
| using | result_type = ResultType |
Public Types inherited from gko::DiagonalExtractable< ValueType > | |
| using | value_type = ValueType |
Public Types inherited from gko::ReadableFromMatrixData< ValueType, IndexType > | |
| using | value_type = ValueType |
| using | index_type = IndexType |
Public Types inherited from gko::WritableToMatrixData< ValueType, IndexType > | |
| using | value_type = ValueType |
| using | index_type = IndexType |
Public Types inherited from gko::EnableAbsoluteComputation< AbsoluteLinOp > | |
| using | absolute_type = AbsoluteLinOp |
Public Member Functions | |
| void | convert_to (Fbcsr< next_precision< ValueType >, IndexType > *result) const override |
| void | move_to (Fbcsr< next_precision< ValueType >, IndexType > *result) override |
| void | convert_to (Fbcsr< next_precision< next_precision< ValueType > >, IndexType > *result) const override |
| void | move_to (Fbcsr< next_precision< 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 > *result) const override |
| void | move_to (Csr< ValueType, IndexType > *result) override |
| void | convert_to (SparsityCsr< ValueType, IndexType > *result) const override |
| void | move_to (SparsityCsr< ValueType, IndexType > *result) 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< LinOp > | transpose () const override |
| std::unique_ptr< LinOp > | conj_transpose () const override |
| std::unique_ptr< Diagonal< ValueType > > | extract_diagonal () const override |
| std::unique_ptr< absolute_type > | compute_absolute () const override |
| void | compute_absolute_inplace () override |
| void | sort_by_column_index () |
| bool | is_sorted_by_column_index () const |
| value_type * | get_values () noexcept |
| const value_type * | get_const_values () const noexcept |
| index_type * | get_col_idxs () noexcept |
| const index_type * | get_const_col_idxs () const noexcept |
| index_type * | get_row_ptrs () noexcept |
| const index_type * | get_const_row_ptrs () const noexcept |
| size_type | get_num_stored_elements () const noexcept |
| size_type | get_num_stored_blocks () const noexcept |
| int | get_block_size () const noexcept |
| index_type | get_num_block_rows () const noexcept |
| index_type | get_num_block_cols () const noexcept |
| Fbcsr & | operator= (const Fbcsr &) |
| Fbcsr & | operator= (Fbcsr &&) |
| Fbcsr (const Fbcsr &) | |
| Fbcsr (Fbcsr &&) | |
Public Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
| const ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) |
Public Member Functions inherited from gko::EnableAbstractPolymorphicObject< AbstractObject, PolymorphicBase > | |
| std::unique_ptr< AbstractObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | create_default () const |
| std::unique_ptr< AbstractObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< AbstractObject > | clone () const |
| AbstractObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (std::unique_ptr< Derived > &&other) |
| template<typename Derived > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (const std::unique_ptr< Derived > &other) |
| AbstractObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| AbstractObject * | move_from (ptr_param< PolymorphicObject > other) |
| AbstractObject * | clear () |
Public Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject & | operator= (const PolymorphicObject &) |
| std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | create_default () const |
| std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
| std::unique_ptr< PolymorphicObject > | clone () const |
| PolymorphicObject * | copy_from (const PolymorphicObject *other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
| template<typename Derived , typename Deleter > | |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
| PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
| PolymorphicObject * | clear () |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
Public Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | add_logger (std::shared_ptr< const Logger > logger) override |
| void | remove_logger (const Logger *logger) override |
| void | remove_logger (ptr_param< const Logger > logger) |
| const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
| void | clear_loggers () override |
Public Member Functions inherited from gko::log::Loggable | |
| void | remove_logger (ptr_param< const Logger > logger) |
Public Member Functions inherited from gko::EnablePolymorphicAssignment< ConcreteLinOp > | |
| void | convert_to (result_type *result) const override |
| void | move_to (result_type *result) override |
Public Member Functions inherited from gko::ConvertibleTo< ResultType > | |
| virtual void | convert_to (result_type *result) const =0 |
| void | convert_to (ptr_param< result_type > result) const |
| virtual void | move_to (result_type *result)=0 |
| void | move_to (ptr_param< result_type > result) |
Public Member Functions inherited from gko::DiagonalExtractable< ValueType > | |
| std::unique_ptr< LinOp > | extract_diagonal_linop () const override |
Public Member Functions inherited from gko::ReadableFromMatrixData< ValueType, IndexType > | |
| void | read (const matrix_assembly_data< ValueType, IndexType > &data) |
Public Member Functions inherited from gko::EnableAbsoluteComputation< AbsoluteLinOp > | |
| std::unique_ptr< LinOp > | compute_absolute_linop () const override |
Static Public Member Functions | |
| static std::unique_ptr< Fbcsr > | create (std::shared_ptr< const Executor > exec, int block_size=1) |
| static std::unique_ptr< Fbcsr > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, size_type num_nonzeros, int block_size) |
| static std::unique_ptr< Fbcsr > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, int block_size, array< value_type > values, array< index_type > col_idxs, array< index_type > row_ptrs) |
| template<typename InputValueType , typename InputColumnIndexType , typename InputRowPtrType > | |
| static std::unique_ptr< Fbcsr > | create (std::shared_ptr< const Executor > exec, const dim< 2 > &size, int block_size, std::initializer_list< InputValueType > values, std::initializer_list< InputColumnIndexType > col_idxs, std::initializer_list< InputRowPtrType > row_ptrs) |
| create(std::shared_ptr<const Executor>,const dim<2>&, int, array<value_type>, array<index_type>,array<index_type>) | |
| static std::unique_ptr< const Fbcsr > | create_const (std::shared_ptr< const Executor > exec, const dim< 2 > &size, int blocksize, gko::detail::const_array_view< ValueType > &&values, gko::detail::const_array_view< IndexType > &&col_idxs, gko::detail::const_array_view< IndexType > &&row_ptrs) |
Protected Member Functions | |
| Fbcsr (std::shared_ptr< const Executor > exec, int block_size=1) | |
| Fbcsr (std::shared_ptr< const Executor > exec, const dim< 2 > &size, size_type num_nonzeros, int block_size) | |
| Fbcsr (std::shared_ptr< const Executor > exec, const dim< 2 > &size, int block_size, array< value_type > values, array< index_type > col_idxs, array< index_type > row_ptrs) | |
| void | apply_impl (const LinOp *b, LinOp *x) const override |
| void | apply_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x) const override |
Protected Member Functions inherited from gko::EnableLinOp< ConcreteLinOp, PolymorphicBase > | |
| ConcreteLinOp * | self () noexcept |
| const ConcreteLinOp * | self () const noexcept |
Protected Member Functions inherited from gko::EnablePolymorphicObject< ConcreteObject, PolymorphicBase > | |
| std::unique_ptr< PolymorphicObject > | create_default_impl (std::shared_ptr< const Executor > exec) const override |
| PolymorphicObject * | copy_from_impl (const PolymorphicObject *other) override |
| PolymorphicObject * | copy_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | move_from_impl (PolymorphicObject *other) override |
| PolymorphicObject * | move_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| PolymorphicObject * | clear_impl () override |
Protected Member Functions inherited from gko::PolymorphicObject | |
| PolymorphicObject (std::shared_ptr< const Executor > exec) | |
| PolymorphicObject (const PolymorphicObject &other) | |
Protected Member Functions inherited from gko::log::EnableLogging< PolymorphicObject > | |
| void | log (Params &&... params) const |
Additional Inherited Members | |
Protected Attributes inherited from gko::log::EnableLogging< PolymorphicObject > | |
| std::vector< std::shared_ptr< const Logger > > | loggers_ |
Detailed Description
class gko::matrix::Fbcsr< ValueType, IndexType >
Fixed-block compressed sparse row storage matrix format.
FBCSR is a matrix format meant for matrices having a natural block structure made up of small, dense, disjoint blocks. It is similar to CSR
- See also
- Csr. However, unlike Csr, each non-zero location stores a small dense block of entries having a constant size. This reduces the number of integers that need to be stored in order to refer to a given non-zero entry, and enables efficient implementation of certain block methods.
The block size is expected to be known in advance and passed to the constructor.
- Note
- The total number of rows and the number of columns are expected to be divisible by the block size.
The nonzero elements are stored in a 1D array row-wise, and accompanied with a row pointer array which stores the starting index of each block-row. An additional block-column index array is used to identify the block-column of each nonzero block.
The Fbcsr LinOp supports different operations:
- Template Parameters
-
ValueType precision of matrix elements IndexType precision of matrix indexes
Constructor & Destructor Documentation
◆ Fbcsr() [1/2]
| gko::matrix::Fbcsr< ValueType, IndexType >::Fbcsr | ( | const Fbcsr< ValueType, IndexType > & | ) |
Copy-constructs an Ell matrix. Inherits executor and data.
◆ Fbcsr() [2/2]
| gko::matrix::Fbcsr< ValueType, IndexType >::Fbcsr | ( | Fbcsr< ValueType, IndexType > && | ) |
Move-constructs an Fbcsr matrix. Inherits executor and data. The moved-from object is empty (0x0 with no nonzeros, but valid row pointers).
Member Function Documentation
◆ compute_absolute()
|
overridevirtual |
Gets the AbsoluteLinOp
- Returns
- a pointer to the new absolute object
Implements gko::EnableAbsoluteComputation< AbsoluteLinOp >.
◆ compute_absolute_inplace()
|
overridevirtual |
Compute absolute inplace on each element.
Implements gko::AbsoluteComputable.
◆ conj_transpose()
|
overridevirtual |
Returns a LinOp representing the conjugate transpose of the Transposable object.
- Returns
- a pointer to the new conjugate transposed object
Implements gko::Transposable.
◆ convert_to() [1/2]
|
override |
Converts the matrix to CSR format
- Note
- Any explicit zeros in the original matrix are retained in the converted result.
◆ convert_to() [2/2]
|
override |
Get the block sparsity pattern in CSR-like format
- Note
- The actual non-zero values are never copied; the result always has a value array of size 1 with the value 1.
◆ create() [1/4]
|
static |
Creates a FBCSR matrix from already allocated (and initialized) row pointer, column index and value arrays.
- Parameters
-
exec Executor associated to the matrix size size of the matrix block_size Size of the small square dense nonzero blocks values the value array of the matrix, stored in column-major order for each block col_idxs the block column index array of the matrix row_ptrs the block row pointer array of the matrix
- Note
- If one of
row_ptrs,col_idxsorvaluesis not an rvalue, not an array of IndexType, 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/4]
|
inlinestatic |
◆ create() [3/4]
|
static |
Creates an uninitialized FBCSR matrix of the specified size.
- Parameters
-
exec Executor associated to the matrix size size of the matrix num_nonzeros number of stored nonzeros. It needs to be a multiple of block_size * block_size. block_size size of the small dense square blocks
- Returns
- A smart pointer to the newly created matrix.
◆ create() [4/4]
|
static |
Creates an uninitialized FBCSR matrix with the given block size.
- Parameters
-
exec Executor associated to the matrix block_size The desired size of the dense square nonzero blocks; defaults to 1.
- Returns
- A smart pointer to the newly created matrix.
Referenced by gko::matrix::Fbcsr< ValueType, IndexType >::create().
◆ create_const()
|
static |
Creates a constant (immutable) Fbcsr matrix from a constant array.
- Parameters
-
exec the executor to create the matrix on size the dimensions of the matrix blocksize the block size of the matrix values the value array of the matrix, stored in column-major order for each block col_idxs the block column index array of the matrix row_ptrs the block row pointer array of the matrix
- 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()
|
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< ValueType >.
◆ get_block_size()
|
inlinenoexcept |
- Returns
- The fixed block size for this matrix
◆ get_col_idxs()
|
inlinenoexcept |
- Returns
- The column indexes of the matrix.
References gko::array< ValueType >::get_data().
◆ get_const_col_idxs()
|
inlinenoexcept |
- 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.
References gko::array< ValueType >::get_const_data().
◆ get_const_row_ptrs()
|
inlinenoexcept |
- Returns
- The row pointers 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.
References gko::array< ValueType >::get_const_data().
◆ get_const_values()
|
inlinenoexcept |
- 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.
References gko::array< ValueType >::get_const_data().
◆ get_num_block_cols()
|
inlinenoexcept |
- Returns
- The number of block-columns in the matrix
◆ get_num_block_rows()
|
inlinenoexcept |
- Returns
- The number of block-rows in the matrix
◆ get_num_stored_blocks()
|
inlinenoexcept |
- Returns
- The number of non-zero blocks explicitly stored in the matrix
References gko::array< ValueType >::get_size().
◆ get_num_stored_elements()
|
inlinenoexcept |
- Returns
- The number of elements explicitly stored in the matrix
References gko::array< ValueType >::get_size().
◆ get_row_ptrs()
|
inlinenoexcept |
- Returns
- The row pointers of the matrix.
References gko::array< ValueType >::get_data().
◆ get_values()
|
inlinenoexcept |
- Returns
- The values of the matrix.
References gko::array< ValueType >::get_data().
◆ is_sorted_by_column_index()
| bool gko::matrix::Fbcsr< ValueType, IndexType >::is_sorted_by_column_index | ( | ) | const |
Tests if all row entry pairs (value, col_idx) are sorted by column index
- Returns
- True if all row entry pairs (value, col_idx) are sorted by column index
◆ operator=() [1/2]
| Fbcsr & gko::matrix::Fbcsr< ValueType, IndexType >::operator= | ( | const Fbcsr< ValueType, IndexType > & | ) |
Copy-assigns an Fbcsr matrix. Preserves the executor, copies data and block size from the input.
◆ operator=() [2/2]
| Fbcsr & gko::matrix::Fbcsr< ValueType, IndexType >::operator= | ( | Fbcsr< ValueType, IndexType > && | ) |
Move-assigns an Fbcsr matrix. Preserves the executor, moves the data over preserving size and stride. Leaves the moved-from object in an empty state (0x0 with no nonzeros, but valid row pointers).
◆ read() [1/3]
|
overridevirtual |
Reads a matrix from a device_matrix_data structure.
- Parameters
-
data the device_matrix_data structure.
Reimplemented from gko::ReadableFromMatrixData< ValueType, IndexType >.
◆ read() [2/3]
|
overridevirtual |
Reads a matrix_data into Fbcsr format. Requires the block size to be set beforehand
- See also
- set_block_size.
- Warning
- Unlike Csr::read, here explicit non-zeros are NOT dropped.
Implements gko::ReadableFromMatrixData< ValueType, IndexType >.
◆ read() [3/3]
|
overridevirtual |
Reads a matrix from a device_matrix_data structure. The structure may be emptied by this function.
- Parameters
-
data the device_matrix_data structure.
Reimplemented from gko::ReadableFromMatrixData< ValueType, IndexType >.
◆ sort_by_column_index()
| void gko::matrix::Fbcsr< ValueType, IndexType >::sort_by_column_index | ( | ) |
Sorts the values blocks and block-column indices in each row by column index
◆ transpose()
|
overridevirtual |
Returns a LinOp representing the transpose of the Transposable object.
- Returns
- a pointer to the new transposed object
Implements gko::Transposable.
◆ write()
|
overridevirtual |
Writes a matrix to a matrix_data structure.
- Parameters
-
data the matrix_data structure
Implements gko::WritableToMatrixData< ValueType, IndexType >.
The documentation for this class was generated from the following files:
Generated by
Public Types inherited from