LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
sparse_arithmetic.h 文件参考
#include "lmmc/sparse_types.h"
#include "lmmc/dense_types.h"
#include "lmmc/status.h"
sparse_arithmetic.h 的引用(Include)关系图:
此图展示该文件被哪些文件直接或间接地引用了:

浏览该文件的源代码.

函数

lmmc_status_t lmmc_sparse_mat_vec_mul (const lmmc_sparse_mat_t *sparse, const lmmc_vec_t *x, lmmc_vec_t *y)
 稀疏矩阵-稠密向量乘法:y = A * x。
lmmc_status_t lmmc_sparse_mat_mat_mul_dense (const lmmc_sparse_mat_t *sparse, const lmmc_mat_t *b, lmmc_mat_t *c)
 稀疏矩阵 x 稠密矩阵:C = A * B(结果为稠密矩阵)。
lmmc_status_t lmmc_sparse_mat_mat_mul_sparse (const lmmc_sparse_mat_t *a, const lmmc_sparse_mat_t *b, lmmc_sparse_mat_t *c)
 稀疏矩阵-稀疏矩阵乘法(SpGEMM):C = A * B。
lmmc_status_t lmmc_sparse_add (lmmc_real_t alpha, const lmmc_sparse_mat_t *a, lmmc_real_t beta, const lmmc_sparse_mat_t *b, lmmc_sparse_mat_t *out_c)
 计算 C = alpha * A + beta * B .要求 a 与 b 同维同格式。
lmmc_status_t lmmc_sparse_scale (lmmc_sparse_mat_t *a, lmmc_real_t alpha)
 就地标量缩放: \(A \leftarrow \alpha A\) 。
lmmc_status_t lmmc_sparse_norm_fro (const lmmc_sparse_mat_t *a, lmmc_real_t *out_norm)
 用缩放平方和计算稀疏矩阵的 Frobenius 范数。
lmmc_status_t lmmc_sparse_diag (const lmmc_sparse_mat_t *a, lmmc_vec_t *out_diag)
 提取主对角线为稠密向量.要求 a->rows == a->cols 。
lmmc_status_t lmmc_sparse_sym_spmv (const lmmc_sparse_sym_csr_t *A, const lmmc_vec_t *x, lmmc_vec_t *y)
 对称半存储 SpMV:y = A * x 。

函数说明

◆ lmmc_sparse_mat_vec_mul()

lmmc_status_t lmmc_sparse_mat_vec_mul ( const lmmc_sparse_mat_t * sparse,
const lmmc_vec_t * x,
lmmc_vec_t * y )

稀疏矩阵-稠密向量乘法:y = A * x。

支持 CSR 和 CSC 格式.CSR 时使用 4-展开内循环优化。 x->size 须等于 sparse->cols,y->size 须等于 sparse->rows。

参数
[in]sparse输入稀疏矩阵(不被修改)。
[in]x输入向量(不被修改)。
[out]y输出向量,内容被完全覆写。
返回
注解
不分配内存。

