#include <oski/matmodexport.h>
Go to the source code of this file.
Defines | |
#define | INC_OSKI_CSR_MODULE_H |
oski/CSR/module.h included. | |
Name mangling. | |
#define | oski_WrapCSR MANGLE_MOD_(oski_WrapCSR) |
#define | oski_CheckCSR MANGLE_MOD_(oski_CheckCSR) |
#define | oski_StreamMatRepr MANGLE_MOD_(oski_StreamMatRepr) |
#define | oski_SortIndices MANGLE_MOD_(oski_SortIndices) |
#define | oski_ExpandCSRToFull MANGLE_MOD_(oski_ExpandCSRToFull) |
#define | oski_ConditionallyExpandCSRToFull MANGLE_MOD_(oski_ConditionallyExpandCSRToFull) |
#define | oski_ChangeIndexBase MANGLE_MOD_(oski_ChangeIndexBase) |
#define | oski_TransposeCSR MANGLE_MOD_(oski_TransposeCSR) |
#define | oski_CountZeroRowsCSR MANGLE_MOD_(oski_CountZeroRowsCSR) |
CSR-based sparse triangular solve kernel driver mangling. | |
#define | CSR_MatTrisolveLower MANGLE_(CSR_MatTrisolveLower) |
#define | CSR_MatTransTrisolveLower MANGLE_(CSR_MatTransTrisolveLower) |
#define | CSR_MatConjTrisolveLower MANGLE_(CSR_MatConjTrisolveLower) |
#define | CSR_MatConjTransTrisolveLower MANGLE_(CSR_MatConjTransTrisolveLower) |
#define | CSR_MatTrisolveUpper MANGLE_(CSR_MatTrisolveUpper) |
#define | CSR_MatTransTrisolveUpper MANGLE_(CSR_MatTransTrisolveUpper) |
#define | CSR_MatConjTrisolveUpper MANGLE_(CSR_MatConjTrisolveUpper) |
#define | CSR_MatConjTransTrisolveUpper MANGLE_(CSR_MatConjTransTrisolveUpper) |
Functions | |
int | oski_CheckCSR (const oski_index_t *ptr, const oski_index_t *ind, oski_index_t m, oski_index_t n, oski_inmatpropset_t *props) |
Verify that a CSR matrix representation satisfies asserted properties. | |
double | oski_StreamMatRepr (const void *mat, const oski_matcommon_t *props) |
Stream through a matrix. | |
oski_matCSR_t * | oski_ExpandCSRToFull (const oski_matCSR_t *S, const oski_matcommon_t *props) |
Convert a half-storage symmetric or Hermitian matrix to full storage. | |
int | oski_ConditionallyExpandCSRToFull (const oski_matCSR_t *S, const oski_matcommon_t *props, oski_matCSR_t **p_mat_full) |
Conditionally convert a half-storage symmetric or Hermitian matrix to full storage. | |
void | oski_ChangeIndexBase (oski_matCSR_t *A, const oski_matcommon_t *props, const oski_index_t new_base) |
Change the index base of a matrix. | |
int | oski_SortIndices (oski_matCSR_t *A, oski_index_t m) |
Sort the column indices of a CSR matrix with m rows using b-based indexing. | |
oski_matCSR_t * | oski_TransposeCSR (const oski_matCSR_t *A, const oski_matcommon_t *props) |
Given a matrix ![]() ![]() | |
oski_index_t | oski_CountZeroRowsCSR (const oski_matCSR_t *A, const oski_matcommon_t *props) |
Returns the number of rows in a given CSR matrix that contain no structural non-zeros. | |
CSR wrapper. | |
oski_matCSR_t * | oski_WrapCSR (oski_matcommon_t *out_props, oski_index_t *Aptr, oski_index_t *Aind, oski_value_t *Aval, oski_index_t num_rows, oski_index_t num_cols, oski_inmatpropset_t *props, oski_copymode_t mode) |
Create a new CSR-specific wrapper around a raw CSR array representation. | |
CSR-based sparse triangular solve kernel drivers. | |
void | CSR_MatTrisolveLower (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatConjTrisolveLower (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatTransTrisolveLower (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatConjTransTrisolveLower (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatTrisolveUpper (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatTransTrisolveUpper (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatConjTrisolveUpper (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
void | CSR_MatConjTransTrisolveUpper (oski_index_t m, oski_index_t indbase, int is_unit, int is_sorted, const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_value_t alpha, oski_value_t *x, oski_index_t num_vecs, oski_index_t rowinc, oski_index_t colinc) |
#define INC_OSKI_CSR_MODULE_H |
oski/CSR/module.h included.
int oski_CheckCSR | ( | const oski_index_t * | ptr, | |
const oski_index_t * | ind, | |||
oski_index_t | m, | |||
oski_index_t | n, | |||
oski_inmatpropset_t * | props | |||
) |
Verify that a CSR matrix representation satisfies asserted properties.
This routine verifies that the following properties, if asserted, are true:
The implementation relies on O(nnz) algorithms to verify these properties.
If any of the properties can be strengthened to improve kernel performance, then the properties are modified to reflect the stronger assertion. There are two specific examples:
[in] | ptr | Row pointers. |
[in] | ind | Column indices. |
[in] | m | Number of rows. |
[in] | n | Number of columns. |
[in,out] | props | Asserted properties. |
References BypassCheck(), oski_inmatpropset_t::has_sorted_indices, oski_inmatpropset_t::has_unique_indices, oski_inmatpropset_t::has_unit_diag_implicit, oski_inmatpropset_t::index_base, oski_CheckHasSortedInds(), oski_CheckHasUniqueInds(), oski_CheckIndexBase(), oski_CheckIndNonDecreasing(), oski_CheckPattern(), oski_CheckUnitDiagImplicit(), oski_PrintDebugMessage(), and oski_inmatpropset_t::pattern.
int oski_SortIndices | ( | oski_matCSR_t * | A, | |
oski_index_t | m | |||
) |
Sort the column indices of a CSR matrix with m rows using b-based indexing.
Sort the column indices of a CSR matrix with m rows using b-based indexing.
[in,out] | A | Matrix whose indices are to be sorted. |
[in] | m | Number of rows in A. |
References ERR_BAD_ARG, ERR_OUT_OF_MEMORY, oski_matCSR_t::has_sorted_indices, oski_Free, oski_Malloc, and oski_matCSR_t::ptr.
double oski_StreamMatRepr | ( | const void * | mat, | |
const oski_matcommon_t * | props | |||
) |
Stream through a matrix.
This routine streams through the matrix data structure, performs some dummy computations, and returns the results. We use this routine to help estimate the cost of a matrix-vector multiply operation on a given matrix without actually having to perform matrix-vector multiply.
References _IM, _RE, oski_matCSR_t::base_index, oski_matCSR_t::ind, oski_matcommon_t::num_rows, oski_matCSR_t::ptr, and oski_matCSR_t::val.
oski_matCSR_t* oski_TransposeCSR | ( | const oski_matCSR_t * | A, | |
const oski_matcommon_t * | props | |||
) |
Given a matrix in CSR format, returns a copy of its explicit transpose
in CSR format.
[in] | A | Matrix ![]() |
[in] | props | Common properties of ![]() |
References oski_matCSR_t::base_index, ConjOffDiagElems(), ERR_OUT_OF_MEMORY, oski_matCSR_t::ind, oski_matcommon_t::is_herm, oski_matCSR_t::is_shared, oski_matcommon_t::is_symm, oski_matcommon_t::num_cols, oski_matcommon_t::num_rows, oski_CopyMem, OSKI_ERR, oski_Free, oski_Malloc, oski_matcommon_t::pattern, oski_matCSR_t::ptr, TransposeFullCSR(), and oski_matCSR_t::val.
oski_matCSR_t* oski_WrapCSR | ( | oski_matcommon_t * | out_props, | |
oski_index_t * | Aptr, | |||
oski_index_t * | Aind, | |||
oski_value_t * | Aval, | |||
oski_index_t | num_rows, | |||
oski_index_t | num_cols, | |||
oski_inmatpropset_t * | props, | |||
oski_copymode_t | mode | |||
) |
Create a new CSR-specific wrapper around a raw CSR array representation.
Create a new CSR-specific wrapper around a raw CSR array representation.
If any of the asserted properties can be strengthened, then the parameter props (below) is changed accordingly. See oski_CheckCSR() for details.
[out] | out_props | Matrix type-independent properties, derived from the input properties props. |
[in] | Aptr | Row pointers. |
[in] | Aind | Column indices. |
[in] | Aval | Non-zero values. |
[in,out] | props | Semantic properties of the matrix represented by |
[in] | num_rows | Number of rows. |
[in] | num_cols | Number of columns. Aptr, Aind, and Aval. |
[in] | mode | Specify the copy mode for the returned representation. |
num_rows, num_cols are non-negative
mode is a legal value.
Basic steps:
References CopyPointers(), oski_matCSR_t::has_sorted_indices, oski_inmatpropset_t::index_base, oski_matCSR_t::is_shared, oski_matcommon_t::num_rows, oski_Malloc, oski_PrintDebugMessage(), SetCommonProps(), and SetMatTypeProps().