Csrot算子实现
概述
BLAS Csrot算子实现。
Csrot(复数向量旋转)算子实现了对两个复数向量的平面旋转运算,是BLAS基础线性代数库中的核心算子之一。
该算子实现了Givens旋转,常用于QR分解、求解线性方程组和特征值计算等数值算法中。
支持的产品
- Atlas A3 训练系列产品/Atlas A3 推理系列产品
- Atlas A2 训练系列产品/Atlas A2 推理系列产品
目录结构介绍
blas/rot/
├── README.md // 说明文档
└── arch22/
├── csrot_host.cpp // Host 侧实现(arch22)
└── csrot_kernel.cpp // Kernel 侧实现(arch22)
算子描述
- 算子功能:
Csrot算子实现了对两个复数向量的平面旋转。对应的数学表达式为:
x[i] = c * x[i] + s * y[i]
y[i] = c * y[i] - s * x[i] (使用原始x[i])
其中 c = cos(θ),s = sin(θ),θ为旋转角度
对应的接口为:
int aclblasCsrot(float *x, float *y, const int64_t n, const float c, const float s, void *stream);
| 参数 | csrot 参数说明 | |||
| 参数列表 | Param. | Memory | in/out | 含义 |
| n | in | 向量元素个数。 | ||
| c | host/device | in | 旋转角度的余弦值。 | |
| s | host/device | in | 旋转角度的正弦值。 | |
| x | device | in/out | 向量,包含 n 个元素,原地修改。 | |
| y | device | in/out | 向量,包含 n 个元素,原地修改。 | |
-
算子规格:
算子类型(OpType) Csrot 算子输入 name shape data type format x, y n float ND 算子输出 x, y n float ND 核函数名 csrot_kernel -
算子实现:
将输入数据从x和y的GM地址分块搬运到UB,进行旋转计算后再搬出到x和y所在的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=csrot --run # --ops=<算子名> --run可选参数,执行测试样例执行结果如下,说明精度对比成功。
[Success] Case accuracy is verification passed.