#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:
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 ![]() | |
int MatMultAndMatMult | |
Specialized ![]() | |
int MatMultAndMatTransMult | |
Specialized ![]() | |
int MatPowMult | |
Specialized ![]() | |
int MatTransPowMult | |
Specialized ![]() | |
} | 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. |