BLAS Level-3 对称秩-k 更新(变体)接口 aclblasSsyrkx 当前缺少 DAV_3510(ascend950)架构的支持。本次新增 arch35 实现,使 Ssyrkx 在 ascend950 上可用。
aclblasSsyrkx
Ssyrkx 计算公式:
C = alpha * op(A) * op(B)^T + beta * C
其中 op(X) = X(trans=N)或 op(X) = X^T(trans=T),C 为 n×n 对称矩阵(仅更新 uplo 指定三角),A/B 为 n×k 或 k×n 矩阵(A≠B)。
实现采用两阶段流水线架构,与已有 aclblasSsyrk 路线保持一致:
aclblasSsyrk
涉及新增文件:
blas/syrkx/arch35/ssyrkx_host.cpp
blas/syrkx/arch35/ssyrkx_kernel.cpp
blas/syrkx/arch35/ssyrkx_kernel.h
blas/syrkx/arch35/ssyrkx_tiling_data.h
blas/syrkx/README.md
test/syrkx/ssyrkx/arch35/ssyrkx_test.cpp
test/syrkx/ssyrkx/arch35/ssyrkx_npu_wrapper.h
test/syrkx/ssyrkx/arch35/ssyrkx_test.csv
test/syrkx/ssyrkx/ssyrkx_golden.h
test/syrkx/ssyrkx/ssyrkx_param.h
test/syrkx/ssyrkx/CMakeLists.txt
cann开发者
aclblasSsyr2k
四层循环结构:核级 tile → MN tile → K chunk → L0 K split
/syrkx/arch35/ssyrkx
Background(背景信息)
BLAS Level-3 对称秩-k 更新(变体)接口
aclblasSsyrkx当前缺少 DAV_3510(ascend950)架构的支持。本次新增 arch35 实现,使 Ssyrkx 在 ascend950 上可用。Ssyrkx 计算公式:
其中 op(X) = X(trans=N)或 op(X) = X^T(trans=T),C 为 n×n 对称矩阵(仅更新 uplo 指定三角),A/B 为 n×k 或 k×n 矩阵(A≠B)。
实现采用两阶段流水线架构,与已有
aclblasSsyrk路线保持一致:涉及新增文件:
blas/syrkx/arch35/ssyrkx_host.cpp— Host 侧入口(参数校验、Tiling 计算、kernel 调度)blas/syrkx/arch35/ssyrkx_kernel.cpp— Kernel 侧实现(GEMM + Scale 两个 kernel)blas/syrkx/arch35/ssyrkx_kernel.h— kernel 声明blas/syrkx/arch35/ssyrkx_tiling_data.h— TilingData 结构体定义blas/syrkx/README.md— 算子文档test/syrkx/ssyrkx/arch35/ssyrkx_test.cpp— CSV 参数化精度 STtest/syrkx/ssyrkx/arch35/ssyrkx_npu_wrapper.h— H2D/D2H 测试 wrapper(RAII 设备内存管理)test/syrkx/ssyrkx/arch35/ssyrkx_test.csv— 50 条测试用例(含边界值和非法参数校验)test/syrkx/ssyrkx/ssyrkx_golden.h— golden 计算参考test/syrkx/ssyrkx/ssyrkx_param.h— 测试参数定义test/syrkx/ssyrkx/CMakeLists.txt— 构建配置Origin(信息来源)
cann开发者
Benefit / Necessity(价值/作用)
aclblasSsyrkx在 ascend950 (DAV_3510) 上的缺失,完善 BLAS Level-3 接口覆盖率aclblasSsyrk/aclblasSsyr2k路线保持一致Design(设计方案)
两阶段架构
Phase 1 GEMM Kernel (AIC-only, tensor_api)
四层循环结构:核级 tile → MN tile → K chunk → L0 K split
Phase 2 Scale Kernel (AIV-only, SIMD)
Host 侧
/syrkx/arch35/ssyrkx,不影响其他数据类型