LMMC
Lamina Mathematic core
载入中...
搜索中...
未找到
sparse_storage.c 文件参考

稀疏矩阵存储生命周期:创建、外部数据包装与销毁。 更多...

#include <string.h>
#include "memory_bridge.h"
#include "internal.h"
#include "sparse_internal.h"
#include "lmmc/config.h"
#include "lmmc/sparse.h"
sparse_storage.c 的引用(Include)关系图:

浏览该文件的源代码.

函数

lmmc_status_t lmmc_sparse_create_csr (size_t rows, size_t cols, size_t nnz, lmmc_sparse_mat_t *out_sparse)
 为指定 nnz 的 CSR 矩阵分配数组。
lmmc_status_t lmmc_sparse_create_csc (size_t rows, size_t cols, size_t nnz, lmmc_sparse_mat_t *out_sparse)
 为指定 nnz 的 CSC 矩阵分配数组。
lmmc_status_t lmmc_sparse_wrap_csr (size_t rows, size_t cols, size_t nnz, size_t *row_ptr, size_t *col_idx, lmmc_real_t *values, lmmc_sparse_mat_t *out_sparse)
 将调用方缓冲区包装为 CSR 视图。
lmmc_status_t lmmc_sparse_wrap_csc (size_t rows, size_t cols, size_t nnz, size_t *col_ptr, size_t *row_idx, lmmc_real_t *values, lmmc_sparse_mat_t *out_sparse)
 将调用方缓冲区包装为 CSC 视图。
void lmmc_sparse_destroy (lmmc_sparse_mat_t *sparse)
 销毁稀疏矩阵,释放其拥有的缓冲区并清零全部字段。

详细描述

稀疏矩阵存储生命周期:创建、外部数据包装与销毁。

在文件 sparse_storage.c 中定义.

函数说明

◆ lmmc_sparse_create_csr()

lmmc_status_t lmmc_sparse_create_csr ( size_t rows,
size_t cols,
size_t nnz,
lmmc_sparse_mat_t * out_sparse )

为指定 nnz 的 CSR 矩阵分配数组。

owns_data=1,row_ptr 清零,col_idx/values 未初始化。 调用方须填充三个数组,满足 sparse_types.h 中索引严格有序、 坐标唯一的压缩结构契约后使用。

参数
[in]rows行数,须 > 0。
[in]cols列数,须 > 0。
[in]nnz非零元个数,可为 0。
[out]out_sparse输出矩阵,调用方须用 lmmc_sparse_destroy 释放。
返回

在文件 sparse_storage.c 第 14 行定义.

引用了 lmmc_sparse_create_csr() , 以及 LMMC_SPARSE_CSR.

被这些函数引用 lmmc_sparse_coo_to_csr(), lmmc_sparse_create_csr(), lmmc_sparse_from_dense() , 以及 lmmc_sparse_to_csr().

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

◆ lmmc_sparse_create_csc()

lmmc_status_t lmmc_sparse_create_csc ( size_t rows,
size_t cols,
size_t nnz,
lmmc_sparse_mat_t * out_sparse )

为指定 nnz 的 CSC 矩阵分配数组。

初始化、所有权及使用前提同 ::lmmc_sparse_create_csr,format 为 CSC。 row_ptr 表示 col_ptr,col_idx 表示 row_idx。

参数
[in]rows行数,须 > 0。
[in]cols列数,须 > 0。
[in]nnz非零元个数,可为 0。
[out]out_sparse输出矩阵。
返回
同 ::lmmc_sparse_create_csr。

在文件 sparse_storage.c 第 18 行定义.

引用了 lmmc_sparse_create_csc() , 以及 LMMC_SPARSE_CSC.

被这些函数引用 lmmc_sparse_coo_to_csc(), lmmc_sparse_create_csc() , 以及 lmmc_sparse_to_csc().

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

◆ lmmc_sparse_wrap_csr()

lmmc_status_t lmmc_sparse_wrap_csr ( size_t rows,
size_t cols,
size_t nnz,
size_t * row_ptr,
size_t * col_idx,
lmmc_real_t * values,
lmmc_sparse_mat_t * out_sparse )

将调用方缓冲区包装为 CSR 视图。

校验行指针边界、单调性及每行索引范围和严格递增性,拒绝重复或乱序。 输入及其顺序保持不变,失败时 out_sparse 保持不变。 所有权保留给调用方,::lmmc_sparse_destroy 仅销毁视图。 乱序或重复输入应使用 builder/COO。

参数
[in]rows行数。
[in]cols列数。
[in]nnz非零元个数。
[in]row_ptr行指针数组,长度 rows+1,row_ptr[0]==0,row_ptr[rows]==nnz。
[in]col_idx列索引数组,长度 nnz,每行严格递增且各值 < cols。
[in]values数值数组,长度 nnz。
[out]out_sparse输出矩阵视图。
返回
注解
无内存分配,写入视图会直接修改外部缓冲区。

在文件 sparse_storage.c 第 22 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, LMMC_SPARSE_CSR, lmmc_sparse_wrap_csr(), 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_wrap_csr().

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

◆ lmmc_sparse_wrap_csc()

lmmc_status_t lmmc_sparse_wrap_csc ( size_t rows,
size_t cols,
size_t nnz,
size_t * col_ptr,
size_t * row_idx,
lmmc_real_t * values,
lmmc_sparse_mat_t * out_sparse )

将调用方缓冲区包装为 CSC 视图。

校验、所有权及写入语义同 ::lmmc_sparse_wrap_csr,format 为 CSC。 col_ptr 对应 row_ptr 字段,row_idx 对应 col_idx 字段。

参数
[in]rows行数。
[in]cols列数。
[in]nnz非零元个数。
[in]col_ptr列指针数组,长度 cols+1。
[in]row_idx行索引数组,长度 nnz,每列严格递增且各值 < rows。
[in]values数值数组,长度 nnz。
[out]out_sparse输出矩阵视图。
返回
同 ::lmmc_sparse_wrap_csr。
注解
直接使用外部缓冲区,无内存分配。

在文件 sparse_storage.c 第 56 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_sparse_mat_t::format, LMMC_SPARSE_CSC, lmmc_sparse_wrap_csc(), 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_wrap_csc().

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

◆ lmmc_sparse_destroy()

void lmmc_sparse_destroy ( lmmc_sparse_mat_t * sparse)

销毁稀疏矩阵,释放其拥有的缓冲区并清零全部字段。

owns_data 非零时释放 row_ptr、col_idx、values;外部缓冲区保留。 销毁后矩阵须重新初始化才能用于运算。

参数
[in,out]sparse待销毁矩阵,接受 NULL。

在文件 sparse_storage.c 第 90 行定义.

引用了 lmmc_sparse_mat_t::col_idx, lmmc_sparse_mat_t::cols, lmmc_memory_free(), LMMC_REAL_CLEAR, lmmc_sparse_destroy(), 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_chol_numeric(), lmmc_sparse_chol_symbolic(), lmmc_sparse_destroy(), lmmc_sparse_diag(), lmmc_sparse_lu_numeric(), lmmc_sparse_lu_symbolic(), lmmc_sparse_mat_mat_mul_sparse(), lmmc_sparse_to_csc(), lmmc_sparse_to_csr() , 以及 lmmc_sparse_transpose().

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