BeBOP Optimized Sparse Kernel Interface Library  1.0.1h
Defines | Functions
matmult.c File Reference

Sparse matrix-vector multiply implementation for a compressed sparse row (CSR) matrix. More...

#include <assert.h>
#include <oski/config.h>
#include <oski/common.h>
#include <oski/blas.h>
#include <oski/matmult.h>
#include <oski/CSR/format.h>
#include <oski/CSR/module.h>
#include "MatMult/CSR_MatMult.h"
#include "SymmMatMult/CSR_SymmMatMult.h"
#include "SymmMatMult/CSR_SymmMatHermMult.h"
#include "SymmMatMult/CSR_HermMatMult.h"
#include "SymmMatMult/CSR_HermMatTransMult.h"

Defines

#define CSR_MatConjMult_v1   CSR_MatMult_v1
 Base-adjusted, matrix times single-vector multiply.
#define MatReprMult_Conj   MatReprMult_Normal

Functions

static void CSR_MatMult_v1 (oski_index_t m, oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, const oski_value_t *x, oski_index_t incx, oski_value_t *y, oski_index_t incy)
 Base-adjusted, matrix times single-vector multiply.
static int MatReprMult_Normal (const oski_matCSR_t *A, const oski_matcommon_t *props, oski_value_t alpha, const oski_vecview_t x_view, oski_vecview_t y_view)
 CSR-specific matrix-vector multiply operation, $y \leftarrow y + \alpha \cdot A \cdot x$.
static void CSR_MatTransMult_v1 (oski_index_t m, oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, const oski_value_t *x, oski_index_t incx, oski_value_t *y, oski_index_t incy)
 Base-adjusted, matrix-transpose times single-vector multiply.
static int MatReprMult_Trans (const oski_matCSR_t *A, const oski_matcommon_t *props, oski_value_t alpha, const oski_vecview_t x_view, oski_vecview_t y_view)
 CSR-specific matrix-vector multiply operation, $y \leftarrow y + \alpha \cdot A^T \cdot x$.
static void SymmMatMult_v1 (oski_index_t m, oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t base, oski_value_t alpha, const oski_value_t *x, oski_index_t incx, oski_value_t *y, oski_index_t incy)
 Single-vector implementation of symmetric CSR SpMV.
static int SymmMatMult (const oski_matCSR_t *A, const oski_matcommon_t *props, oski_matop_t opA, oski_value_t alpha, const oski_vecview_t x_view, oski_vecview_t y_view)
 Symmetric matrix-vector multiply, $y \leftarrow y + \alpha\cdot op(A) \cdot x$, where $A = A^T$ and $op(A) \in \{A, A^H\}$.
int oski_MatReprMult (const void *pA, const oski_matcommon_t *props, oski_matop_t opA, oski_value_t alpha, const oski_vecview_t x_view, oski_value_t beta, oski_vecview_t y_view)
 Matrix type-specific implementation of sparse matrix-vector multiply.

Detailed Description

Sparse matrix-vector multiply implementation for a compressed sparse row (CSR) matrix.


Define Documentation

Base-adjusted, matrix times single-vector multiply.


Function Documentation

static void CSR_MatMult_v1 ( oski_index_t  m,
oski_index_t  n,
const oski_index_t *  ptr,
const oski_index_t *  ind,
const oski_value_t *  val,
oski_value_t  alpha,
const oski_value_t *  x,
oski_index_t  incx,
oski_value_t *  y,
oski_index_t  incy 
) [static]

Base-adjusted, matrix times single-vector multiply.

References IS_VAL_NEG_ONE, and IS_VAL_ONE.

Referenced by MatReprMult_Normal().

static void CSR_MatTransMult_v1 ( oski_index_t  m,
oski_index_t  n,
const oski_index_t *  ptr,
const oski_index_t *  ind,
const oski_value_t *  val,
oski_value_t  alpha,
const oski_value_t *  x,
oski_index_t  incx,
oski_value_t *  y,
oski_index_t  incy 
) [static]

Base-adjusted, matrix-transpose times single-vector multiply.

References IS_VAL_NEG_ONE, and IS_VAL_ONE.

Referenced by MatReprMult_Trans().

static int MatReprMult_Normal ( const oski_matCSR_t A,
const oski_matcommon_t props,
oski_value_t  alpha,
const oski_vecview_t  x_view,
oski_vecview_t  y_view 
) [static]

CSR-specific matrix-vector multiply operation, $y \leftarrow y + \alpha \cdot A \cdot x$.

At present, this implementation does not handle the multiple vector case specially.

Precondition:
This implementation assumes $\alpha \neq 0$.
This implementation assumes full storage.

At present, the multiple-vector implementation just repeatedly calls the single-vector implementation.

References oski_matCSR_t::base_index, oski_vecstruct_t::colinc, CSR_MatMult_v1(), ERR_NOT_IMPLEMENTED, oski_matCSR_t::has_unit_diag_implicit, oski_matCSR_t::ind, oski_matcommon_t::is_herm, oski_matCSR_t::is_lower, oski_matcommon_t::is_symm, oski_matCSR_t::is_upper, oski_matcommon_t::num_cols, oski_vecstruct_t::num_cols, oski_matcommon_t::num_rows, oski_matcommon_t::pattern, oski_matCSR_t::ptr, oski_vecstruct_t::rowinc, oski_matCSR_t::stored, oski_vecstruct_t::val, and oski_matCSR_t::val.

Referenced by oski_MatReprMult().

static int MatReprMult_Trans ( const oski_matCSR_t A,
const oski_matcommon_t props,
oski_value_t  alpha,
const oski_vecview_t  x_view,
oski_vecview_t  y_view 
) [static]

CSR-specific matrix-vector multiply operation, $y \leftarrow y + \alpha \cdot A^T \cdot x$.

At present, this implementation does not handle the multiple vector case specially.

Precondition:
This implementation assumes $\alpha \neq 0$.
This implementation assumes full storage.

At present, the multiple-vector implementation just repeatedly calls the single-vector implementation.

References oski_matCSR_t::base_index, oski_vecstruct_t::colinc, CSR_MatTransMult_v1(), ERR_NOT_IMPLEMENTED, oski_matCSR_t::has_unit_diag_implicit, oski_matCSR_t::ind, oski_matcommon_t::is_herm, oski_matCSR_t::is_lower, oski_matcommon_t::is_symm, oski_matCSR_t::is_upper, oski_matcommon_t::num_cols, oski_vecstruct_t::num_cols, oski_matcommon_t::num_rows, oski_matcommon_t::pattern, oski_matCSR_t::ptr, oski_vecstruct_t::rowinc, oski_matCSR_t::stored, oski_vecstruct_t::val, and oski_matCSR_t::val.

Referenced by oski_MatReprMult().

static int SymmMatMult ( const oski_matCSR_t A,
const oski_matcommon_t props,
oski_matop_t  opA,
oski_value_t  alpha,
const oski_vecview_t  x_view,
oski_vecview_t  y_view 
) [static]