已关闭
[Bug-Report|缺陷反馈]: aclblasSgeqrfBatched 接口 info 参数实现不完整,与标准 BLAS 行为不一致 #193
xutianze创建于  6月23日关闭于  6月26日
xutianze
xutianze成员
6月23日 创建

问题描述

aclblasSgeqrfBatched 接口的 info 参数存在三个问题:

  1. Host 侧参数校验未设置 info 负值:sgeqrf_batched_host.cpp 中 ValidateGeqrfBatchedParams 函数在参数不合法时只返回了错误状态码,从未设置 *info 为对应的负值(如 info = -1 表示 m 不合法)。这与标准 BLAS 行为不一致——标准 BLAS 中 info < 0 表示第 -info 个参数不合法。

  2. CPU 参考实现将 info 当作数组使用:sgeqrf_batched_golden.h 中 aclblasSgeqrfBatched_cpu 函数在循环中对每个 batch 写入 info[b] = 0,将 info 当作数组使用。但接口定义中 info 是单个 int*(与标准 BLAS 一致),应为 *info = 0。

  3. 测试用例未验证 info 值:sgeqrf_batched_test.cpp 中分配了 infoHost 向量,但没有任何断言验证其值(包括正常执行时应为 0,以及参数错误时应为负值)。

环境信息

  • 算子:aclblasSgeqrfBatched
  • 架构:arch35 (DAV_3510)
  • 数据类型:FP32
  • CANN 版本:9.0.0-beta.2
  • 相关代码路径:
    • blas/geqrf_batched/sgeqrf_batched/arch35/sgeqrf_batched_host.cpp
    • test/geqrf_batched/sgeqrf_batched/sgeqrf_batched_golden.h
    • test/geqrf_batched/sgeqrf_batched/arch35/sgeqrf_batched_test.cpp

预期结果

  1. Host 侧参数校验:当参数不合法时,应设置 *info = -i(其中 i 为参数位置),与标准 BLAS 行为一致。例如 m<0 时 *info = -1,n<0 时 *info = -2,lda<max(1,m) 时 *info = -4 等。

  2. CPU 参考实现:aclblasSgeqrfBatched_cpu 应将 info 视为单个 int*,正常时写入 *info = 0,错误时写入 *info = -i。

  3. 测试用例:应增加对 info 值的验证:

    • 正常执行后,info[0] == 0
    • 参数错误时,info[0] 为对应的负值
    • info == nullptr 时,应返回 ACLBLAS_STATUS_INVALID_VALUE

日志 / 截图

无运行时错误,为代码逻辑问题。

备注

建议参考 LAPACK 的 xGEQRF 接口规范:INFO = 0 表示成功,INFO = -i 表示第 i 个参数不合法。

likedislike
wangzitao
wangzitao成员
6月23日 评论:

感谢反馈,正在确认中。

likedislike
xutianzexutianze成员
6月25日 关联了pull request:fix(geqrf_batched): 完善aclblasSgeqrfBatched的info参数实现
CANN-robotCANN-robot成员
6月26日 关闭了 issue
CANN-robotCANN-robot成员
6月26日 添加了label:resolved