#include <format.h>
An matrix
is stored in
BCSR format using six arrays,
. The triplet
stores rows 1 through
using uniformly aligned
blocks, and the triplet
stores any remaining
rows using uniformly aligned
blocks.
Define block-row to be rows
through
of
, where
. For each
such that
,
is the column index
entry of an explicitly stored non-zero block whose values are laid out in row-major order in the subarray
.
These blocks are uniformly aligned, meaning that . However, there is one exception: 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.
If does not divide
, then the remaining rows are stored in
as a single block row with
blocks. These arrays follow the same conventions as
.
Data Fields | |
int | has_unit_diag_implicit |
1 <==> Diagonal == 1 and is implicitly stored | |
oski_index_t | row_block_size |
Row block size. | |
oski_index_t | col_block_size |
Column block size. | |
oski_index_t | num_block_rows |
# of full block rows | |
oski_index_t | num_block_cols |
# of full block columns | |
oski_index_t * | bptr |
Block row pointers. | |
oski_index_t * | bind |
Block column indices. | |
oski_value_t * | bval |
Non-zero blocks. | |
oski_index_t | num_rows_leftover |
Number of "leftover" rows (i.e., ![]() | |
tagBebop_matBCSR_t * | leftover |
Stores leftover rows, if any. | |
char * | mod_name |
Module name containing this rxc implementation. | |
void * | mod_cached |
Cached module pointer. |
|
Stores leftover rows, if any. (NULL otherwise) |