已合并
feat(cdgmm): 迁移 ColwiseMul 为行主序 Cdgmm;新增 extensions/ 目录迁移 ComplexMatDot #314
feat(cdgmm): 迁移 ColwiseMul 为行主序 Cdgmm;新增 extensions/ 目录迁移 ComplexMatDot #314
已合并
2301_82146483创建于 7月28日
2301_82146483
2301_82146483
7月28日

关联 Issue

Closes #84

背景

Issue #84 要求对仓库中的非标准算子进行规范化迁移:

  1. aclblasColwiseMul 是一个非标准接口,需重构为 aclblasCdgmm,接口形态对齐 cuBLAS cublasCdgmm
  2. 仓库需要新建 extensions/ 目录,将扩展类算子(如 complex_mat_dot)从 blas/ 迁移到 extensions/,保持与标准 BLAS 算子的目录分离。

本次 PR 内容

任务一:aclblasColwiseMul → aclblasCdgmm 迁移

按照迁移方案文档执行,核心策略为行主序、LEFT-only、最小改动

  • 接口重构:删除 aclblasColwiseMul,新增 aclblasCdgmm,参数数量、顺序和类型对齐 cublasCdgmmhandle, mode, m, n, A, lda, x, incx, C, ldc)。
  • 行主序布局:A/C 为行主序复数矩阵,lda/ldc 表示行跨度(>= max(1, n)),与 cuBLAS 列主序存在差异,文档已明确说明。
  • LEFT-only:第一阶段只实现 ACLBLAS_SIDE_LEFTC[i,j] = x[i] * A[i,j]),RIGHT 返回 ACLBLAS_STATUS_NOT_SUPPORTED,非法 mode 返回 ACLBLAS_STATUS_INVALID_ENUM
  • 标准参数支持:独立 lda/ldc、正负 incx、padding 保持、原地执行(A==C && lda==ldc)。
  • 内存修复:aug 内存从 new[] 改为 std::vector,修复所有错误路径的内存泄漏。
  • 动态核数:使用 GetAivCoreCount() 替代硬编码 8 核,多核仍按行切分。
  • Kernel 复用:原 colwise_mul 的 GatherMask 去交错、复数标量乘法、Gather 重新交错、ping-pong UB、大行分块等逻辑全部原样保留,仅拆分输入/输出行偏移为 2*row*lda / 2*row*ldc
  • CMake 版本门槛ENABLE_BLAS_DGMM 改为 ENABLE_BLAS_SDGMM,使 arch22 Cdgmm 不被 arch35 Sdgmm 的 asc-devkit >= 9.1 门槛误伤。
  • 测试迁移:53 个 CSV 驱动用例 + 1 个 NullHandle TEST_F,覆盖参数校验、LEFT 功能、incx 正负、lda/ldc padding、原地执行、长行超 UB tile、多核切分等。
  • 清理:删除 blas/colwise_mul/test/colwise_mul/,更新 docs/zh/api_list.mdblas/dgmm/README.md

任务二:complex_mat_dot → extensions/complexmatdot 迁移

  • 新建 extensions/ 目录:在根目录创建 extensions/,用于存放非标准 BLAS 扩展算子。
  • 源码迁移blas/complex_mat_dot/extensions/complexmatdot/arch22/,文件名统一去掉下划线。
  • kernel.h 拆分:从 kernel.cpp 的 include guard 中拆出独立的 complexmatdot_kernel.h
  • 内存修复:aug 内存同样从 new[] 改为 std::vector
  • 测试迁移test/complex_mat_dot/complex_mat_dot/test/extensions/complexmatdot/
  • CMake 适配extensions/CMakeLists.txt 追加到 ALL_BLAS_SRC_FILES(而非覆盖);cmake/test.cmake 增加 extensions/ 目录搜索路径;根 CMakeLists.txt 新增 add_subdirectory(extensions) 和 include 路径。
  • 文档更新docs/zh/api_list.md 链接更新。
  • 清理:删除 blas/complex_mat_dot/test/complex_mat_dot/

测试结果

远端 Ascend 910B3 环境构建与测试:

测试 结果
cdgmm --soc=ascend910b3 --run 54 tests passed(含 NullHandle + 53 CSV 用例)
complexmatdot --soc=ascend910b3 --run 1 test passed
sdgmm --soc=ascend950 编译通过,不受影响
dgmm --soc=ascend910b3 cdgmm 构建正确,sdgmm 正确跳过
dgmm --soc=ascend950 sdgmm 构建正确,cdgmm 正确跳过

符号检查:

  • libops_blas.so 导出 aclblasCdgmmaclblasComplexMatDotaclblasCreate
  • 不导出 aclblasColwiseMul
  • rg -i "aclblasColwiseMul|ColwiseMul|colwise_mul" 无有效功能代码引用

目标 SoC

  • Atlas A2 训练/推理系列(ascend910b3 / arch22):Cdgmm + ComplexMatDot
  • Ascend 950PR / Ascend 950DT(ascend950 / arch35):Sdgmm 不受影响
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 2301_82146483 的贡献)
2301_821464832301_82146483
7月28日 创建了 pull request,commit bda8e3f7
2301_821464832301_82146483
7月28日 关联了issue:[Bug-Report|缺陷反馈]: colwise_mul 和 complex_mat_dot 不属于 BLAS 标准算子,需明确归属和命名规范
2301_821464832301_82146483
7月28日 update merge request[project id: 8916851, iid: 314, commit_id: 73eb048316d43570997c73fa7a9ed0b81ef7729e] virtual merging success
2301_821464832301_82146483
7月28日 推送  2 个提交:bda8e3f7-1 commit from branch masterb2328b09-Merge branch 'feat/cdgmm-migration' of git@gitcode.com:2301_82146483/ops-blas-yzy.git into 'master'
2301_821464832301_82146483
7月28日 update merge request[project id: 8916851, iid: 314, commit_id: 73c86d7344bf7fd29a3324bd6786b7de1c4cc505] virtual merging success
此处折叠了49条消息 查看更多
CANN-robotCANN-robot成员
29 天前 添加了label:approved
luowen203_gg123成员
29 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
29 天前 添加了label:lgtm
CANN-robotCANN-robot成员
29 天前 关闭了关联的issue
CANN-robotCANN-robot成员
29 天前 合入了pull request