文件最后提交记录最后更新时间
2 天前
7 天前
README.md

Gerc算子

算子概述

Gerc(Complex Rank-1 Update with Conjugate)算子实现了复数矩阵的共轭秩-1更新操作。Gerc 目前仅有 arch22 实现,无 arch35 实现。

数学表达式:

A = alpha * x * conj(y^T) + A

包含以下接口:

接口名 功能简述
aclblasCgerc 复数矩阵共轭秩-1更新

算子执行接口

aclblasCgerc

产品支持情况

  • Ascend 950PR / Ascend 950DT:不支持
  • Atlas A3 训练系列产品 / Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品 / Atlas A2 推理系列产品:支持

函数原型

int aclblasCgerc(const int64_t m, const int64_t n, const void *alpha, const void *x, const int64_t incx, const void *y, const int64_t incy, void *A, const int64_t lda, void *stream)

参数说明

参数名 输入/输出 参数类型 说明
m 输入 int64_t 矩阵 A 的行数,Host 内存
n 输入 int64_t 矩阵 A 的列数,Host 内存
alpha 输入 const void*(FP32 complex) 复数标量,存储为 [real, imag],Host 内存
x 输入 const void*(FP32 complex) 复数向量 x,长度为 m,Device 内存
incx 输入 int64_t 向量 x 的步长,Host 内存
y 输入 const void*(FP32 complex) 复数向量 y,长度为 n,Device 内存
incy 输入 int64_t 向量 y 的步长,Host 内存
A 输入/输出 void*(FP32 complex) 复数矩阵 A,大小为 m×n,原地更新,Device 内存
lda 输入 int64_t 矩阵 A 的主维度,Host 内存
stream 输入 void* ACL 流,Host 内存

约束说明

  • m >= 0, n >= 0
  • incx != 0, incy != 0
  • lda >= max(1, m)
  • 输入向量 x 和 y 必须是有效的复数数组
  • 矩阵 A 必须有足够的空间存储 m×n 个复数
  • 步长参数 incx 和 incy 当前仅支持值为 1
  • 主维度 lda 当前应等于 n

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考编译与运行样例

#include "acl/acl.h"
#include "cann_ops_blas.h"

int main()
{
    aclInit(nullptr);
    aclrtSetDevice(0);

    aclblasHandle_t handle;
    aclblasCreate(&handle);

    int64_t m = 4, n = 4;
    int64_t incx = 1;
    int64_t incy = 1;
    int64_t lda = n;
    aclblasComplex alpha{1.0f, 0.0f};

    aclblasComplex *dx, *dy, *dA;
    aclrtMalloc((void **)&dx, 2 * m * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST);
    aclrtMalloc((void **)&dy, 2 * n * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST);
    aclrtMalloc((void **)&dA, 2 * m * n * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST);

    aclblasCgerc(handle, m, n, alpha, dx, incx, dy, incy, dA, lda);

    aclrtStreamSynchronize(nullptr);

    aclrtFree(dx);
    aclrtFree(dy);
    aclrtFree(dA);
    aclblasDestroy(handle);

    aclrtResetDevice(0);
    aclFinalize();

    return 0;
}