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. | Memory | in/out | 含义 |
| handle | host | in | ACL流handle,用于传入stream。 | |
| trans | host | in | 矩阵操作类型:N=不转置,T=转置,C=共轭转置。 | |
| m | in | 矩阵A的行数。 | ||
| n | in | 矩阵A的列数。 | ||
| alpha | host | in | 复数标量alpha。 | |
| A | device | in | m x n复数矩阵。 | |
| lda | in | 矩阵A的主维长度。 | ||
| x | device | in | 向量x(长度取决于trans)。 | |
| incx | in | x中连续元素之间的步长。 | ||
| beta | host | in | 复数标量beta。 | |
| y | device | in/out | 向量y(长度取决于trans)。 | |
| incy | in | y中连续元素之间的步长。 | ||
算子规格:
算子类型(OpType) Cgemv 算子输入 name shape data type format A 512 * 256 complex ND x 256 complex ND 算子输出 y 512 complex ND 核函数名 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),仅供参考