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