增强数据搬运

函数功能

增强数据搬运接口,相比于普通数据搬运接口,在CO1->CO2通路时,通过设置DataCopyEnhancedParams参数增加随路计算,其他通路情况下,DataCopyEnhancedParams不生效,等同于普通数据搬运的功能。

函数原型

参数说明

表5 增强数据搬运接口参数说明

参数名称

输入/输出

含义

dstLocal, dstGlobal

输出

目的操作数,类型为LocalTensor或GlobalTensor。支持的数据类型为:half/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t。

srcLocal, srcGlobal

输入

源操作数,类型为LocalTensor或GlobalTensor。支持的数据类型为:half/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t。

intriParams

输入

搬运参数。DataCopyParams类型,DataCopyParams结构定义请参考表6

enhancedParams

输入

增强信息参数。 DataCopyEnhancedParams类型, DataCopyEnhancedParams结构定义如下:

struct DataCopyEnhancedParams {
    BlockMode blockMode = BlockMode::BLOCK_MODE_NORMAL;
    DeqScale deqScale = DeqScale::DEQ_NONE;
    uint64_t deqValue = 0;
    uint8_t sidStoreMode = 0;
    bool isRelu = false;
    pad_t padMode = pad_t::PAD_NONE;
    uint64_t padValue = 0;
    uint64_t deqTensorAddr = 0;
};

具体参数说明请参考表6

表6 DataCopyEnhancedParams结构参数定义

参数名称

含义

blockMode

数据搬移基本分形,BlockMode枚举类型,支持以下配置:

  • BLOCK_MODE_NORMAL: 表示传输单位为32B。当前暂不支持。
  • BLOCK_MODE_MATRIX: 表示传输单位为一个16*16的cube分形。
  • BLOCK_MODE_VECTOR: 表示传输单位为一个1*16的cube分形。
  • BLOCK_MODE_SMALL_CHANNEL: 表示传输单位为一个16*4的cube分形。当前暂不支持。
  • BLOCK_MODE_DEPTHWISE: 表示传输单位为一个16*16的cube分形,提供随路channel-split功能。当前暂不支持。

每种模式下对应的blockCount等参数单位见表7

deqScale

随路精度转换辅助参数,即量化模式,支持的量化模式取值和对应的数据类型等信息请参考表8。其中DEQ、DEQ8、DEQ16模式,需要传入deqValue量化系数;VDEQ、VDEQ8、VDEQ16模式,需要传入包含16个元素(deqValue)的量化参数向量。

deqValue

量化系数。 deqValue的配置方式请参考表9

deqTensorAddr

量化参数向量地址。deqScale为VDEQ8/VDEQ16模式时,需要传入反量化运算时的参数向量的地址。具体配置方式参考表10

sidStoreMode

用于deqScale为DEQ8/VDEQ8时配置存储模式,控制反量化结果如何存储在dst地址中。配置效果参考图1

  • 0:dst的数据存储在每个block的前半段,即每32B的高16B
  • 1:dst的数据存储在每个block的后半段,即每32B的低16B
  • 2:dst的数据存储在完整的block中,即整个32B

isRelu

配置是否可以随路做线性整流操作。

padMode

预留参数,当前暂不支持。

表7 不同blockMode对应的参数单位

blockMode

src

dst

数据类型

blockCount 单位

srcStride单位

dstStride单位

BLOCK_MODE_NORMAL

GM

A1

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

32B

32B

32B

GM

B1

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

32B

32B

32B

GM

VECIN

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

32B

32B

32B

VECOUT

GM

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

32B

32B

32B

VECIN

VECOUT

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

32B

32B

32B

BLOCK_MODE_MATRIX

CO1

CO2

half/int16_t/uint16_t

512B

512B

32B

CO1

CO2

float/int32_t/uint32_t

1024B

1024B

32B

BLOCK_MODE_VECTOR

CO1

CO2

half/int16_t/uint16_t

32B

512B

32B

CO1

CO2

float/int32_t/uint32_t

64B

1024B

32B

表8 deqScale参数列表

量化模式

src.dtype

dst.dtype

注意事项

DEQ

int32_t

half

暂不支持

DEQ

half

half

暂不支持

DEQ8

int32_t

int8_t

需要更新deqValue的对应比特位。

DEQ8

int32_t

uint8_t

DEQ16

int32_t

half

DEQ16

int32_t

int16_t

VDEQ

int32_t

half

暂不支持

VDEQ8

int32_t

int8_t

需要更新deqTensorAddr的对应比特位,同时保证DEQADDR中存储的128Byte反量化参数向量的每个元素(deqValue)都符合预期和使用限制。

针对DEQADDR存储的16个64bit的反量化元素,第i%16个反量化元素与第i个源操作数的int32_t元素进行DEQ8/DEQ16的计算。i是源操作数的索引。

同一个反量化参数向量的每一个元素的MCB标志位必须一致。

VDEQ8

int32_t

uint8_t

VDEQ16

int32_t

half

VDEQ16

int32_t

int16_t

表9 deqValue配置方式

模式

比特位数

变量名

作用介绍

DEQ8、VDEQ8、DEQ16、VDEQ16

0~31

M

32位数视为float, 作为反量化计算所需要乘的值。src为int32_t, dst为int16_t的场景下,变量M不生效。

32~35

N

4位比特位,表示范围为[1, 16](b'0000对应表示1, b'1111对应表示16)。

当模式为DEQ8、VDEQ8时,MCB标志位置为1时,将输入的值进行右移N比特位。当模式为DEQ16、VDEQ16并且dst数据类型为int16_t时,直接进行N位的右移,不受MCB标志位控制。

36

MCB标志位

Mode Control Bit。如果置为0,输入的int32_t会被直接转换为float。如果置为1,输入的int32_t会先右移N比特位,转变成int16_t,然后转换为float。

37~45

offset

9bit的整形数据,在进行反量化 src * M的计算结果后与offset进行相加。仅在DEQ8、VDEQ8模式中会用到。如果不使用offset,请置为0。

46

sign标志位

如果置为1,表明反量化结果是signed(int8);如果为置为0,表明反量化结果是unsigned(uint8)。仅在DEQ8、VDEQ8模式中会用到。

47

RELU标志位

如果置为1,对最终结果进行RELU计算;如果置为0,不进行额外计算。

  • 对于int32_t->int8_t,配置RELU时,offset必须配置成-128;
  • 对于int32_t->uint8_t,配置RELU时,offset必须配置成0。

48~63

-

预留

DEQ、VDEQ

暂不支持

表10 deqTensorAddr配置方式

比特位数

变量名

作用介绍

0~13

DEQADDR

UB中存储反量化参数向量的起始地址。该地址要满足32B对齐。反量化参数向量中的每个元素大小都为64bit。

搬运时会搬运blockCount个连续传输数据块,每个数据块的长度为blockLen。每个数据块对应一个128Byte的反量化向量。对于同一个数据块,反量化参数向量中的16个元素会被连续复用。不同的数据块,对应不同的反量化参数向量,地址会相应的偏移128B。例如:假设DEQADDR对应起始地址为A,第一个数据块的128B反量化参数向量起始地址为A,第一个数据块的128B反量化参数向量起始地址为A + 128B。

15

RELU标志位

如果置为1,对最终结果进行RELU计算;如果置为0,不进行额外计算。对于VDEQ、VDEQ8、VDEQ16模式,以该标志位为准,每个向量元素中的RELU标志位不生效。

14,16~63

-

预留

图1 sidStoreMode配置

注意事项

支持的型号

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas推理系列产品Vector Core

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

Atlas 200I/500 A2推理产品