KokkosSparse::BsrRowView

Defined in header KokkosSparse_BsrMatrix.hpp.

template <class MatrixType>
struct BsrRowView;

View of a row of a block sparse matrix. This class provides a generic view of a block row of a sparse matrix. We intended this class to view a row of a BsrMatrix, but MatrixType need not necessarily be BsrMatrix.

Template Parameters

MatrixType:

type of the matrix that stores the row to be viewed.

Member Types

Memeber type

Definition

value_type

The type the values stored in a block.

ordinal_type

The type of the column indices.

block_values_type

The type of a block in the row (a rank 2 Kokkos View).

Data Members

Data Member

Definition

length

Number of entries (i.e. blocks) in the row.

Member Functions

Name

Definition

BsrRowView

constructor of the block row view, may require the type of the matrix who’s row is being viewed.

local_row_in_block

Return a pointer to the first value of a given row in a block.

local_block_value

Return a pointer to a specific value in a block of the row.

block

Gets a rank 2 view representing the data of the requested block.

findRelBlockOffset

Finds the offset associated with a given block in the row.

constructor

KOKKOS_INLINE_FUNCTION
BsrRowView(value_type* const values, ordinal_type* const colidx,
           const ordinal_type& blockDim, const ordinal_type& count);

template <class OffsetType>
KOKKOS_INLINE_FUNCTION
BsrRowView(const typename MatrixType::values_type& values,
           const typename MatrixType::index_type& colidx, const ordinal_type& blockDim,
           const ordinal_type& count, const OffsetType& start,
           const typename std::enable_if<std::is_integral_v<OffsetType>, int>::type& = 0);

Constructs a BsrRowBiew instance from raw pointers or from views extracted from a block matrix.

  1. Pointer based constructor, it assumes that the pointers passed are correctly offset for the desired row.

  2. View based constructor, will compute offsets internally.

Note

I am not quite sure why we have the std::enable_if<> for the second constructor? Would it be possible to replace it with a static_assert() on the same condition?

Type Requirements

  • OffsetType must be an integral type.

Parameters

values:

Array of the row’s values.

colidx:

Array of the row’s column indices.

blockDim:

Stride between rows within a block in the above arrays.

count:

The number of blocks in the row.

start:

Offset into values and colidx of the desired block-row start.

local_row_in_block

KOKKOS_INLINE_FUNCTION
value_type* local_row_in_block(const ordinal_type& K, const ordinal_type& i) const;

Return a pointer offset to local row i of block K of values_ array; user responsible for indexing into this pointer correctly.

Parameters

K:

must be the LOCAL block index within this block-row.

i:

must be the LOCAL row index offset within this block-row.

local_block_value

KOKKOS_INLINE_FUNCTION
value_type& local_block_value(const ordinal_type& K, const ordinal_type& i,
                              const ordinal_type& j) const;

Return the value at a specified block K of block-row with local row and col offset (i,j).

Parameters

K:

must be the LOCAL block index within this block-row.

i:

must be the LOCAL row index offset within this block-row.

j:

must be the LOCAL col index offset within this block-row.

block

KOKKOS_INLINE_FUNCTION
block_values_type block(const ordinal_type& K) const;

Return unmanaged 2D strided View wrapping local block K from this block-row.

Parameters

K:

must be the LOCAL block index within this block-row.

findRelBlockOffset

KOKKOS_INLINE_FUNCTION
ordinal_type findRelBlockOffset(const ordinal_type idx_to_match, bool /*is_sorted*/ = false) const;

Return offset into colidx_ for the requested block idx. If none found, return Kokkos::ArithTraits<ordinal_type>::max().

Parameters

id_to_math:

The index to find in the row, if the index is not found Kokkos::ArithTraits<ordinal_type>::max() is returned.