DataCopyPad(ISASI)

产品支持情况

产品

是否支持

Ascend 950PR/Ascend 950DT

√

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

√

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

√

Atlas 200I/500 A2 推理产品

√

Atlas 推理系列产品AI Core

x

Atlas 推理系列产品Vector Core

x

Atlas 训练系列产品

x

功能说明

该接口提供数据非对齐搬运的功能,其中从Global Memory搬运数据至Local Memory时,可以根据开发者的需要自行填充数据。

函数原型

不同产品型号对函数原型的支持存在差异,请参考下表中的支持度信息,选择产品型号支持的函数原型进行开发。

表1 不同产品型号对函数原型的支持度

产品型号

支持的数据传输通路

是否支持设置数据搬运模式mode(搬运模式包括单次搬运对齐和整块数据搬运对齐)

Ascend 950PR/Ascend 950DT

GM->VECIN/VECOUT、GM->A1/B1、GM->TSCM、VECIN/VECOUT->GM、A1/B1->GM、VECIN/VECOUT->TSCM、 GM->VECCALC

是

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

GM->VECIN/VECOUT、VECIN/VECOUT->GM、VECIN/VECOUT->TSCM

否

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

GM->VECIN/VECOUT、VECIN/VECOUT->GM、VECIN/VECOUT->TSCM

否

Atlas 200I/500 A2 推理产品

GM->VECIN/VECOUT、VECIN/VECOUT->GM

否

参数说明

表2 模板参数说明

参数名

描述

T

操作数以及paddingValue(待填充数据值)的数据类型。

Ascend 950PR/Ascend 950DT,支持的数据类型为:bool/int8_t/uint8_t/int16_t/uint16_t/half/bfloat16_t/int32_t/uint32_t/float/complex32/int64_t/uint64_t/double/complex64

Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持的数据类型为:half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double

Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持的数据类型为:half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double

Atlas 200I/500 A2 推理产品,支持的数据类型为:int8_t/uint8_t/half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t

mode

配置数据搬运模式。PaddingMode类型,定义如下:

1
2
3
4
enum class PaddingMode : uint8_t {
    Normal = 0,  // 默认模式,与原有数据搬运格式保持一致,每次数据搬运都会补齐至32字节对齐
    Compact,     // 紧凑模式,允许单次搬运不对齐,统一在整块数据末尾补齐至32字节对齐
};
表3 接口参数说明

参数名

输入/输出

描述

dst

输出

目的操作数,类型为LocalTensor或GlobalTensor。

LocalTensor的起始地址需要保证32字节对齐。

GlobalTensor的起始地址无地址对齐约束。

src

输入

源操作数,类型为LocalTensor或GlobalTensor。

LocalTensor的起始地址需要保证32字节对齐。

GlobalTensor的起始地址无地址对齐约束。

dataCopyParams

输入

搬运参数。

  • DataCopyExtParams类型,具体参数说明请参考表4。
  • DataCopyParams类型,具体参数说明请参考表5。

padParams

输入

从Global Memory搬运数据至Local Memory时,可以根据开发者需要,在搬运数据左边或右边填充数据。padParams是用于控制数据填充过程的参数。

  • DataCopyPadExtParams类型,具体参数请参考表6。
  • DataCopyPadParams类型,具体参数请参考表7。

nd2nzParams

输入

从VECIN/VECOUT->TSCM进行数据搬运时,可以进行ND到NZ的数据格式转换。nd2nzParams是用于控制数据格式转换的参数,Nd2NzParams类型,具体参数请参考表3。

注意:Nd2NzParams的ndNum仅支持设置为1。

下文表格中列出的结构体参数定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。

表4 DataCopyExtParams结构体参数定义

参数名称

含义

blockCount

指定该指令包含的连续传输数据块个数,数据类型为uint16_t,取值范围:blockCount∈[1, 4095]。

blockLen

指定该指令每个连续传输数据块长度,该指令支持非对齐搬运,每个连续传输数据块长度单位为字节。数据类型为uint32_t,取值范围:blockLen∈[1, 2097151],blockLen必须是 sizeof(T) 的整数倍,需要注意UB不要超限。

srcStride

源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔)。

如果源操作数的逻辑位置为VECIN/VECOUT,则单位为dataBlock(32字节)。如果源操作数的逻辑位置为GM,则单位为字节。

数据类型为uint32_t,srcStride不要超出该数据类型的取值范围。

特别地,针对如下型号:

Ascend 950PR/Ascend 950DT

数据类型为int64_t,如果源操作数的逻辑位置为VECIN/VECOUT,取值范围为[0, 65535];如果源操作数的逻辑位置为GM,取值范围为[-blockLen, 2^40-1]。

dstStride

目的操作数,相邻连续数据块间的间隔(前面一个数据块的尾与后面数据块的头的间隔)。

如果目的操作数的逻辑位置为VECIN/VECOUT,则单位为dataBlock(32字节),如果目的操作数的逻辑位置为GM,则单位为字节。

数据类型为uint32_t,dstStride不要超出该数据类型的取值范围。

特别地,针对如下型号:

Ascend 950PR/Ascend 950DT

数据类型为int64_t,如果目的操作数的逻辑位置为VECIN/VECOUT,取值范围为[0, 65535];如果目的操作数的逻辑位置为GM,取值范围为[0, 2^40-1]。

rsv

保留字段。

表5 DataCopyParams结构体参数定义

参数名称

含义

blockCount

指定该指令包含的连续传输数据块个数,数据类型为uint16_t,取值范围:blockCount∈[1, 4095]。

blockLen

指定该指令每个连续传输数据块长度,该指令支持非对齐搬运,每个连续传输数据块长度单位为字节。数据类型为uint16_t,blockLen不要超出该数据类型的取值范围,blockLen必须是 sizeof(T) 的整数倍。

srcStride

源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔),如果源操作数的逻辑位置为VECIN/VECOUT,则单位为dataBlock(32字节)。如果源操作数的逻辑位置为GM,则单位为字节。数据类型为uint16_t,srcStride不要超出该数据类型的取值范围。

dstStride

目的操作数,相邻连续数据块间的间隔(前面一个数据块的尾与后面数据块的头的间隔),如果目的操作数的逻辑位置为VECIN/VECOUT,则单位为dataBlock(32字节),如果目的操作数的逻辑位置为GM,则单位为字节。数据类型为uint16_t,dstStride不要超出该数据类型的取值范围。

表6 DataCopyPadExtParams<T>结构体参数定义

参数名称

含义

isPad

是否需要填充用户自定义的数据,取值范围:true,false。

true:填充padding value。

false:表示用户不需要指定填充值,会默认填充随机值。

leftPadding

连续搬运数据块左侧需要补充的数据范围,单位为元素个数。

leftPadding、rightPadding所占的字节数均不能超过32字节。

rightPadding

连续搬运数据块右侧需要补充的数据范围,单位为元素个数。

leftPadding、rightPadding所占的字节数均不能超过32字节。

paddingValue

左右两侧需要填充的数据值,需要保证在数据占用字节范围内。

数据类型和源操作数保持一致,T数据类型。

当数据类型长度为64位时,该参数只能设置为0。

表7 DataCopyPadParams结构体参数定义

参数名称

含义

isPad

是否需要填充用户自定义的数据,取值范围:true,false。

true:填充padding value。

false:表示用户不需要指定填充值,会默认填充随机值。

leftPadding

连续搬运数据块左侧需要补充的数据范围,单位为元素个数。

leftPadding、rightPadding所占的字节数均不能超过32字节。

rightPadding

连续搬运数据块右侧需要补充的数据范围,单位为元素个数。

leftPadding、rightPadding所占的字节数均不能超过32字节。

paddingValue

左右两侧需要填充的数据值,需要保证在数据占用字节范围内。

uint64_t数据类型,且该参数只能设置为0。

下面分别给出如下场景的配置示例:

返回值说明

无

约束说明

调用示例

本示例实现了GM->VECIN->GM的非对齐搬运过程。
1
2
3
4
AscendC::DataCopyExtParams copyParams{1, 20 * sizeof(half), 0, 0, 0}; 
AscendC::DataCopyPadExtParams<half> padParams{true, 0, 2, 0};
// 从GM->VECIN搬运40字节
AscendC::DataCopyPad(dstGlobal, src0Global, copyParams, padParams); 
结果示例:
输入数据src0Global: [1 2 3 ... 32]
输出数据dstGlobal:[1 2 3 ... 20]