#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.
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
.
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) |
1.4.6