CANN/ops-blas Cscal算子实现

Cscal算子实现

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

概述

BLAS Cscal算子实现。

Cscal(Complex Scale)算子实现了复数向量缩放运算,是BLAS基础线性代数库中的核心算子之一。

该算子实现复数向量乘以复数标量:(a+bi)*(c+di) = (ac-bd) + (ad+bc)i

支持的产品

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

目录结构介绍

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

算子描述

  • 算子功能:
    cscal算子实现了复数向量x乘以复数标量alpha。对应的数学表达式为:
x = alpha * x

复数乘法公式:(real, imag) * (alpha_r, alpha_i) = (real*alpha_r - imag*alpha_i, real*alpha_i + imag*alpha_r)

  • 对应的接口:
int aclblasCscal(aclblasHandle handle, std::complex<float> *x, const std::complex<float> alpha,
                 const int64_t n, const int64_t incx);
参数cscal 参数说明
参数列表Param.Memoryin/out含义
handlehostinACL流handle,用于传入stream。
xdevicein/out复数向量,包含n个complex 元素。
alphahostin用于乘法的复数标量。
nin向量x中的复数元素个数。
incxinx中连续元素之间的步长。
  • 算子规格:

    算子类型(OpType)Cscal
    算子输入nameshapedata typeformat
    x8 * 2048complex ND
    算子输出x8 * 2048complex ND
    核函数名cscal
  • 算子实现:

    将复数向量从GM搬运到UB,使用vreducev2进行虚实分离,分别计算实部实部、实部虚部、虚部实部、虚部虚部,再使用add_v合并结果,最后通过vgather进行虚实合并并搬运回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=cscal --run # --ops=<算子名> --run可选参数,执行测试样例
    

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

    [Success] Case accuracy is verification passed.
    [PASS] cscal_test
    

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

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

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值