|
BeBOP Optimized Sparse Kernel Interface Library
1.0.1h
|
Stores an MBCSR "submatrix". More...
#include <format.h>
Data Fields | |
| oski_index_t | num_block_rows |
| # of full block rows; if 0, all other fields are invalid. | |
| oski_index_t | offset |
| Row/column index of first diagonal block. | |
| oski_index_t | r |
| Row block size. | |
| oski_index_t | c |
| Column block size. | |
| oski_index_t * | bptr |
| Block row pointers. | |
| oski_index_t * | bind |
| Column indices. | |
| oski_value_t * | bval |
| Non-zero value off-diagonal blocks. | |
| oski_value_t * | bdiag |
| Non-zero value diagonal blocks. | |
| char * | mod_name |
| Name of module at this block size. | |
| void * | mod_cached |
| Cached implementation. | |
Stores an MBCSR "submatrix".
An
matrix
stored in
MBCSR submatrix format must satisfy the following conditions:
divides 

Let
be the number of block rows. Then
is stored in 4 arrays,
, as follows:
is an array of length
containing all the elements of
that lie within the
diagonal blocks beginning at element
where each block is a square
block. The blocks are stored consecutively, and each block is stored in row-major order. More precisely, for all
,
, and
, the array element
stores the matrix element
.
is an integer array of block-row pointers, of length at least
.
is an integer array of block column indices, of length at least
.
is an array of non-zero block values, of length at least
.
, where
, as rows
through
of
. Then For each
such that
,
is the column index of the
entry of an explicitly stored non-zero block whose values are laid out in row-major order in the subarray
.
overlaps with a diagonal block in
, then the corresponding entries in
are set to 0.
is defined so that it extends beyond column
of
. That is, if
does not divide
, then each block row may contain one block with
. If such a block overlaps with another block starting at column index
, then the initial columns of the block at
are set to zero. | oski_index_t* tagOski_submatMBCSR_t::bind |
Column indices.
Referenced by DestroySubmat(), GetSubmatEntryRaw(), MatConjTrisolve_Lower(), MatConjTrisolve_Upper(), MatHermTrisolve_Lower(), MatHermTrisolve_Upper(), MatMult(), MatMultAndMatConjMult(), MatMultAndMatHermMult(), MatMultAndMatMult(), MatMultAndMatTransMult(), MatTransMult(), MatTransTrisolve_Lower(), MatTransTrisolve_Upper(), MatTrisolve_Lower(), MatTrisolve_Upper(), oski_CreateMatReprFromCSR(), SubmatReprHermSubmatReprMult(), and SubmatReprTransSubmatReprMult().
| oski_index_t* tagOski_submatMBCSR_t::bptr |
Block row pointers.
Referenced by DestroySubmat(), GetSubmatEntryRaw(), MatConjTrisolve_Lower(), MatConjTrisolve_Upper(), MatHermTrisolve_Lower(), MatHermTrisolve_Upper(), MatMult(), MatMultAndMatConjMult(), MatMultAndMatHermMult(), MatMultAndMatMult(), MatMultAndMatTransMult(), MatTransMult(), MatTransTrisolve_Lower(), MatTransTrisolve_Upper(), MatTrisolve_Lower(), MatTrisolve_Upper(), oski_CreateMatReprFromCSR(), SubmatReprHermSubmatReprMult(), and SubmatReprTransSubmatReprMult().
| oski_index_t tagOski_submatMBCSR_t::num_block_rows |
# of full block rows; if 0, all other fields are invalid.
Referenced by CanBeExecuted(), DestroySubmat(), GetBlockDiagEntryRaw(), MatConjTrisolve_Lower(), MatConjTrisolve_Upper(), MatHermTrisolve_Lower(), MatHermTrisolve_Upper(), MatMult(), MatMultAndMatConjMult(), MatMultAndMatHermMult(), MatMultAndMatMult(), MatMultAndMatTransMult(), MatTransMult(), MatTransTrisolve_Lower(), MatTransTrisolve_Upper(), MatTrisolve_Lower(), MatTrisolve_Upper(), oski_CreateMatReprFromCSR(), oski_MatReprMult(), oski_MatReprMultAndMatReprTransMult(), oski_MatReprTransMatReprMult(), SubmatReprHermSubmatReprMult(), and SubmatReprTransSubmatReprMult().
1.7.6.1