跳到主要内容

Sparse Level2 Functions

1. CsrMV

计算 y = alpha * A *x + beta *y。其中,A 为CSR 格式存储的稀疏矩阵,x、y 均为稠密向量,alpha、beta 均为标量。

DateType: usparse::spmv::usparse_csrmv_algorithms

namespace usparse {
namespace spmv {
enum class usparse_csrmv_algorithms { Flat, LineEnhance, CsrAdaptivePlus, CsrVector, Adaptive }
}
}

usparse::spmv::usparse_csrmv_algorithms 是一个枚举类型,表示可用于 CsrMV 的算法,可有在 usparse_csrmv_analysis 和 usparse_csrmv API中进行指定(且需要一致)。

usparse_csrmv_analysis

usparse::usparse_status usparse::spmv::usparse_scsrmv_analysis(
const usparse::usparse_operation trans,
const usparse::csr_desc<usparse_int, usparse_fp32> dev_csr_mat,
usparse::mat::usparse_mat_info *info,
const usparse::spmv::usparse_csrmv_algorithms algo);

usparse::usparse_status usparse::spmv::usparse_dcsrmv_analysis(
const usparse::usparse_operation trans,
const usparse::csr_desc<usparse::usparse_int, usparse::usparse_fp64> dev_csr_mat,
usparse::mat::usparse_mat_info *info,
const usparse::spmv::usparse_csrmv_algorithms algo);

CsrMV之前的矩阵分析步骤,某些算法需要进行额外的矩阵分析和内存申请操作。其中:

  • Flat:需要申请一定的 device 端内存,需要在 device 上执行矩阵的预处理。
  • LineEnhance:无 device 端内存申请,无预处理操作。
  • CsrAdaptivePlus:需要申请 host 端内存,且需要在 host 端执行预处理。
  • CsrVector:无 device 端内存申请,无预处理操作。

usparse_csrmv

usparse::usparse_status usparse::spmv::usparse_scsrmv(
const usparse::usparse_operation trans,
const usparse::usparse_fp32 alpha,
const usparse::usparse_fp32 beta,
const usparse::csr_desc<usparse::usparse_int, usparse::usparse_fp32> dev_csr_mat,
const usparse::usparse_fp32 *x,
usparse::usparse_fp32 *y,
usparse::mat::usparse_mat_info *info,
const usparse::spmv::usparse_csrmv_algorithms algo);

usparse::usparse_status usparse::spmv::usparse_dcsrmv(
const usparse::usparse_operation trans,
const usparse::usparse_fp64 alpha,
const usparse::usparse_fp64 beta,
const usparse::csr_desc<usparse::usparse_int, usparse::usparse_fp64> dev_csr_mat,
const usparse::usparse_fp64 *x,
usparse::usparse_fp64 *y,
usparse::mat::usparse_mat_info *info,
const usparse::spmv::usparse_csrmv_algorithms algo);

在 device 上执行 CsrMV 计算,其中 info 参数为 usparse_csrmv_analysis api 的结果。

备注

如果算法指定的是 usparse::spmv::usparse_csrmv_algorithms::Flat,计算结果可能是不稳定的(即不保证两次运行能产生完全一致的结果)。

usparse_csrmv_clear

usparse::usparse_status usparse::spmv::usparse_csrmv_clear(usparse::mat::usparse_mat_info *info);

执行清理操作,如释放 usparse_csrmv_analysis 步骤申请的内存等。

2. CooMV

计算 y = alpha * A *x + beta *y。其中,A 为 COO 格式存储的稀疏矩阵,x、y 均为稠密向量,alpha、beta 均为标量。

DateType: usparse::spmv::usparse_coomv_algorithms

namespace usparse {
namespace spmv {
enum class usparse_coomv_algorithms { NaiveFlat, Flat, LineEnhance, AdaptivePlus, Vector, Adaptive };
}
}

usparse::spmv::usparse_coomv_algorithms 是一个枚举类型,表示可用于 CooMV 的算法,可有在 usparse_coomv_analysis 和 usparse_coomv API中进行指定(且需要一致)。

usparse_coomv_analysis

usparse::usparse_status usparse_scoomv_analysis(const usparse_operation trans,
const coo_desc<usparse_int, usparse_fp32> host_coo_mat,
const coo_desc<usparse_int, usparse_fp32> dev_coo_mat,
mat::usparse_mat_info *info, const usparse_coomv_algorithms algo);

usparse::usparse_status usparse_dcoomv_analysis(const usparse_operation trans,
const coo_desc<usparse_int, usparse_fp64> host_coo_mat,
const coo_desc<usparse_int, usparse_fp64> dev_coo_mat,
mat::usparse_mat_info *info, const usparse_coomv_algorithms algo);

CsrMV之前的矩阵分析步骤,某些算法需要进行额外的矩阵分析和内存申请操作。其中:

  • NaiveFlat:无额外的device端内存需求,无预处理操作。
  • Flat:需要申请一定的 device 端内存,需要在 device 上执行矩阵的预处理。
  • LineEnhance:需要申请一定的 device 端内存,需要在 device 上执行矩阵的预处理。
  • AdaptivePlus:需要申请 host 端内存,且需要在 host 端执行预处理。
  • Vector:需要申请一定的 device 端内存,需要在 device 上执行矩阵的预处理。
  • Adaptive:需要申请 host 端内存,且需要在 host 端执行预处理。

usparse_coomv

usparse::usparse_status usparse_scoomv(const usparse_operation trans, const usparse_fp32 alpha, const usparse_fp32 beta,
const coo_desc<usparse_int, usparse_fp32> host_coo_mat,
const coo_desc<usparse_int, usparse_fp32> dev_coo_mat, const usparse_fp32 *x,
usparse_fp32 *y, mat::usparse_mat_info *info, const usparse_coomv_algorithms algo);

usparse::usparse_status usparse_dcoomv(const usparse_operation trans, const usparse_fp64 alpha, const usparse_fp64 beta,
const coo_desc<usparse_int, usparse_fp64> host_coo_mat,
const coo_desc<usparse_int, usparse_fp64> dev_coo_mat, const usparse_fp64 *x,
usparse_fp64 *y, mat::usparse_mat_info *info, const usparse_coomv_algorithms algo);

COO 矩阵必须按行索引排序。

在 device 上执行 CooMV 计算,其中 info 参数为 usparse_coomv_analysis api 的结果。

备注

如果算法指定的是 usparse::spmv::usparse_coomv_algorithms::Flat,计算结果可能是不稳定的(即不保证两次运行能产生完全一致的结果)。

usparse_coomv_clear

usparse::usparse_status usparse::spmv::usparse_coomv_clear(usparse::mat::usparse_mat_info *info);

执行清理操作,如释放 usparse_coomv_analysis 步骤申请的内存等。