aclblasStatus_t aclblasSgemmEx(
aclblasHandle_t handle,
aclblasOperation_t transA, aclblasOperation_t transB,
int m, int n, int k,
constfloat* alpha,
constfloat* A, int lda,
constfloat* B, int ldb,
constfloat* beta,
float* C, int ldc,
aclblasGemmAlgo_t algo);
Background(背景信息)
新增
aclblasSgemmEx算子,实现单精度(FP32)通用矩阵乘法,核心运算为:其中矩阵 A、B、C 以及标量 alpha、beta 均为 FP32 类型,采用 BLAS 标准列主序存储。Ex 后缀表示保留算法选择参数
algo,与仓内已有aclblasGemmEx接口对齐,当前仅支持ACLBLAS_GEMM_DEFAULT。S 前缀表示单精度(FP32)专用,A/B/C/alpha/beta 均为float类型,无需传入 Atype/Btype/Ctype/computeType 参数。接口签名
aclblasStatus_t aclblasSgemmEx( aclblasHandle_t handle, aclblasOperation_t transA, aclblasOperation_t transB, int m, int n, int k, const float* alpha, const float* A, int lda, const float* B, int ldb, const float* beta, float* C, int ldc, aclblasGemmAlgo_t algo);参数规格
transA/transB:矩阵操作类型,支持 ACLBLAS_OP_N(不转置)、ACLBLAS_OP_T(转置)、ACLBLAS_OP_C(共轭转置,FP32 实数等价于转置)m/n/k:矩阵维度,M ≥ 0、N ≥ 0、K ≥ 0alpha/beta:FP32 标量系数指针,不可为 nullptrA/B/C:FP32 设备内存指针,列主序存储lda/ldb/ldc:矩阵主维度(列主序),需满足 BLAS 标准约束algo:算法选择,当前仅支持 ACLBLAS_GEMM_DEFAULT精度标准
目标芯片与 CANN 版本
Origin(信息来源)
cann 开发者
Benefit / Necessity(价值/作用)
BLAS(Basic Linear Algebra Subprograms)Level 3 标准矩阵乘法是科学计算、深度学习训练与推理中最基础且高频调用的运算原语之一。
aclblasSgemmEx提供 FP32 单精度矩阵乘法接口,支持矩阵转置组合(N/T/C)和 alpha/beta 标量缩放融合,满足以下应用场景需求:该算子针对 Ascend950(arch35)架构进行适配,利用 Cube MMA 阵列实现硬件加速矩阵乘法,同时通过 Vector Kernel 融合 alpha/beta 后处理,减少额外 Kernel launch 开销和中间结果访存。接口遵循 BLAS 标准列主序约定,便于既有 BLAS 应用程序迁移至昇腾平台。
Design(设计方案)
编程模型
SIMD membase(传统 SIMD,TPipe/TQue 流水线 + BlockMmad 低阶 API),采用双 Kernel 架构:
op(B')×op(A'),结果写 GMC = alpha*tempAB + beta*C后处理列主序适配(Column-Major Trick)
BLAS 接口为列主序,NPU Cube 硬件按行主序分块计算。利用矩阵转置等价关系,Host 侧在 Tiling 计算后执行参数交换:
swap(m, n)、swap(lda, ldb)、swap(isTransA, isTransB)、设备指针aDevicePtr = B、bDevicePtr = A。交换后 Cube Kernel 按行主序计算,结果写入 GM 即为列主序的 C。Tiling 策略
分支场景覆盖