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

CANN/ops-blas sspmv算子实现

spmv算子实现

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

概述

BLAS spmv算子实现。

Spmv(Symmetric Packed Matrix-Vector Multiplication)算子实现了对称压缩矩阵与向量的乘法运算,是BLAS基础线性代数库中的核心算子之一。

该算子针对对称矩阵的存储特性进行了优化,采用压缩存储格式以节省内存空间,并高效完成矩阵与向量的乘加运算。

支持的产品

  • Atlas A3 训练系列产品/Atlas A3 推理系列产品
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品

目录结构介绍

├── spmv │ ├── CMakeLists.txt // 编译工程文件 │ ├── README.md // 说明文档 │ └── spmv_test.cpp // 算子调用样例

算子描述

  • 算子功能:
    spmv算子实现了将对称压缩矩阵乘以向量。对应的数学表达式为:
z = alpha * A * x + beta * y

A为对称压缩矩阵,x和y是向量,alpha和beta是标量

对称矩阵A的下三角部分元素按行连续打包储存,元素A(i,j)储存在位置AP[j + i * (i + 1) / 2]中,且i >= j,对应的对称部分通过已有元素推断得出。压缩对称矩阵格式仅需要n * (n + 1) / 2个元素储存。

对应的接口为:

int aclblasSpmv(const float *aPacked, const float *x, const float *y, float *z, const float alpha, const float beta, const int64_t n, const int64_t incx, const int64_t incy, void *stream);
参数spmv 参数说明
参数列表Param.Memoryin/out含义
nin对称压缩矩阵 A 的行数和列数。
alphahost/devicein用于乘法的 <type> 标量。
aPackeddevicein对称压缩矩阵 <type> 数组,维度为 n x n。
xdevicein<type> 向量,包含 n 个元素。
incxinx 中连续元素之间的步长。
betahost/devicein用于乘法的 <type> 标量。如果 beta == 0,则 y 不必是有效输入。
ydevicein<type> 向量,包含 n 个元素。
incyiny 中连续元素之间的步长。
zdeviceout<type> 向量,包含 n 个元素。
  • 算子规格:

    算子类型(OpType)Spmv
    算子输入nameshapedata typeformat
    AN * (N + 1) /2floatND
    xNfloatND
    yNfloatND
    alpha1floatND
    beta1floatND
    算子输出zNfloatND
    核函数名spmv_kernel
  • 算子实现:

    将输入数据从A,x,y的GM地址分块搬运到UB,进行计算后再搬出到z所在的GM地址。

  • 调用实现
    使用内核调用符<<<>>>调用核函数。

编译运行

在本样例根目录下执行如下步骤,编译并执行算子。

  • 配置环境变量
    请根据当前环境上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 --ops=spmv --run # --ops=<算子名> --run可选参数,执行测试样例

    执行结果如下,说明精度对比成功。

    [Success] Case accuracy is verification passed.

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

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

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

相关文章:

  • 如何在Stable-Worldmodel中实现warm-start规划?提升求解效率的关键技巧
  • GPT-2 Large与其他GPT模型对比:如何选择最适合你项目的语言模型
  • VTK太复杂?试试用C#的ActiViz库:5步搞定三维点云可视化(避坑指南)
  • AI重塑ITSM:从技术顾问到社区构建者的实践与思考
  • 深入systemd:从‘ovsdb-server.service is not running’错误理解Linux服务管理
  • 深度解析OpCore-Simplify:自动化OpenCore EFI配置的技术实现
  • 解决常见问题:Qwen3.6-27B-OBLITERATED使用中的10个疑难解答
  • RoBERTa-large-sst2开发者指南:5个自定义训练与模型优化技巧
  • 如何高效自动化下载国家中小学智慧教育平台电子课本?tchMaterial-parser实用指南深度解析
  • 告别采样负电压!用差分运放给MCU设计一个‘零压线’信号调理电路
  • [开源] 医疗大模型知识盲区检测与可视化系统:面向临床决策者的AI能力边界认知工具
  • 虚拟化浪潮与元宇宙演进:从技术架构到社会影响深度解析
  • 告别VirtualBox的‘幽灵网卡’错误:深度清理与重建Host-Only网络适配器全流程
  • 【读书笔记】《系统架构设计》精华解读
  • 终极OpenCore自动化配置指南:如何用OpCore-Simplify在30分钟内完成Hackintosh部署
  • 新手避坑指南:用Arduino IDE 2.2.1点亮源地ESP32-S2-MINI-1开发板上的WS2812B灯珠
  • 实战案例:用SAE-Res-Qwen3.5-2B-Base-W32K-L0_50分析Qwen3.5模型推理过程
  • AI时代商业可见性:从SEO到AI优化的范式转移与实战指南
  • Obsidian美化实用指南:轻松打造高效又美观的知识管理界面
  • Linux网络开发避坑指南:当MAC直连没有PHY时,fixed-link属性怎么配才不报错?
  • LabVIEW UI 逻辑解耦设计
  • 如何快速上手Qwen2.5-0.5B-Instruct:从安装到首次对话的简单教程
  • cross-en-fr-it-roberta-sentence-transformer vs 传统模型:4大语言场景下的性能对比分析
  • e5-large-en-ru高级应用:如何用「query:」和「passage:」前缀提升检索准确率?
  • 深入ZYNQMP启动流程:从Boot ROM到udev挂载,一次讲清EMMC启动的底层逻辑
  • 5分钟完成黑苹果EFI配置:OpCore-Simplify智能自动化工具完整指南
  • 5分钟彻底改造你的音乐播放器:foobox-cn终极美化方案实战
  • 告别死记硬背:用状态机图解NR C-DRX Inactivity Timer的工作流程(含3GPP协议解读)
  • Exodia-7B开发者指南:自定义训练与模型微调全攻略
  • MoE架构深度解析:Qwen3.5-122B-A10B-Uncensored-HauhauCS-Aggressive如何用1220亿参数实现高效推理