当前位置: 首页 > news >正文

CANN/ops-blas批量矩阵向量乘法算子实现

GemvBatched 算子实现

【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas

概述

BLAS GemvBatched 算子实现。

GemvBatched(批量实数矩阵-向量乘法)实现了对一批矩阵分别进行矩阵-向量乘法的运算,是 BLAS Level 2 核心算子之一。针对 Ascend 950(arch35)架构,支持 S(FP32 入/出)、HSH(FP16 入/出)、HSS(FP16 入/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/ // 复数批量 GEMV(arch22 实现)

算子描述

  • 算子功能:

GemvBatched 对每个 batch 独立完成矩阵-向量乘法。对应的数学表达式为:

y[i] = alpha * op(A[i]) * x[i] + beta * y[i]

其中op(A)可以是:

  • A(不转置,trans = N):维度 m×n,x 长度 n,y 长度 m
  • A^T(转置,trans = T):x 长度 m,y 长度 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_T
m, nHostin矩阵 A 的行数 / 列数
alphaHostin标量乘数
ADevicein矩阵 A 数组(batch×m×n 行主序)
ldaHostinA 矩阵的 leading dimension
xDevicein向量 x 数组
incxHostinx 向量元素步长
betaHostin标量乘数
yDevicein/out向量 y 数组
incyHostiny 向量元素步长
batchCountHostin批量大小
  • 算子规格:

    算子类型SgemvBatched / HSHgemvBatched / HSSgemvBatched
    算子输入nameshapedata type
    Abatch × m × nfloat / uint16_t
    xbatch × (trans=N: n, trans=T: m)float / uint16_t
    算子输出ybatch × (trans=N: m, trans=T: n)float / uint16_t / float
    核函数名gemv_batched
  • 算子实现:

    trans=N(不转置):

    • 使用 AIV SIMD 向量指令实现行级点积(VEC_SCOPE),支持 m-tiling 和 n-tiling 分片策略
    • 多核并行:按 batch 数均匀分配到多个 AIV Core

    trans=T(转置):

    • 使用 SIMT 编程模型,每个线程处理一个输出元素
  • 调用实现: 使用gemv_batched_kernel_do()封装内核调用。

编译运行

  • 环境配置

    source /usr/local/Ascend/cann/set_env.sh
  • 编译算子

    bash build.sh --ops=gemv_batched --soc=ascend950
  • 编译并运行测试

    bash build.sh --ops=gemv_batched --soc=ascend950 --run

【免费下载链接】ops-blas本项目是CANN提供的高性能线性代数计算以及轻量化GEMM调用算子库。项目地址: https://gitcode.com/cann/ops-blas

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/948070/

相关文章:

  • 别再手动画阻焊了!用Altium Designer这个隐藏技巧,5分钟搞定大电流开窗
  • Windows右键菜单终极清理指南:3步告别杂乱,重获清爽体验
  • IT管理员必备:用Office部署工具批量静默安装Office 365,并自定义组件(排除Access/Publisher等)
  • PUBG罗技鼠标宏配置实战指南:从零到精通的压枪三部曲
  • 实战演练,基于快马AI构建一个技能匹配与团队协作平台
  • Ableton Live 12.4.5 扩展程序公测:突破预期,无规则限制打造专属音乐工具!
  • MATLAB实操包:毫米波雷达多普勒测速+CFAR弱目标检测+高分辨测距全流程代码与结果图
  • 从‘超级保护’到‘轻松绕过’:手把手教你分析并破解Key文件验证机制
  • Rucaparib卢卡帕利治疗卵巢癌,恶心乏力常见,严重肝损患者禁用
  • 手把手教你复现BUUCTF Easy Notes:从Session伪造到PHP反序列化拿Flag
  • 基于CNN的异常流量监测系统的设计与实现
  • 5分钟快速上手:基于多智能体LLM的智能投资分析系统完整指南
  • 机器视觉:掩膜编辑
  • 阿里技术大佬都在看的《阿里巴巴开发手册合集》,Java工程师必收!
  • 终极指南:如何快速配置ViGEmBus虚拟手柄驱动实现完美游戏体验
  • 智能网联汽车竞赛代码实战包:轨迹跟踪、自动泊车、AEB与车道保持四大功能源码+可视化示例
  • 从SAML到OIDC:一次企业身份认证架构的‘现代化’升级踩坑实录
  • MATLAB环境下基于留一法的SVM二分类完整实现:含数据、代码、可视化与评估报告
  • 51单片机一主两从串口通信实操包:Proteus仿真+分角色C源码+地址识别逻辑
  • 如何快速上手GPT2_PMC-openmind:5分钟医学AI问答实战教程
  • KEIL中cmsis_armcc.h报错别慌!可能是语法高亮在‘假报警’
  • AutoLabs:多智能体系统在化学实验自动化中的应用
  • 编写程序,输入办公室空调温度,个人体感,分析温湿度对呼吸道,关节的影响并评级。
  • 炉石传说终极优化指南:如何用HsMod插件提升你的游戏体验
  • GPT-5.5智能体工作方式:从Prompt驱动到可审计编排的范式跃迁
  • 用PHPStudy在Windows上复现phpMyAdmin 4.8.1文件包含漏洞(附详细配置与双倍编码绕过技巧)
  • AI工具接入广告平台的72小时实战手册:从API对接到智能出价全链路拆解
  • TRELLIS Text XL高级技巧:10个提升3D模型生成效果的实用方法
  • 如何快速上手crt-animation-terminal-ltx-2.3-lora:5分钟创建复古CRT视频特效
  • 如何3秒破解百度网盘提取码:智能工具的终极效率革命