Copy算子
算子概述
向量拷贝算子,实现 Y = X 的向量数据搬移。
数学表达式:
Y[i] = X[i], for i = 0, 1, ..., N-1
包含以下接口:
| 接口名 | 功能简述 |
|---|---|
| aclblasScopy | 单精度浮点向量拷贝 |
算子执行接口
aclblasScopy
产品支持情况
- Ascend 950PR / Ascend 950DT:支持
- Atlas A3 训练系列产品 / Atlas A3 推理系列产品:支持
- Atlas A2 训练系列产品 / Atlas A2 推理系列产品:支持
函数原型
aclblasStatus_t aclblasScopy(aclblasHandle_t handle, int n, const float *x, int incx, float *y, int incy);
参数说明
| 参数名 | 输入/输出 | 参数类型 | 说明 |
|---|---|---|---|
| handle | 输入 | aclblasHandle_t | ops-blas 库上下文句柄,携带 stream,Host 内存 |
| n | 输入 | int | 向量长度(元素个数),Host 内存 |
| x | 输入 | const float*(FP32) | 源向量 X,只读,Device 内存 |
| incx | 输入 | int | X 元素的步长(以 float 元素为单位),不可为 0,Host 内存 |
| y | 输出 | float*(FP32) | 目标向量 Y,可写,Device 内存 |
| incy | 输入 | int | Y 元素的步长(以 float 元素为单位),不可为 0,Host 内存 |
约束说明
- n >= 0(n < 0 时返回 INVALID_VALUE)
- incx != 0
- incy != 0
- x、y 不可为 nullptr
调用示例
#include "acl/acl.h"
#include "cann_ops_blas.h"
int main()
{
aclInit(nullptr);
aclrtSetDevice(0);
aclblasHandle_t handle;
aclblasCreate(&handle);
int64_t n = 1024;
int64_t incx = 1;
int64_t incy = 1;
uint8_t *dX, *dY;
aclrtMalloc((void**)&dX, n * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST);
aclrtMalloc((void**)&dY, n * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST);
aclblasScopy(handle, dX, dY, n, incx, incy);
aclrtStreamSynchronize(nullptr);
aclrtFree(dX);
aclrtFree(dY);
aclblasDestroy(handle);
aclrtResetDevice(0);
aclFinalize();
return 0;
}