CANN/ops-blas批量矩阵向量乘法算子实现 GemvBatched 算子实现【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas概述BLAS GemvBatched 算子实现。GemvBatched批量实数矩阵-向量乘法实现了对一批矩阵分别进行矩阵-向量乘法的运算是 BLAS Level 2 核心算子之一。针对 Ascend 950arch35架构支持 SFP32 入/出、HSHFP16 入/出、HSSFP16 入/FP32 出三种精度。支持的产品产品是否支持Ascend 950PR / Ascend 950DT✓目录结构介绍blas/gemv_batched/ ├── README.md // 说明文档 ├── arch35/ │ ├── gemv_batched_host.cpp // Host 侧实现参数校验、Tiling 计算、Kernel 调用 │ ├── gemv_batched_kernel.cpp // Kernel 侧实现AIV SIMD 批量运算 SIMT 转置路径 │ └── gemv_batched_tiling_data.h // Tiling 数据结构Host 和 Kernel 共用 └── cgemv_batched/ └── arch22/ // 复数批量 GEMVarch22 实现算子描述算子功能GemvBatched 对每个 batch 独立完成矩阵-向量乘法。对应的数学表达式为y[i] alpha * op(A[i]) * x[i] beta * y[i]其中op(A)可以是A不转置trans N维度 m×nx 长度 ny 长度 mA^T转置trans Tx 长度 my 长度 n矩阵 A 采用行主序row-major存储。对应的接口为aclblasStatus_t aclblasSgemvBatched( aclblasHandle_t handle, aclblasOperation_t trans, int m, int n, const float *alpha, const float *A, int lda, const float *x, int incx, const float *beta, float *y, int incy, int batchCount); aclblasStatus_t aclblasHSHgemvBatched( aclblasHandle_t handle, aclblasOperation_t trans, int m, int n, const float *alpha, const uint16_t *A, int lda, const uint16_t *x, int incx, const float *beta, uint16_t *y, int incy, int batchCount); aclblasStatus_t aclblasHSSgemvBatched( aclblasHandle_t handle, aclblasOperation_t trans, int m, int n, const float *alpha, const uint16_t *A, int lda, const uint16_t *x, int incx, const float *beta, float *y, int incy, int batchCount);Param.Memoryin/out含义handleHostinops-blas 库上下文句柄transHostin矩阵操作类型ACLBLAS_OP_N / ACLBLAS_OP_Tm, nHostin矩阵 A 的行数 / 列数alphaHostin标量乘数ADevicein矩阵 A 数组batch×m×n 行主序ldaHostinA 矩阵的 leading dimensionxDevicein向量 x 数组incxHostinx 向量元素步长betaHostin标量乘数yDevicein/out向量 y 数组incyHostiny 向量元素步长batchCountHostin批量大小算子规格算子类型SgemvBatched / HSHgemvBatched / HSSgemvBatched算子输入nameshapedata typeAbatch × m × nfloat / uint16_txbatch × (transN: n, transT: m)float / uint16_t算子输出ybatch × (transN: m, transT: n)float / uint16_t / float核函数名gemv_batched算子实现transN不转置使用 AIV SIMD 向量指令实现行级点积VEC_SCOPE支持 m-tiling 和 n-tiling 分片策略多核并行按 batch 数均匀分配到多个 AIV CoretransT转置使用 SIMT 编程模型每个线程处理一个输出元素调用实现 使用gemv_batched_kernel_do()封装内核调用。编译运行环境配置source /usr/local/Ascend/cann/set_env.sh编译算子bash build.sh --opsgemv_batched --socascend950编译并运行测试bash build.sh --opsgemv_batched --socascend950 --run【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考