#include <format.h>
An
matrix
stored in
MBCSR format is logically partitioned row-wise into 3 submatrices,
, where
is stored in
MBCSR format. This partitioning is a `canonical' format in which
,
, and
have the following properties:
consists of all block rows and diagonal blocks of size
and
, respectively.
contains the degenerate diagonal block of size
where
, and the corresponding block row of size
that contains it.
contains no diagonal blocks (i.e., is simply stored in BCSR format).
The purpose of this format is to enable fast implementations of the triangular solve and
kernels in which the `special case' code to handle degenerate diagonal block, if any, is stored separately in
, and multiplication by
and
can execute at `full' speed. The canonical form provides a uniform way to treat both square and rectangular matrices stored in MBCSR format.
Data Fields | |
| oski_submatMBCSR_t | A1 |
| |
| oski_submatMBCSR_t | A2 |
| |
| oski_matBCSR_t * | p_A3 |
Pointer to . | |
| struct { | |
| int is_upper | |
| int is_lower | |
| } | stored |
| Mutually exclusive non-zero pattern properties. | |
| struct { | |
| int MatTransMatMult | |
Specialized kernel. | |
| int MatMultAndMatMult | |
Specialized kernel. | |
| int MatMultAndMatTransMult | |
Specialized kernel. | |
| int MatPowMult | |
Specialized kernel. | |
| int MatTransPowMult | |
Specialized kernel. | |
| } | enabled |
| Flags to enable/disable individual kernel implementations. | |
|
|
Flags to enable/disable individual kernel implementations. These are currently implemented as boolean flags, but stored as general integers for future expansion.
|
|
|
Mutually exclusive non-zero pattern properties. These properties work in conjunction with the 'pattern' properties in oski_matcommon_t. If the matrix is symmetric or Hermitian, then one of these flags indicates which non-zero values are actually stored. is_upper == is_lower <==> full storage.
These flags apply to each of the individual submatrices, If the matrix is triangular, these flags are ignored. |
1.4.6