在文件 sparse_products.c 第 13 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_vec_t::data, lmmc_sparse_mat_t::format, LMMC_REAL_ADD, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_MUL, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_SPARSE_CSR, lmmc_sparse_mat_vec_mul(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_vec_fill(), lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows, lmmc_vec_t::size , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_gmres_arnoldi(), lmmc_itersolve_matvec(), lmmc_itersolve_residual() , 以及 lmmc_sparse_mat_vec_mul().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_mat_mat_mul_dense()

lmmc_status_t lmmc_sparse_mat_mat_mul_dense ( const lmmc_sparse_mat_t * sparse,
const lmmc_mat_t * b,
lmmc_mat_t * c )

稀疏矩阵 x 稠密矩阵:C = A * B(结果为稠密矩阵)。

sparse 为 mxk,b 为 kxn,c 必须已创建为 mxn。 支持 CSR 和 CSC 格式,使用 4-展开优化。

参数
[in]sparse输入稀疏矩阵(不被修改)。
[in]b输入稠密矩阵(不被修改)。
[out]c输出稠密矩阵,内容被完全覆写。
返回
注解
不分配内存。

在文件 sparse_products.c 第 220 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_mat_t::cols, lmmc_sparse_mat_t::cols, lmmc_mat_t::data, lmmc_sparse_mat_t::format, lmmc_mat_fill(), LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET, LMMC_REAL_SET_D, LMMC_SPARSE_CSR, lmmc_sparse_mat_mat_mul_dense(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::row_ptr, lmmc_mat_t::rows, lmmc_sparse_mat_t::rows, lmmc_mat_t::stride , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_mat_mat_mul_dense().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_mat_mat_mul_sparse()

lmmc_status_t lmmc_sparse_mat_mat_mul_sparse ( const lmmc_sparse_mat_t * a,
const lmmc_sparse_mat_t * b,
lmmc_sparse_mat_t * c )

稀疏矩阵-稀疏矩阵乘法(SpGEMM):C = A * B。

输出为 CSR 格式.内部使用行累加器(marker + accumulator)两遍算法: 第一遍计算 nnz 结构,第二遍填充数值。 若输入为 CSC 格式会先内部转换为 CSR。

参数
[in]a左稀疏矩阵(不被修改)。
[in]b右稀疏矩阵(不被修改),a->cols 须等于 b->rows。
[out]c输出稀疏矩阵(CSR),调用方需配对调用 lmmc_sparse_destroy 释放。
返回
注解
分配堆内存;CSC 输入的临时 CSR 副本在返回前释放。

在文件 sparse_products.c 第 310 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_memory_alloc_array(), lmmc_memory_alloc_array_plus(), LMMC_SPARSE_CSC, LMMC_SPARSE_CSR, lmmc_sparse_destroy(), lmmc_sparse_mat_mat_mul_sparse(), lmmc_sparse_to_csr(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::owns_data, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_mat_mat_mul_sparse().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_add()

lmmc_status_t lmmc_sparse_add ( lmmc_real_t alpha,
const lmmc_sparse_mat_t * a,
lmmc_real_t beta,
const lmmc_sparse_mat_t * b,
lmmc_sparse_mat_t * out_c )

计算 C = alpha * A + beta * B .要求 a 与 b 同维同格式。

在文件 sparse_arithmetic.c 第 132 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, lmmc_memory_alloc_array_plus(), lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_sparse_add(), LMMC_SPARSE_CSC, LMMC_SPARSE_CSR, lmmc_sparse_destroy(), lmmc_sparse_to_csr(), LMMC_STATUS_ALLOCATION_FAILED, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz, lmmc_sparse_mat_t::owns_data, lmmc_sparse_mat_t::row_ptr, lmmc_sparse_mat_t::rows , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_add().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_scale()

lmmc_status_t lmmc_sparse_scale ( lmmc_sparse_mat_t * a,
lmmc_real_t alpha )

就地标量缩放: \(A \leftarrow \alpha A\) 。

在文件 sparse_arithmetic.c 第 226 行定义.

引用了 LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_MUL, LMMC_REAL_SET, lmmc_sparse_scale(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_scale().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_norm_fro()

lmmc_status_t lmmc_sparse_norm_fro ( const lmmc_sparse_mat_t * a,
lmmc_real_t * out_norm )

用缩放平方和计算稀疏矩阵的 Frobenius 范数。

在文件 sparse_arithmetic.c 第 251 行定义.

引用了 lmmc_sparse_norm_fro(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_mat_t::nnz , 以及 lmmc_sparse_mat_t::values.

被这些函数引用 lmmc_sparse_norm_fro().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_diag()

lmmc_status_t lmmc_sparse_diag ( const lmmc_sparse_mat_t * a,
lmmc_vec_t * out_diag )

提取主对角线为稠密向量.要求 a->rows == a->cols 。

在文件 sparse_arithmetic.c 第 274 行定义.

引用了 lmmc_sparse_mat_t::cols, lmmc_vec_t::data, lmmc_sparse_mat_t::format, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET_D, LMMC_SPARSE_CSC, lmmc_sparse_destroy(), lmmc_sparse_diag(), lmmc_sparse_to_csr(), LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_vec_create(), lmmc_vec_destroy(), lmmc_vec_fill(), lmmc_vec_t::owns_data, lmmc_sparse_mat_t::rows , 以及 lmmc_vec_t::size.

被这些函数引用 lmmc_sparse_diag().

函数调用图:
这是这个函数的调用关系图:

◆ lmmc_sparse_sym_spmv()

lmmc_status_t lmmc_sparse_sym_spmv ( const lmmc_sparse_sym_csr_t * A,
const lmmc_vec_t * x,
lmmc_vec_t * y )

对称半存储 SpMV:y = A * x 。

利用对称性,仅存储半三角但计算完整矩阵-向量乘积。

参数
[in]A对称半存储 CSR 矩阵。
[in]x输入向量,长度为 A->n 。
[out]y输出向量,长度为 A->n 。

在文件 sparse_symmetric.c 第 172 行定义.

引用了 lmmc_sparse_sym_csr_t::col_idx, lmmc_vec_t::data, LMMC_REAL_CLEAR, LMMC_REAL_INIT, LMMC_REAL_SET_D, lmmc_sparse_sym_spmv(), LMMC_STATUS_DIMENSION_MISMATCH, LMMC_STATUS_INVALID_ARGUMENT, LMMC_STATUS_OK, lmmc_sparse_sym_csr_t::n, lmmc_sparse_sym_csr_t::nnz, lmmc_sparse_sym_csr_t::row_ptr, lmmc_vec_t::size , 以及 lmmc_sparse_sym_csr_t::values.

被这些函数引用 lmmc_sparse_sym_spmv().

函数调用图:
这是这个函数的调用关系图: