增强数据搬运接口,相比于普通数据搬运接口,在CO1->CO2通路时,通过设置DataCopyEnhancedParams参数增加随路计算,其他通路情况下,DataCopyEnhancedParams不生效,等同于普通数据搬运的功能。
1 2 | template <typename T> __aicore__ inline void DataCopy(const LocalTensor<T>& dstLocal, const GlobalTensor<T>& srcGlobal, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams) |
该原型接口支持的数据通路和数据类型如下所示:
支持型号 |
数据通路 |
源操作数和目的操作数的数据类型 (两者保持一致) |
DatacopyEnhanceParams是否生效 |
---|---|---|---|
Atlas 训练系列产品 |
GM -> VECIN |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas 训练系列产品 |
GM -> A1/B1 |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
GM -> VECIN |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
GM -> A1/B1 |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品Vector Core |
GM -> VECIN |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
GM -> VECIN |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
GM -> A1 / B1 |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
Atlas 200/500 A2推理产品 |
GM -> VECIN |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
1 2 | template <typename T> __aicore__ inline void DataCopy(const LocalTensor<T>& dstLocal, const LocalTensor<T>& srcLocal, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams) |
该原型接口支持的数据通路和数据类型如下所示:
支持型号 |
数据通路 |
源操作数和目的操作数的数据类型 (两者保持一致) |
DatacopyEnhanceParams是否生效 |
---|---|---|---|
Atlas 训练系列产品 |
VECIN -> VECCALC, VECCALC->VECOUT |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
VECIN -> VECCALC, VECCALC->VECOUT |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
VECIN/VECCALC/VECOUT -> A1/B1 |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
CO1 -> CO2 |
half / float / int32_t / uint32_t |
是 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
VECIN -> VECCALC, VECCALC->VECOUT |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
VECIN/VECCALC/VECOUT -> TSCM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
1 2 | template <typename T> __aicore__ inline void DataCopy(const GlobalTensor<T>& dstGlobal, const LocalTensor<T>& srcLocal, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams) |
该原型接口支持的数据通路和数据类型如下所示:
支持型号 |
数据通路 |
源操作数和目的操作数的数据类型 (两者保持一致) |
DatacopyEnhanceParams是否生效 |
---|---|---|---|
Atlas 训练系列产品 |
VECOUT -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
VECOUT -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品AI Core |
CO2 -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas推理系列产品Vector Core |
VECOUT -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / float / double |
否 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
VECOUT -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
Atlas A2训练系列产品/Atlas 800I A2推理产品 |
A1/B1 -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
Atlas 200/500 A2推理产品 |
VECOUT -> GM |
int8_t / uint8_t / int16_t / uint16_t / int32_t / uint32_t / int64_t / uint64_t / half / bfloat16_t / float / double |
否 |
1 2 | template <typename T, typename U> __aicore__ inline void DataCopy(const LocalTensor<T>& dstLocal, const LocalTensor<U>& srcLocal, const DataCopyParams& intriParams, const DataCopyEnhancedParams& enhancedParams); |
支持型号 |
数据通路 |
源操作数的数据类型 |
目的操作数的数据类型 |
DatacopyEnhanceParams是否生效 |
---|---|---|---|---|
Atlas推理系列产品AI Core |
CO1 -> CO2 |
float |
half |
是 |
Atlas推理系列产品AI Core |
CO1 -> CO2 |
int32_t |
int8_t/ uint8_t / int16_t / half |
是 |
参数名称 |
输入/输出 |
含义 |
||
---|---|---|---|---|
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结构定义如下:
具体参数说明请参考表6。 |
参数名称 |
含义 |
---|---|
blockMode |
数据搬移基本分形,BlockMode枚举类型,支持以下配置:
每种模式下对应的blockLen等参数单位见表7。 |
deqScale |
随路精度转换辅助参数,即量化模式,支持的量化模式取值和对应的数据类型等信息请参考表8。其中DEQ、DEQ8、DEQ16模式,需要传入deqValue量化系数,设置deqValue的对应比特位;VDEQ、VDEQ8、VDEQ16模式,需要传入包含16个元素(deqValue)的量化参数向量,设置deqTensorAddr的对应比特位,同时保证DEQADDR中存储的反量化参数向量的每个元素(deqValue)都符合预期和使用限制。 VDEQ模式下,反量化参数向量长度为32Byte(16个half元素);其他模式下,反量化参数向量长度为128Byte(16个64bit的反量化元素)。 |
deqValue |
量化系数。 deqValue的配置方式请参考deqValue配置方式。 |
deqTensorAddr |
UB中存储反量化参数向量的起始地址。deqScale为VDEQ/VDEQ8/VDEQ16模式时,需要传入反量化运算时的参数向量的地址。该地址要满足32B对齐。 对于VDEQ模式,该地址指向32B大小的反量化参数向量,其中每个元素大小为16bit(half)。 对于VDEQ8、VDEQ16模式,反量化参数向量中的每个元素大小都为64bit。搬运时会搬运blockCount个连续传输数据块,每个数据块的长度为blockLen。每个数据块对应一个128Byte的反量化向量。对于同一个数据块,反量化参数向量中的16个元素会被连续复用。不同的数据块,对应不同的反量化参数向量,地址会相应的偏移128B。例如:假设对应起始地址为A,第一个数据块的128B反量化参数向量起始地址为A,第一个数据块的128B反量化参数向量起始地址为A + 128B。 同一个反量化参数向量的每一个元素的MCB标志位必须一致。 |
sidStoreMode |
用于deqScale为DEQ8/VDEQ8时配置存储模式,控制反量化结果如何存储在dst地址中。配置效果参考sidStoreMode配置示意图。
|
isRelu |
配置是否可以随路做线性整流操作。配置deqValue的情况下,如果该参数被置为true,那么会刷新deqValue的Relu标志位为1;如果被置为false,则不会做修改。配置deqTensorAddr的情况下,反量化参数向量元素中的Relu标志位不生效,以isRelu为准。 仅配置isRelu,不配置量化参数,即deqValue配置为DEQ_NONE场景,支持src和dst的数据类型组合如下:{half, half}, {float, float},{int32_t, int32_t},{float,half};同时配置isRelu和量化参数的场景,支持的数据类型组合参考表8。 |
padMode |
预留参数,当前暂不支持。 |
blockMode |
src |
dst |
数据类型 |
blockLen单位 |
srcStride单位 |
dstStride单位 |
---|---|---|---|---|---|---|
BLOCK_MODE_NORMAL |
GM |
A1 |
half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double |
32B |
32B |
32B |
GM |
B1 |
half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double |
32B |
32B |
32B |
|
GM |
VECIN |
half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double |
32B |
32B |
32B |
|
VECOUT |
GM |
half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double |
32B |
32B |
32B |
|
VECIN |
VECOUT |
half/bfloat16_t/int16_t/uint16_t/float/int32_t/uint32_t/int8_t/uint8_t/int64_t/uint64_t/double |
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 |
量化模式 |
src.dtype |
dst.dtype |
配合使用的参数 |
---|---|---|---|
DEQ |
int32_t |
half |
deqValue中的变量M |
DEQ |
half |
half |
|
DEQ8 |
int32_t |
int8_t |
|
DEQ8 |
int32_t |
uint8_t |
|
DEQ16 |
int32_t |
half |
|
DEQ16 |
int32_t |
int16_t |
|
VDEQ |
int32_t |
half |
deqTensorAddr地址存储的反量化参数向量中的元素deqValue支持配置的参数分别对应DEQ/DEQ8/DEQ16的说明。
|
VDEQ8 |
int32_t |
int8_t |
|
VDEQ8 |
int32_t |
uint8_t |
|
VDEQ16 |
int32_t |
half |
|
VDEQ16 |
int32_t |
int16_t |
模式 |
比特位数 |
变量名 |
作用介绍 |
---|---|---|---|
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,不进行额外计算。
|
|
48~63 |
- |
预留 |
|
DEQ、VDEQ |
0 ~ 15对应变量M, 这16位数被视为half,作为反量化计算需要乘的值。 |
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas推理系列产品Vector Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200/500 A2推理产品