切片数据搬运

产品支持情况

产品

是否支持

Ascend 950PR/Ascend 950DT

√

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

√

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

√

Atlas 200I/500 A2 推理产品

x

Atlas 推理系列产品AI Core

√

Atlas 推理系列产品Vector Core

x

Atlas 训练系列产品

x

功能说明

支持数据的切片搬运,提取多维Tensor数据的子集进行搬运。

函数原型

各原型支持的具体数据通路和数据类型,请参考支持的通路和数据类型。

参数说明

表1 模板参数说明

参数名

描述

T

源操作数和目的操作数的数据类型。支持的数据类型请参考支持的通路和数据类型。

表2 切片数据搬运接口参数说明

参数名称

输入/输出

含义

dst

输出

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

src

输入

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

srcSliceInfo/dstSliceInfo

输入

目的操作数/源操作数切片信息,SliceInfo类型。

具体定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。

dimValue

输入

操作数维度信息,默认值为1。

表3 SliceInfo结构参数说明

参数名称

含义

startIndex

切片的起始元素位置。

endIndex

切片的终止元素位置。

stride

切片的间隔元素个数。

burstLen

横向切片,每一片数据的长度,仅在维度为1时生效,超出1维的情况下,必须配置为1,不支持配置成其他值。单位为datablock(32B)。比如,srcSliceInfo的List为 {{16, 70, 7, 3, 87}, {0, 2, 1, 1, 3}},{16, 70, 7, 3, 87}表示第一维的切片信息,burstLen设置为3,表示一个切片数据段大小为3个datablock; {0, 2, 1, 1, 3}为第二维的切片信息,burstLen仅能设置为1。

shapeValue

当前维度的原始长度。单位为元素个数。

通过具体的示例对上述参数进行解析,示意图如下:

图1 参数解析示意图

返回值说明

无

约束说明

支持的通路和数据类型

下文的数据通路均通过逻辑位置TPosition来表达,并注明了对应的物理通路。TPosition与物理内存的映射关系见表1。

表4 Global Memory -> Local Memory具体通路和支持的数据类型

产品型号

数据通路

源操作数和目的操作数的数据类型(两者保持一致)

Ascend 950PR/Ascend 950DT

GM -> VECIN(GM -> UB)

bool、int8_t、uint8_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、double、complex64

Atlas 推理系列产品AI Core

GM -> VECIN(GM -> UB)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、float

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

GM -> VECIN(GM -> UB)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float

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

GM -> VECIN(GM -> UB)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float

表5 Local Memory -> Global Memory具体通路和支持的数据类型

产品型号

数据通路

源操作数和目的操作数的数据类型(两者保持一致)

Ascend 950PR/Ascend 950DT

VECOUT -> GM(UB -> GM)

bool、int8_t、uint8_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、double、complex64

Atlas 推理系列产品AI Core

VECOUT、CO2 -> GM(UB -> GM)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、float

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

VECOUT -> GM(UB -> GM)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float

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

VECOUT -> GM(UB -> GM)

int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float

调用示例

srcSliceInfo、dstSliceInfo参数解析与结果示例请参考图1。

// srcLocal为float类型的LocalTensor,srcGlobal、dstGlobal为float类型的GlobalTensor
uint32_t dimValue = 2; // 操作数维度为2
AscendC::SliceInfo srcSliceInfo[] = {{16, 70, 7, 3, 87}, {0, 2, 1, 1, 3}};
AscendC::SliceInfo dstSliceInfo[] = {{0, 47, 0, 3, 48}, {0, 1, 0, 1, 2}};
// Global Memory -> Local Memory
AscendC::DataCopy(srcLocal, srcGlobal,  dstSliceInfo, srcSliceInfo, dimValue);
// Local Memory -> Global Memory
AscendC::DataCopy(dstGlobal, srcLocal, dstSliceInfo, dstSliceInfo, dimValue);