已合并
feat(arch35): 新增 geam 算子,包含 aclblasSgeam 和 aclblasCgeam 接口 #328
iuyi创建于 9 天前
feat(arch35): 新增 geam 算子,包含 aclblasSgeam 和 aclblasCgeam 接口 #328
已合并
iuyi创建于 9 天前
iuyi
iuyi成员
9 天前

描述

GEAM(General Matrix Add)执行带标量缩放的矩阵加法运算,支持对输入矩阵 A、B 分别施加可选的转置(Transpose)或共轭转置(ConjTrans)操作。数学定义为:

C[i, j] = alpha * op(A)[i, j] + beta * op(B)[i, j],  i ∈ [0, m), j ∈ [0, n)

其中 op(X) 根据转置参数取 X(NoTrans)、X^T(Trans)或 X^H(ConjTrans,仅复杂数有意义,浮点数等价于 Trans)。矩阵采用列主序(Column-Major)存储,X[i, j] 的物理地址为 X[i + j * ldX]

本算子提供两个接口:aclblasSgeam(单精度浮点 float)与 aclblasCgeam(单精度复数 aclblasComplex),覆盖实数与复数两类矩阵加法场景。

关联的Issue

测试

test/geam/ 下测试全部通过

文档更新

blas/geam/README.md

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 iuyi 的贡献)
iuyiiuyi成员
9 天前 创建了 pull request,commit de92c134
atomgit-bot
atomgit-bot
9 天前 评论:

变更摘要

本次 PR 为 arch35 架构新增 GEAM(General Matrix Add)算子,提供 aclblasSgeam(单精度浮点)和 aclblasCgeam(单精度复数)两个公共接口,实现带标量缩放的矩阵加法 C = alpha * op(A) + beta * op(B),支持 NoTrans / Trans / ConjTrans 三种转置模式,采用列主序存储。整体实现覆盖公共 API 声明、主机端参数校验与 Tiling 计算、Vector 核心 kernel、以及完整的测试框架。

主要改动

  • 新增公共 API 声明:在 include/cann_ops_blas.h 中新增 aclblasSgeamaclblasCgeam 两个函数声明,接口遵循 BLAS 标准(含 handletransa/transbm/nalpha/betalda/ldb/ldc 等参数),扩展了算子的对外可用性。

  • 新增主机端实现与参数校验sgeam_host.cppcgeam_host.cpp 实现了 Tiling 数据计算(基于 UB 容量和 MAX_BLOCK_COUNT=4095 硬件限制)、2D 多核分解(colBlocks × mBlocks)、及 Kernel 启动;geam_host_common.h 提供模板化的 ValidateGeamParams,统一校验转置类型、维度、leading dimension、nullptr 输入(含 alpha=nullptr 等价于 alpha=0 的 BLAS 扩展语义)以及 in-place(C==AC==B)合法性。

  • 新增设备端 Vector Kernelsgeam_kernel.cpp 采用 TPipe + TQue<VECIN>/VECOUT + TBuf<VECCALC> 架构,分 PATH A(NN 多列 strided DataCopyPad)和 PATH B(单列/转置/共轭转置)两条路径;cgeam_kernel.cpp 采用交错复数存储,分别管理实部/虚部缓冲区和队列,支持 alpha==0/beta==0 缓冲区优化(beta==0 时跳过 B 的 2 个缓冲区),并通过 Muls + Sub/Add 组合实现复数乘法与共轭处理。

  • 新增 Tiling 数据结构sgeam_tiling_data.hcgeam_tiling_data.h 定义了 host/device 共享的 Tiling 参数结构体,包含矩阵维度、leading dimension、alpha/beta 标量、转置类型、零值标志位、2D 分块参数(colBlocks/perCoreN/remaindermBlocks/perCoreMTile/mTileRemainder)以及 tileMSgeamTilingData 额外包含 colsIter 用于 NN 多列路径。

  • 新增测试框架与 golden 参考实现test/geam/ 下新增 sgeam 和 cgeam 的完整测试体系,包括 CSV 参数化测试用例、NPU wrapper(处理 device 内存分配及 in-place 场景的拷回逻辑)、geam_golden.h 提供的 CPU 参考实现 aclblasGeam_cpu(模板化支持 float 和 std::complex<float>,内附 conjugate 辅助函数处理 C 转置下的共轭),以及各边界条件硬编码测试(null handle、nullptr 输入、非法转置、负维度、leading dimension 不足、in-place 约束违规等)。

likedislike
atomgit-bot
atomgit-bot
9 天前 评论:

🤖 AI Code Review

⚠️ 审查未能完成

本次代码审查未能完成,可能是临时性故障。

你可以在评论区输入 /ai review 重新发起审查。若多次失败,请联系管理员并附上下方追踪 ID。

追踪 ID: task-175785-run-168694

likedislike
CANN-robotCANN-robot成员
9 天前 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
9 天前 添加了label:cann-cla/yes
此处折叠了114条消息 查看更多
CANN-robotCANN-robot成员
8 天前 添加了label:ci-pipeline-passed
xutianze
xutianze成员
8 天前 评论:

/lgtm

likedislike
wangzitao
wangzitao成员
8 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
8 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
8 天前 合入了pull request