BeBOP Optimized Sparse Kernel Interface Library
1.0.1h
|
CSR-to-CB format conversion routines. More...
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <oski/config.h>
#include <oski/common.h>
#include <oski/matcreate.h>
#include <oski/modloader.h>
#include <oski/matrix.h>
#include <oski/tune.h>
#include <oski/CSR/format.h>
#include <oski/CB/format.h>
#include <oski/CB/module.h>
#include <oski/xforms_internal.h>
Defines | |
#define | MIN(a, b) ((a) < (b) ? (a) : (b)) |
Return the minimum of two values. | |
Functions | |
static int | ExpandSymm (const oski_matCSR_t *mat, const oski_matcommon_t *props, oski_matCSR_t **p_mat_full) |
static oski_index_t | CountZeroRows (oski_index_t m, const oski_index_t *ptr) |
Returns the number of rows of the CSR matrix A that are structurally zero. | |
static oski_index_t | FindFirstNonzeroRow (oski_index_t m, const oski_index_t *ptr, int has_unit_diag, oski_index_t i_min) |
Returns the index of the first row ![]() ![]() | |
static oski_index_t | FindMinColIndex (oski_index_t m, oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, oski_index_t has_unit_diag, oski_index_t i_start, oski_index_t i_max, oski_index_t j_min) |
Returns the smallest column ![]() ![]() ![]() ![]() | |
static oski_index_t | FindFirstNzRowInSubmat (oski_index_t m, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i0, oski_index_t j0, oski_index_t i_max, oski_index_t j_max) |
static oski_index_t | FindNextZeroRowInSubmat (oski_index_t m, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i0, oski_index_t j0, oski_index_t i_max, oski_index_t j_max) |
static int | FindSubblock (oski_index_t m, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_min, oski_index_t j_min, oski_index_t i_max, oski_index_t j_max, oski_index_t *p_i_start, oski_index_t *p_i_max) |
static void | SetupBlockRowPtrs (const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t R, oski_index_t j_max, oski_index_t *bptr) |
static void | CopyValues (const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t R, oski_index_t j_max, const oski_index_t *bptr, oski_index_t *bind, oski_value_t *bval) |
static int | ConvertSubblock (const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t i_max, oski_index_t j_max, simplelist_t *cache_blocks) |
static int | MakeSparseSubblocks (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 b, int has_unit_diag, oski_index_t i0, oski_index_t j0, oski_index_t i_max, oski_index_t j_max, simplelist_t *cache_blocks) |
Recursive procedure to convert a specified submatrix of a CSR matrix into a sequence of CSR subblocks consisting of consecutive non-zero rows. | |
static int | MakeBlock (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 b, int has_unit_diag, oski_index_t i0, oski_index_t j0, oski_index_t i_max, oski_index_t j_max, simplelist_t *cache_blocks) |
Convert a specified submatrix of a CSR matrix into a single cache block. | |
static int | ConvertToCSR (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 b, int has_unit_diag, oski_index_t min_row, oski_index_t min_col, oski_index_t R, oski_index_t C, simplelist_t *cache_blocks) |
Recursive procedure to compute a cache block partitioning of an ![]() ![]() | |
static oski_index_t | FindMinColsBegin (oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t i_max, oski_index_t j_min, oski_index_t *k_begin) |
static void | FindMaxCols (const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t i_max, oski_index_t j_start, oski_index_t j_max, const oski_index_t *k_begin, oski_index_t *k_end) |
static oski_index_t | FindMinColsContinue (oski_index_t n, const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t i_max, oski_index_t j_min, oski_index_t *k_begin) |
static void | SetupBlockRowPtrs_Sorted (const oski_index_t *ptr, const oski_index_t *ind, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t R, oski_index_t j_max, const oski_index_t *k_begin, const oski_index_t *k_end, oski_index_t *bptr) |
static void | CopyValues_Sorted (const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t R, oski_index_t j_max, const oski_index_t *k_begin, const oski_index_t *k_end, const oski_index_t *bptr, oski_index_t *bind, oski_value_t *bval) |
static int | ConvertSubblock_Sorted (const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t b, int has_unit_diag, oski_index_t i_start, oski_index_t j_min, oski_index_t i_max, oski_index_t j_max, const oski_index_t *k_begin, const oski_index_t *k_end, simplelist_t *cache_blocks) |
static int | MakeBlock_Sorted (const oski_index_t *ptr, const oski_index_t *ind, const oski_value_t *val, oski_index_t b, int has_unit_diag, oski_index_t i0, oski_index_t j0, oski_index_t i_max, oski_index_t j_max, const oski_index_t *k_begin, const oski_index_t *k_end, simplelist_t *cache_blocks) |
Convert a specified submatrix of a CSR matrix into a single cache block, assuming sorted column indices. | |
static int | ConvertToCSR_Sorted (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 b, int has_unit_diag, oski_index_t min_row, oski_index_t min_col, oski_index_t R, oski_index_t C, simplelist_t *cache_blocks) |
Faster but less memory-efficient implementation of ConvertToCSR() which assumes sorted column indices. | |
void * | oski_CreateMatReprFromCSR (const oski_matCSR_t *mat, const oski_matcommon_t *props,...) |
Example usage: | |
oski_matCSR_t * | oski_ConvertMatReprToCSR (const void *mat, const oski_matcommon_t *props) |
Method: Convert to CSR format. | |
int | oski_CreateLuaMatReprFromCSR (lua_State *L) |
The CB implementation expects the following arguments on the stack: |
CSR-to-CB format conversion routines.
#define MIN | ( | a, | |
b | |||
) | ((a) < (b) ? (a) : (b)) |
Return the minimum of two values.
Referenced by ConvertToCSR(), and ConvertToCSR_Sorted().
static int ConvertToCSR | ( | 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 | b, | ||
int | has_unit_diag, | ||
oski_index_t | min_row, | ||
oski_index_t | min_col, | ||
oski_index_t | R, | ||
oski_index_t | C, | ||
simplelist_t * | cache_blocks | ||
) | [static] |
Recursive procedure to compute a cache block partitioning of an matrix
, stored in CSR format.
[in] | m | Total number of rows in the matrix. |
[in] | n | Total number of columns in the matrix. |
[in] | ptr | Row pointers for the CSR input matrix. |
[in] | ind | Column indices for the CSR input matrix. |
[in] | val | Non-zero values for the CSR input matrix. |
[in] | b | Index base of the input matrix (0 or 1). |
[in] | has_unit_diag | Zero only if the input matrix stores the diagonal elements explicitly. |
[in] | min_row | Minimum row index ![]() |
[in] | min_col | Minimum column index ![]() |
[in] | R | Maximum row block size. |
[in] | C | Maximum column block size. |
[in,out] | cache_blocks | Current list of cache blocks. |
References FindFirstNonzeroRow(), FindMinColIndex(), MakeBlock(), MakeSparseSubblocks(), and MIN.
Referenced by oski_CreateMatReprFromCSR().
static int ConvertToCSR_Sorted | ( | 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 | b, | ||
int | has_unit_diag, | ||
oski_index_t | min_row, | ||
oski_index_t | min_col, | ||
oski_index_t | R, | ||
oski_index_t | C, | ||
simplelist_t * | cache_blocks | ||
) | [static] |
Faster but less memory-efficient implementation of ConvertToCSR() which assumes sorted column indices.
This algorithm reverts to ConvertToCSR() on error.
References ERR_OUT_OF_MEMORY, FindFirstNonzeroRow(), MakeBlock_Sorted(), MIN, oski_CopyMem, oski_FreeAll(), oski_MultiMalloc(), and oski_ZeroMem().
Referenced by oski_CreateMatReprFromCSR().
static oski_index_t CountZeroRows | ( | oski_index_t | m, |
const oski_index_t * | ptr | ||
) | [static] |
Returns the number of rows of the CSR matrix A that are structurally zero.
static oski_index_t FindFirstNonzeroRow | ( | oski_index_t | m, |
const oski_index_t * | ptr, | ||
int | has_unit_diag, | ||
oski_index_t | i_min | ||
) | [static] |
Returns the index of the first row containing at least one structural non-zero, and returns
if no such row can be found.
[in] | m | Total number of rows ![]() |
[in] | ptr | Row pointers. |
[in] | has_unit_diag | Non-zero <==> the diagonal is all ones and not stored explicitly. |
[in] | i_min | Minimum desired row index, ![]() |
Referenced by ConvertToCSR(), and ConvertToCSR_Sorted().
int oski_CreateLuaMatReprFromCSR | ( | lua_State * | L | ) |
The CB implementation expects the following arguments on the stack:
Matrix-type specific method to convert from a CSR matrix, with arguments passed on the Lua stack.