通用 API 函数#
nvpl_sparse_spmv()#
nvpl_sparse_status_t
nvpl_sparse_spmv_buffer_size(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
const void* beta,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_dn_vec_descr_t vec_Z,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spmv_alg_t alg,
nvpl_sparse_spmv_descr_t spmv_descr,
size_t* buffer_size)
nvpl_sparse_status_t
nvpl_sparse_spmv_analysis(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
const void* beta,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_dn_vec_descr_t vec_Z,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spmv_alg_t alg,
nvpl_sparse_spmv_descr_t spmv_descr,
void* external_buffer)
nvpl_sparse_status_t
nvpl_sparse_spmv(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
const void* beta,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_dn_vec_descr_t vec_Z,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spmv_alg_t alg,
nvpl_sparse_spmv_descr_t spmv_descr)
此函数执行稀疏矩阵 mat_A 和稠密向量 vec_X 的乘法运算
\(\mathbf{Z} = \alpha op\left( \mathbf{A} \right) \cdot \mathbf{X} + \beta\mathbf{Y}\) |
其中
op(A)是大小为 \(m \times k\) 的稀疏矩阵X是大小为 \(k\) 的稠密向量Y是大小为 \(m\) 的稠密向量Z是大小为 \(m\) 的稠密向量\(\alpha\) 和 \(\beta\) 是标量
此外,对于矩阵 A
\(\text{op}(A) == \begin{cases} A & \text{if op(A) == NVPL_SPARSE_OPERATION_NON_TRANSPOSE} \\ A^{T} & \text{if op(A) == NVPL_SPARSE_OPERATION_TRANSPOSE} \\ A^{H} & \text{if op(A) ==NVPL_SPARSE_OPERATION_CONJUGATE_TRANSPOSE} \\ \end{cases}\)
函数 nvpl_sparse_spmv_buffer_size() 返回 nvpl_sparse_spmv_analysis() 所需的工作空间大小
参数。 |
输入/输出 |
含义 |
|---|---|---|
|
输入 |
NVPL Sparse 库上下文的句柄 |
|
输入 |
操作 |
|
输入 |
用于乘法的 \(\alpha\) 标量,类型为 |
|
输入 |
稀疏矩阵 |
|
输入 |
稠密向量 |
|
输入 |
用于乘法的 \(\beta\) 标量,类型为 |
|
输入 |
稠密向量 |
|
输出 |
稠密向量 |
|
输入 |
执行计算的数据类型 |
|
输入 |
计算的算法 |
|
输出 |
|
|
输入/输出 |
指向工作区缓冲区的指针,该缓冲区至少为 |
|
输入/输出 |
用于存储跨三个步骤使用的内部数据的不透明描述符 |
下面列出了当前支持的稀疏矩阵格式
NVPL_SPARSE_FORMAT_COONVPL_SPARSE_FORMAT_CSRNVPL_SPARSE_FORMAT_CSCNVPL_SPARSE_FORMAT_SLICED_ELL
nvpl_sparse_spmv 支持以下索引类型来表示稀疏矩阵 mat_A
32 位索引 (
NVPL_SPARSE_INDEX_32I)64 位索引 (
NVPL_SPARSE_INDEX_64I)
nvpl_sparse_spmv() 支持以下数据类型
单精度计算
|
|---|
|
|
|
|
nvpl_sparse_spmv() 支持以下算法
算法 |
注释 |
|---|---|
|
任何稀疏矩阵格式的默认算法。 |
|
COO 稀疏矩阵格式的默认算法。在使用相同输入参数的不同运行中,可能会产生略有不同的结果。 |
|
CSR/CSC 稀疏矩阵格式的默认算法。在使用相同输入参数的不同运行中,可能会产生略有不同的结果。 |
|
Sliced Ellpack 稀疏矩阵格式的默认算法。为每次运行提供确定性(按位)结果。 |
性能说明
NVPL_SPARSE_SPMV_CSR_ALG1比NVPL_SPARSE_SPMV_COO_ALG1提供更高的性能。
nvpl_sparse_spmv() 具有以下属性
该例程需要额外的存储空间用于 CSR/CSC 格式。
该例程允许
matA的索引是未排序的。
有关返回状态的描述,请参阅 nvpl_sparse_status_t。
nvpl_sparse_spsv()#
nvpl_sparse_status_t
nvpl_sparse_spsv_create_descr(nvpl_sparse_spsv_descr_t* descr)
nvpl_sparse_status_t
nvpl_sparse_spsv_destroy_descr(nvpl_sparse_spsv_descr_t descr)
nvpl_sparse_status_t
nvpl_sparse_spsv_buffer_size(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spsv_alg_t alg,
nvpl_sparse_spsv_descr_t spsv_descr,
size_t* buffer_size)
nvpl_sparse_status_t
nvpl_sparse_spsv_analysis(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spsv_alg_t alg,
nvpl_sparse_spsv_descr_t spsv_descr,
void* external_buffer)
nvpl_sparse_status_t
nvpl_sparse_spsv_solve(nvpl_sparse_handle_t handle,
nvpl_sparse_operation_t op_A,
const void* alpha,
nvpl_sparse_const_sp_mat_descr_t mat_A,
nvpl_sparse_const_dn_vec_descr_t vec_X,
nvpl_sparse_dn_vec_descr_t vec_Y,
nvpl_sparse_data_type_t compute_type,
nvpl_sparse_spsv_alg_t alg,
nvpl_sparse_spsv_descr_t spsv_descr)
nvpl_sparse_status_t
nvpl_sparse_spsv_update_matrix(nvpl_sparse_handle_t handle,
nvpl_sparse_spsv_descr_t spsv_descr,
void* new_values,
nvpl_sparse_spsv_update_t update_part)
此函数求解线性方程组,其系数以稀疏三角矩阵表示
\(op\left( \mathbf{A} \right) \cdot \mathbf{Y} = \alpha\mathbf{X}\) |
其中
op(A)是大小为 \(m \times m\) 的稀疏方阵X是大小为 \(m\) 的稠密向量Y是大小为 \(m\) 的稠密向量\(\alpha\) 是标量
此外,对于矩阵 A
\(\text{op}(A) = \begin{cases} A & \text{if op(A) == NVPL_SPARSE_OPERATION_NON_TRANSPOSE} \\ A^{T} & \text{if op(A) == NVPL_SPARSE_OPERATION_TRANSPOSE} \\ A^{H} & \text{if op(A) == NVPL_SPARSE_OPERATION_CONJUGATE_TRANSPOSE} \\ \end{cases}\)
函数 nvpl_sparse_spsv_buffer_size() 返回 nvpl_sparse_spsv_analysis() 和 nvpl_sparse_spsv_solve() 所需的工作空间大小。函数 nvpl_sparse_spsv_analysis() 执行分析阶段,而 nvpl_sparse_spsv_solve() 执行稀疏三角线性系统的求解阶段。不透明数据结构 spsv_descr 用于在所有函数之间共享信息。函数 nvpl_sparse_spsv_update_matrix() 使用新的矩阵值更新 spsv_descr。
该例程支持输入矩阵的任意稀疏性,但在计算中仅考虑上三角或下三角部分。
注意: 所有参数在 nvpl_sparse_spsv API 调用中必须保持一致,并且矩阵描述和 external_buffer 在 nvpl_sparse_spsv_analysis() 和 nvpl_sparse_spsv_solve() 之间不得修改。函数 nvpl_sparse_spsv_update_matrix() 可用于更新存储在不透明数据结构 spsv_descr 内的稀疏矩阵上的值
参数。 |
内存 |
含义 |
|---|---|---|
|
输入 |
NVPL Sparse 库上下文的句柄 |
|
输入 |
操作 |
|
输入 |
用于乘法的 \(\alpha\) 标量,类型为 |
|
输入 |
稀疏矩阵 |
|
输入 |
稠密向量 |
|
输入/输出 |
稠密向量 |
|
输入 |
执行计算的数据类型 |
|
输入 |
计算的算法 |
|
输出 |
|
|
输入/输出 |
指向工作区缓冲区的指针,该缓冲区至少为 |
|
输入/输出 |
用于存储跨三个步骤使用的内部数据的不透明描述符 |
下面列出了当前支持的稀疏矩阵格式
NVPL_SPARSE_FORMAT_CSRNVPL_SPARSE_FORMAT_COONVPL_SPARSE_FORMAT_SLICED_ELL
nvpl_sparse_spsv 支持以下形状和属性
NVPL_SPARSE_FILL_MODE_LOWER和NVPL_SPARSE_FILL_MODE_UPPER填充模式NVPL_SPARSE_DIAG_TYPE_NON_UNIT和NVPL_SPARSE_DIAG_TYPE_UNIT对角线类型
nvpl_sparse_spsv 支持以下索引类型来表示稀疏矩阵 mat_A
32 位索引 (
NVPL_SPARSE_INDEX_32I)64 位索引 (
NVPL_SPARSE_INDEX_64I)
nvpl_sparse_spsv 支持以下数据类型
单精度计算
|
|---|
|
|
|
|
nvpl_sparse_spsv 支持以下算法
算法 |
注释 |
|---|---|
|
默认算法 |
nvpl_sparse_spsv 具有以下属性
该例程的分析阶段需要额外的存储空间,该空间与稀疏矩阵的非零条目数成正比
为求解阶段
nvpl_sparse_spsv_solve()的每次运行提供确定性(按位)结果该例程支持就地操作
nvpl_sparse_spsv_buffer_size()和nvpl_sparse_spsv_analysis()例程接受NULL作为vec_X和vec_Y该例程允许
mat_A的索引是未排序的
nvpl_sparse_spsv_update_matrix() 在调用分析阶段后更新稀疏矩阵。此函数支持以下更新策略 (update_part)
策略 |
注释 |
|---|---|
|
使用 |
|
使用存储在 |
有关返回状态的描述,请参阅 nvpl_sparse_status_t。