#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, ![]() | |
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, ![]() | |
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, ![]() ![]() ![]() | |
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. |
#define CSR_MatConjMult_v1 CSR_MatMult_v1 |
Base-adjusted, matrix times single-vector multiply.
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 CSR_MatMult_v1_a1_b1_xs1_ysX, CSR_MatMult_v1_a1_b1_xsX_ysX, CSR_MatMult_v1_aN1_b1_xs1_ysX, CSR_MatMult_v1_aN1_b1_xsX_ysX, CSR_MatMult_v1_aX_b1_xs1_ysX, CSR_MatMult_v1_aX_b1_xsX_ysX, 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 CSR_MatTransMult_v1_a1_b1_xsX_ys1, CSR_MatTransMult_v1_a1_b1_xsX_ysX, CSR_MatTransMult_v1_aN1_b1_xsX_ys1, CSR_MatTransMult_v1_aN1_b1_xsX_ysX, CSR_MatTransMult_v1_aX_b1_xsX_ys1, CSR_MatTransMult_v1_aX_b1_xsX_ysX, 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, .
At present, this implementation does not handle the multiple vector case specially.
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, .
At present, this implementation does not handle the multiple vector case specially.
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] |
Symmetric matrix-vector multiply, , where
and
.
At present, the multiple-vector implementation just repeatedly calls the single-vector implementation.
References oski_matCSR_t::base_index, oski_vecstruct_t::colinc, ERR_NOT_IMPLEMENTED, oski_matCSR_t::has_sorted_indices, oski_matCSR_t::has_unit_diag_implicit, oski_matCSR_t::ind, oski_matcommon_t::num_cols, oski_vecstruct_t::num_cols, oski_matcommon_t::num_rows, OP_CONJ, OP_CONJ_TRANS, OP_NORMAL, OP_TRANS, oski_matCSR_t::ptr, oski_vecstruct_t::rowinc, SymmMatMult_v1(), oski_vecstruct_t::val, and oski_matCSR_t::val.
Referenced by oski_MatReprMult().