CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matrix (compressed sparse row format).
More...
void convert_to (Csr < next_precision < ValueType >, IndexType > *result) const override
void move_to (Csr < next_precision < ValueType >, IndexType > *result) override
void convert_to (Dense < ValueType > *other) const override
void move_to (Dense < ValueType > *other) override
void convert_to (Coo < ValueType, IndexType > *result) const override
void move_to (Coo < ValueType, IndexType > *result) override
void convert_to (Ell < ValueType, IndexType > *result) const override
void move_to (Ell < ValueType, IndexType > *result) override
void convert_to (Fbcsr < ValueType, IndexType > *result) const override
void move_to (Fbcsr < ValueType, IndexType > *result) override
void convert_to (Hybrid < ValueType, IndexType > *result) const override
void move_to (Hybrid < ValueType, IndexType > *result) override
void convert_to (Sellp < ValueType, IndexType > *result) const override
void move_to (Sellp < 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
Returns a LinOp representing the transpose of the Transposable object.
std::unique_ptr< LinOp > conj_transpose () const override
Returns a LinOp representing the conjugate transpose of the Transposable object.
std::pair< std::unique_ptr< Csr >, permuting_reuse_info > transpose_reuse () const
Computes the necessary data to update a transposed matrix from its original matrix.
std::unique_ptr< Csr > permute (ptr_param < const Permutation < index_type > > permutation, permute_mode mode=permute_mode::symmetric ) const
Creates a permuted copy of this matrix with the given permutation .
std::unique_ptr< Csr > permute (ptr_param < const Permutation < index_type > > row_permutation, ptr_param < const Permutation < index_type > > column_permutation, bool invert=false) const
Creates a non-symmetrically permuted copy of this matrix with the given row and column permutations and .
std::pair< std::unique_ptr< Csr >, permuting_reuse_info > permute_reuse (ptr_param < const Permutation < index_type > > permutation, permute_mode mode=permute_mode::symmetric ) const
Computes the operations necessary to propagate changed values from a matrix A to a permuted matrix.
std::pair< std::unique_ptr< Csr >, permuting_reuse_info > permute_reuse (ptr_param < const Permutation < index_type > > row_permutation, ptr_param < const Permutation < index_type > > column_permutation, bool invert=false) const
Computes the operations necessary to propagate changed values from a matrix A to a permuted matrix.
std::unique_ptr< Csr > scale_permute (ptr_param < const ScaledPermutation < value_type, index_type > > permutation, permute_mode =permute_mode::symmetric ) const
Creates a scaled and permuted copy of this matrix.
std::unique_ptr< Csr > scale_permute (ptr_param < const ScaledPermutation < value_type, index_type > > row_permutation, ptr_param < const ScaledPermutation < value_type, index_type > > column_permutation, bool invert=false) const
Creates a scaled and permuted copy of this matrix.
std::unique_ptr< LinOp > permute (const array < IndexType > *permutation_indices) const override
std::unique_ptr< LinOp > inverse_permute (const array < IndexType > *inverse_permutation_indices) const override
std::unique_ptr< LinOp > row_permute (const array < IndexType > *permutation_indices) const override
std::unique_ptr< LinOp > column_permute (const array < IndexType > *permutation_indices) const override
std::unique_ptr< LinOp > inverse_row_permute (const array < IndexType > *inverse_permutation_indices) const override
std::unique_ptr< LinOp > inverse_column_permute (const array < IndexType > *inverse_permutation_indices) 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.
void sort_by_column_index ()
Sorts all (value, col_idx) pairs in each row by column index.
bool is_sorted_by_column_index () const
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.
std::unique_ptr< Dense < ValueType > > create_value_view ()
Creates a Dense view of the value array of this matrix as a column vector of dimensions nnz x 1.
std::unique_ptr< const Dense < ValueType > > create_const_value_view () const
Creates a const Dense view of the value array of this matrix as a column vector of dimensions nnz x 1.
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.
index_type * get_row_ptrs () noexcept
Returns the row pointers of the matrix.
const index_type * get_const_row_ptrs () const noexcept
Returns the row pointers of the matrix.
index_type * get_srow () noexcept
Returns the starting rows.
const index_type * get_const_srow () const noexcept
Returns the starting rows.
size_type get_num_srow_elements () const noexcept
Returns the number of the srow stored elements (involved warps)
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.
void set_strategy (std::shared_ptr< strategy_type > strategy)
Set the strategy.
void scale (ptr_param < const LinOp > alpha)
Scales the matrix with a scalar.
void inv_scale (ptr_param < const LinOp > alpha)
Scales the matrix with the inverse of a scalar.
std::unique_ptr< Csr < ValueType, IndexType > > create_submatrix (const index_set < IndexType > &row_index_set, const index_set < IndexType > &column_index_set) const
Creates a submatrix from this Csr matrix given row and column index_set objects.
std::unique_ptr< Csr < ValueType, IndexType > > create_submatrix (const span &row_span, const span &column_span) const
Creates a submatrix from this Csr matrix given row and column spans.
Csr & operator= (const Csr &)
Copy-assigns a Csr matrix.
Csr & operator= (Csr &&)
Move-assigns a Csr matrix.
Csr (const Csr &)
Copy-constructs a Csr matrix.
Csr (Csr &&)
Move-constructs a Csr matrix.
const Csr< default_precision , int32 > * apply (ptr_param < const LinOp > b, ptr_param < LinOp > x) const
std::unique_ptr< Csr< default_precision , int32 > > create_default (std::shared_ptr< const Executor > exec) const
std::unique_ptr< Csr< default_precision , int32 > > clone (std::shared_ptr< const Executor > exec) const
Csr< default_precision , int32 > * copy_from (const PolymorphicObject *other)
Csr< default_precision , int32 > * move_from (ptr_param < PolymorphicObject > other)
Csr< default_precision , int32 > * clear ()
LinOp * apply (ptr_param < const LinOp > b, ptr_param < LinOp > x)
Applies a linear operator to a vector (or a sequence of vectors).
const LinOp * apply (ptr_param < const LinOp > b, ptr_param < LinOp > x) const
LinOp * apply (ptr_param < const LinOp > alpha, ptr_param < const LinOp > b, ptr_param < const LinOp > beta, ptr_param < LinOp > x)
Performs the operation x = alpha * op(b) + beta * x.
const LinOp * apply (ptr_param < const LinOp > alpha, ptr_param < const LinOp > b, ptr_param < const LinOp > beta, ptr_param < LinOp > x) const
const dim < 2 > & get_size () const noexcept
Returns the size of the operator.
virtual bool apply_uses_initial_guess () const
Returns true if the linear operator uses the data given in x as an initial guess.
LinOp & operator= (const LinOp &)=default
Copy-assigns a LinOp .
LinOp & operator= (LinOp &&other)
Move-assigns a LinOp .
LinOp (const LinOp &)=default
Copy-constructs a LinOp .
LinOp (LinOp &&other)
Move-constructs a LinOp .
std::unique_ptr< LinOp > create_default (std::shared_ptr< const Executor > exec) const
std::unique_ptr< LinOp > clone (std::shared_ptr< const Executor > exec) const
LinOp * copy_from (const PolymorphicObject *other)
LinOp * move_from (ptr_param < PolymorphicObject > other)
LinOp * clear ()
PolymorphicObject & operator= (const PolymorphicObject &)
std::unique_ptr< PolymorphicObject > create_default (std::shared_ptr< const Executor > exec) const
Creates a new "default" object of the same dynamic type as this object.
std::unique_ptr< PolymorphicObject > create_default () const
Creates a new "default" object of the same dynamic type as this object.
std::unique_ptr< PolymorphicObject > clone (std::shared_ptr< const Executor > exec) const
Creates a clone of the object.
std::unique_ptr< PolymorphicObject > clone () const
Creates a clone of the object.
PolymorphicObject * copy_from (const PolymorphicObject *other)
Copies another object into this object.
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)
Moves another object into this object.
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)
Copies another object into this object.
PolymorphicObject * copy_from (const std::shared_ptr< const PolymorphicObject > &other)
Copies another object into this object.
PolymorphicObject * move_from (ptr_param < PolymorphicObject > other)
Moves another object into this object.
PolymorphicObject * clear ()
Transforms the object into its default state.
std::shared_ptr< const Executor > get_executor () const noexcept
Returns the Executor of the object.
void add_logger (std::shared_ptr< const Logger > logger) override
Adds a new logger to the list of subscribed loggers.
void remove_logger (const Logger *logger) override
Removes a logger from the list of subscribed loggers.
const std::vector< std::shared_ptr< const Logger > > & get_loggers () const override
Returns the vector containing all loggers registered at this object.
void clear_loggers () override
Remove all loggers registered at this object.
void remove_logger (ptr_param < const Logger > logger)
void convert_to (result_type *result) const override
void move_to (result_type *result) override
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void convert_to (result_type *result) const=0
Converts the implementer to an object of type result_type.
virtual void move_to (result_type *result)=0
Converts the implementer to an object of type result_type by moving data from this object.
virtual void read (const matrix_data < default_precision , int32 > &data)=0
Reads a matrix from a matrix_data structure.
virtual void write (matrix_data < default_precision , int32 > &data) const=0
Writes a matrix to a matrix_data structure.
virtual std::unique_ptr< LinOp > permute (const array < int32 > *permutation_indices) const
Returns a LinOp representing the symmetric row and column permutation of the Permutable object.
virtual std::unique_ptr< LinOp > inverse_permute (const array < int32 > *permutation_indices) const
Returns a LinOp representing the symmetric inverse row and column permutation of the Permutable object.
virtual std::unique_ptr< LinOp > row_permute (const array < int32 > *permutation_indices) const=0
Returns a LinOp representing the row permutation of the Permutable object.
virtual std::unique_ptr< LinOp > column_permute (const array < int32 > *permutation_indices) const=0
Returns a LinOp representing the column permutation of the Permutable object.
virtual std::unique_ptr< LinOp > inverse_row_permute (const array < int32 > *permutation_indices) const=0
Returns a LinOp representing the row permutation of the inverse permuted object.
virtual std::unique_ptr< LinOp > inverse_column_permute (const array < int32 > *permutation_indices) const=0
Returns a LinOp representing the row permutation of the inverse permuted object.
std::unique_ptr< LinOp > compute_absolute_linop () const override
Gets the absolute LinOp .
void add_scaled_identity (ptr_param < const LinOp > const a, ptr_param < const LinOp > const b)
Scales this and adds another scalar times the identity to it.
template<typename ValueType = default_precision, typename IndexType = int32>
class gko::matrix::Csr< ValueType, IndexType >
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matrix (compressed sparse row format).
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 row. An additional column index array is used to identify the column of each nonzero element.
The Csr LinOp supports different operations:
A->apply(b, x)
A->apply(alpha, b, beta, x)
A->apply(B, C)
A->apply(alpha, B, beta, C)
A->apply(alpha, I, beta, B)
CSR is a matrix format which stores only the nonzero coefficients by compressing each row of the matr...
Definition csr.hpp:126
Dense is a matrix format which explicitly stores all values of the matrix.
Definition dense.hpp:120
This class is a utility which efficiently implements the identity matrix (a linear operator which map...
Definition identity.hpp:35
Both the SpGEMM and SpGEAM operation require the input matrices to be sorted by column index, otherwise the algorithms will produce incorrect results.
Template Parameters
ValueType precision of matrix elements
IndexType precision of matrix indexes