gko::matrix::Csr

  • storage layout

  • with image

Creating

  • reading in matrix data

  • from existing arrays

  • wrapping user data, similar to vector, refer to full api

  • do not create uninitialized mtx and fill manually

    • inconsistent state because of srow

    • could set strategy again to trigger rebuiling of srow

Supported Operations

The apply function is the main entry point for operations with a CSR matrix. It executes different operations, based on the (runtime) type of the arguments.

To describe the different operations the following objects are used:

matrix::Csr *A, *B, *C;      // matrices
matrix::Dense *b, *x;        // vectors tall-and-skinny matrices
matrix::Dense *alpha, *beta; // scalars of dimension 1x1
matrix::Identity *I;         // identity matrix

Computing product with a (multi-)vector, also called SpMV or SpMM:

A->apply(b, x);               // x = A * b
A->apply(alpha, b, beta, x);  // x = alpha * A * b + beta * x

Computing a product between two sparse matrices, also called SpGEMM:

A->apply(B, C);               // C = A * B
A->apply(alpha, B, beta, C);  // C = alpha * A * B + beta * C

Computing an addition of two sparse matrices, also called SpGEAM:

A->apply(alpha, I, beta, B);  // B = alpha * A + beta * B

Note

Both the SpGEMM and SpGEAM operation require the input matrices to be sorted by column index, otherwise the algorithms will produce incorrect results.

Additionally, a CSR matrix may be scaled row-wise or column-wise, by applying a Diagonal matrix to a CSR matrix.

matrix::Diagonal *D;

D->apply(A, B);   // row scaling B = D * A 
D->rapply(A, B);  // column scaling B = A * D

The matrix may also be scaled by a single scalar through the scale and inv_scale functions:

A->scale(alpha);      // A = alpha * A
A->inv_scale(aplha);  // A = 1 / alpha * A

Strategies