CANN/ops-blas Cgemv测试
2026/5/9 14:17:33 网站建设 项目流程

Cgemv算子实现

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

概述

BLAS Cgemv算子实现。

Cgemv(Complex General Matrix-Vector multiplication)算子实现了复数矩阵与向量乘法运算,是BLAS基础线性代数库中的核心算子之一。

该算子实现复数矩阵向量乘法:y = alpha * A * x + beta * y(支持转置和共轭转置)

支持的产品

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

目录结构介绍

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

算子描述

  • 算子功能:
    cgemv算子实现了复数矩阵A与向量x的乘法运算,并加到向量y上。对应的数学表达式为:
y = alpha * op(A) * x + beta * y

其中op(A)可以是:

  • A(不转置,trans=N)
  • A^T(转置,trans=T)
  • A^H(共轭转置,trans=C)

复数乘法公式:(a+bi) * (c+di) = (ac-bd) + (ad+bc)i

  • 对应的接口:
int aclblasCgemv(aclblasHandle handle, aclblasOperation trans, const int64_t m, const int64_t n, const std::complex<float> &alpha, const std::complex<float> *A, const int64_t lda, const std::complex<float> *x, const int64_t incx, const std::complex<float> &beta, std::complex<float> *y, const int64_t incy, void *stream);
参数cgemv 参数说明
参数列表Param.Memoryin/out含义
handlehostinACL流handle,用于传入stream。
transhostin矩阵操作类型:N=不转置,T=转置,C=共轭转置。
min矩阵A的行数。
nin矩阵A的列数。
alphahostin复数标量alpha。
Adeviceinm x n复数矩阵。
ldain矩阵A的主维长度。
xdevicein向量x(长度取决于trans)。
incxinx中连续元素之间的步长。
betahostin复数标量beta。
ydevicein/out向量y(长度取决于trans)。
incyiny中连续元素之间的步长。
  • 算子规格:

    算子类型(OpType)Cgemv
    算子输入nameshapedata typeformat
    A512 * 256complexND
    x256complexND
    算子输出y512complexND
    核函数名cgemv_no_trans / cgemv_do_trans
  • 算子实现:

    根据是否转置,选择不同的kernel函数:

    • cgemv_no_trans:不转置情况,矩阵按列分块,每列与向量元素相乘后累加到y
    • cgemv_do_trans:转置情况,矩阵按行分块,每行与向量元素相乘后累加到y

    使用vreducev2进行虚实分离,使用vgather进行虚实合并,利用AsdopsBuffer进行乒乓缓冲优化。

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

编译运行

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

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

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

    Testing cgemv (trans=N): [Success] Case accuracy is verification passed. Testing cgemv (trans=T): [Success] Case accuracy is verification passed. [PASS] cgemv_test

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询