CANN/ops-blas gbmv算子实现
gbmv算子实现【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas概述BLAS gbmv算子实现。gbmv(General Banded Matrix-Vector Multiplication)算子实现了带状矩阵与向量的乘法运算是BLAS基础线性代数库中的核心算子之一。该算子针对带状矩阵的稀疏存储特性进行了优化支持转置操作和多核并行归约。支持的产品Atlas A5 训练系列产品/Atlas A5 推理系列产品目录结构介绍├── gbmv │ ├── CMakeLists.txt // 编译工程文件 │ ├── README.md // 说明文档 │ ├── gbmv_test.cpp // 精度测试用例 │ ├── gbmv_perf_test.cpp // 性能测试用例 │ └── gbmv_test_utils.h // 测试工具函数算子描述算子功能gbmv算子实现了带状矩阵乘以向量的运算。对应的数学表达式为y alpha * op(A) * x beta * yA为带状矩阵x和y是向量alpha和beta是标量op(A)可以是A或A的转置。带状矩阵A采用LAPACK带状存储格式需要lda * n个元素存储其中lda kl ku 1。元素A(i,j)存储在位置ku i - j j * lda仅对满足max(0, j-ku) i min(m-1, jkl)的位置有效。对应的接口为aclblasStatus_t aclblasSgbmv( aclblasHandle_t handle, aclblasOperation_t trans, int64_t m, int64_t n, int64_t kl, int64_t ku, const float *alpha, const float *A, int64_t lda, const float *x, int64_t incx, const float *beta, float *y, int64_t incy);参数gbmv 参数说明参数列表Param.Memoryin/out含义handleinaclbLAS 库上下文句柄。transin矩阵操作类型ACLBLAS_OP_N(不转置)、ACLBLAS_OP_T(转置)、ACLBLAS_OP_C(共轭转置实数下同T)。min矩阵 A 的行数。nin矩阵 A 的列数。klinA 的下带宽主对角线以下的非零对角线数。kuinA 的上带宽主对角线以上的非零对角线数。alphahost/devicein用于乘法的 type 标量。Adevicein带状矩阵 type 数组维度为 lda x n。ldain带状矩阵 A 存储的主维长度lda kl ku 1。xdeviceintype 向量transN时包含n个元素否则包含m个元素。incxinx 中连续元素之间的步长。betahost/devicein用于乘法的 type 标量。如果 beta 0则 y 不必是有效输入。ydevicein/outtype 向量transN时包含m个元素否则包含n个元素。incyiny 中连续元素之间的步长。算子规格算子类型(OpType)gbmv算子输入nameshapedata typeformatAlda * NfloatNDxX_COUNTfloatNDyY_COUNTfloatNDalpha1floatNDbeta1floatND算子输出yY_COUNTfloatND核函数名gbmv_kernel算子实现输入数据通过Host侧GatherStrided将带步长的向量收集为连续内存经H2D拷贝到Device。Kernel将矩阵列段和向量数据从GM分块搬运到UB完成乘加计算后通过SetAtomicAdd多核并行归约到输出向量。结果通过ScatterStrided按输出步长写回Host。调用实现使用内核调用符调用核函数。测试用例覆盖分组用例数覆盖场景L0 transN7基础功能、alpha/beta边界值、非单位步长、矩形矩阵L0 transT/C7转置基础功能、beta0、矩形、共轭转置L1 transN19带宽变体、边界形状、负步长、非紧凑lda、大规模、全零输出L1 transT/C18转置带宽变体、负步长、大规模矩形、全零输出编译运行在本样例根目录下执行如下步骤编译并执行算子。配置环境变量请根据当前环境上CANN开发套件包的安装方式选择对应配置环境变量的命令。默认路径root用户安装CANN软件包source /usr/local/Ascend/cann/set_env.sh默认路径非root用户安装CANN软件包source $HOME/Ascend/cann/set_env.sh指定路径install_path安装CANN软件包source ${install_path}/cann/set_env.sh样例执行bash build.sh --opsgbmv --run # --ops算子名 --run可选参数执行测试样例执行结果如下说明精度对比成功。[PASS] gbmv_test【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考