已关闭
[Requirement|需求建议]: 新增面向 Ascend950 的 aclsparseSgtsv2 / aclsparseSgtsv2_bufferSizeExt 接口(带部分选主元的三对角线性系统求解) #112
Riki创建于  7月22日关闭于  7月27日
Riki
Riki成员
7月22日 创建

Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.

Backgroud(背景信息)

ops-sparse 仓已实现 aclsparseSgtsv2Nopivot(无选主元 Thomas 算法)和 aclsparseSgtsv2StridedBatch(批量 CR 算法)两个三对角求解算子。但无主元版本在非对角占优矩阵上数值不稳定,存在精度风险。

需要提供 aclparseSgtsv2 / aclsparseSgtsv2_bufferSizeExt 接口,采用带部分选主元(partial pivoting)的 Thomas 算法,通过行交换选取主元,显著提升数值稳定性。本需求为 ops-sparse 仓补充带主元的三对角求解能力。

算子功能:求解三对角线性系统 A * X = B,其中 A 为 m×m 三对角矩阵(由下对角 dl、主对角 d、上对角 du 定义),B 为 m×n 右端项矩阵。解 X 原地覆盖 B。

Origin(信息来源)

CANN生态开发者

Benefit / Necessity (价值/作用)

  1. 数值稳定性:带部分选主元的 Thomas 算法相比无主元版本(gtsv2_nopivot),在非对角占优矩阵上数值更稳定、精度更高。
  2. API 完整性:补全 ops-sparse 仓三对角求解 API 矩阵,与 gtsv2_nopivot / gtsv2_strided_batch / gtsv_interleaved_batch 形成完整系列。
  3. 应用场景:科学计算、工程仿真中的三对角线性系统求解,特别是非对角占优场景。

Design(设计方案)

项目 内容
算子名称 aclsparseSgtsv2(本体计算)/ aclsparseSgtsv2_bufferSizeExt(bufferSize 查询)
API 体系 Legacy API(扁平参数,带 S 精度前缀,无 MatDescr)
数据类型 FP32
目标芯片 Ascend950 (arch35)
目录名 gtsv2

接口原型

aclsparseStatus_t aclsparseSgtsv2_bufferSizeExt(
    aclsparseHandle_t handle, int m, int n,
    const float *dl, const float *d, const float *du,
    const float *B, int ldb, size_t *bufferSizeInBytes);

aclsparseStatus_t aclsparseSgtsv2(
    aclsparseHandle_t handle, int m, int n,
    const float *dl, const float *d, const float *du,
    float *B, int ldb, void *pBuffer);

算法

带部分选主元(partial pivoting)的 Thomas 算法:

  • 前向消元(step i=1..m-1):比较 |d[i-1]| 与 |dl[i]|,若 |dl[i]| > |d[i-1]| 则交换行 i 与 i-1 的三对角系数及 B 对应行;消元后产生第二上对角线 fill-in(du2),需跟踪。
  • 回代:从最后一行向上回代,含第二上对角线 du2 项。

架构

  • SIMT 编程模型(__simt_vf__ + asc_vf_call + grid-stride loop + 直接 GM 访问)
  • 多核切分:按 n 列(右端项)grid-stride 分配,每线程处理一个 RHS 列
  • workspace:align128(3 * m * n * sizeof(float))(存储 d'/du'/du2' 三组消元结果)

约束

  • m >= 3, n >= 0(n=0 提前返回 SUCCESS)
  • dl[0] == 0, du[m-1] == 0(用户保证)
  • ldb >= m
  • pBuffer 128 字节对齐
  • 奇异矩阵:不施加保护,零主元时 Inf/NaN 传播
likedislike
RikiRiki成员
7月22日 修改了issue 的描述
RikiRiki成员
7月22日 关联了pull request:feat: 新增面向 Ascend950 的 aclsparseSgtsv2 和 aclsparseSgtsv2_bufferSizeExt 接口
RikiRiki成员
7月22日 修改标题为 “[Requirement|需求建议]: 新增面向 Ascend950 的 aclsparseSgtsv2 / aclsparseSgtsv2_bufferSizeExt 接口(带部分选主元的三对角线性系统求解)”,原标题为“[Requirement|需求建议]: 新增 aclsparseSgtsv2 / aclsparseSgtsv2_bufferSizeExt 算子(带部分选主元的三对角线性系统求解)”
RikiRiki成员
7月22日 将 Twoliges 设为负责人
RikiRiki成员
7月27日 issue状态由 进行中 改变为 已完成
RikiRiki成员
7月27日 关闭了 issue
CANN-robotCANN-robot成员
7月27日 添加了label:resolved