CANN/asc-devkit数据填充Duplicate API
Duplicate
产品支持情况
功能说明
将一个变量或立即数复制多次并填充到向量中。
针对Ascend 950PR/Ascend 950DT,为方便开发者使用,tensor前n个数据计算接口同时也支持直接传入Tensor,此时会将Tensor的第一个元素复制多次并填充到向量中。
函数原型
-
tensor前n个数据计算
-
源操作数为标量
template <typename T> __aicore__ inline void Duplicate(const LocalTensor<T>& dst, const T& scalarValue, const int32_t& count) -
源操作数为Tensor
template <typename T> __aicore__ inline void Duplicate(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t& count)
-
-
tensor高维切分计算
-
mask逐比特模式
template <typename T, bool isSetMask = true> __aicore__ inline void Duplicate(const LocalTensor<T>& dst, const T& scalarValue, uint64_t mask[], const uint8_t repeatTime, const uint16_t dstBlockStride, const uint8_t dstRepeatStride) -
mask连续模式
template <typename T, bool isSetMask = true> __aicore__ inline void Duplicate(const LocalTensor<T>& dst, const T& scalarValue, uint64_t mask, const uint8_t repeatTime, const uint16_t dstBlockStride, const uint8_t dstRepeatStride)
-
参数说明
表 1 模板参数说明
|
Ascend 950PR/Ascend 950DT,支持的数据类型为:bool、int8_t、uint8_t、fp4x2_e2m1_t、fp4x2_e1m2_t、 hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、 fp8_e8m0_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、complex32、int64_t、uint64_t、complex64。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 ,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。 Atlas 200I/500 A2 推理产品 ,支持的数据类型为:int16_t、uint16_t、half、int32_t、uint32_t、float。 Atlas 推理系列产品 AI Core,支持的数据类型为:int16_t、uint16_t、half、int32_t、uint32_t、float。 Atlas 训练系列产品 ,支持的数据类型为:int16_t、uint16_t、half、int32_t、uint32_t、float。 |
|
|
表 2 参数说明
|
类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 |
||
|
类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。 |
||
|
mask用于控制每次迭代内参与计算的元素。
|
||
|
矢量计算单元,每次读取连续的8个datablock(每个block32Bytes,共256Bytes)数据进行计算,为完成对输入数据的处理,必须通过多次迭代(repeat)才能完成所有数据的读取与计算。repeatTime表示迭代的次数。 |
||
约束说明
- 操作数地址对齐要求请参见通用地址对齐约束。
- 针对Ascend 950PR/Ascend 950DT,bool、int8_t、uint8_t、fp4x2_e2m1_t、fp4x2_e1m2_t、hifloat8_t、fp8_e5m2_t、fp8_e4m3fn_t、 fp8_e8m0_t、complex32、int64_t、uint64_t、complex64数据类型仅支持tensor前n个数据计算接口。
返回值说明
无
调用示例
本示例仅展示Compute流程的部分代码。如需运行,请将代码段复制并粘贴到Duplicate样例中的Compute函数对应位置。
-
tensor高维切分计算样例-mask连续模式
uint64_t mask = 128; half scalar = 18.0; // repeatTime = 2, 128 elements one repeat, 256 elements total // dstBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 8, no gap between repeats AscendC::Duplicate(dstLocal, scalar, mask, 2, 1, 8 ); -
tensor高维切分计算样例-mask逐bit模式
uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; half scalar = 18.0; // repeatTime = 2, 128 elements one repeat, 256 elements total // dstBlkStride = 1, no gap between blocks in one repeat // dstRepStride = 8, no gap between repeats AscendC::Duplicate(dstLocal, scalar, mask, 2, 1, 8 ); -
tensor前n个数据计算样例,源操作数为标量
half inputVal(18.0); int32_t srcDataSize = 256; // 参与计算的元素个数 AscendC::Duplicate<half>(dstLocal, inputVal, srcDataSize); -
tensor前n个数据计算样例,源操作数为Tensor
AscendC::Duplicate<half>(dstLocal, srcLocal, srcDataSize);
结果示例如下:
scalar: 18.0
srcLocal: [18.0 1.0 2.0 ... 254.0 255.0]
dstLocal: [18.0 18.0 18.0 ... 18.0 18.0]
更多推荐



所有评论(0)