随路转换DN2NZ搬运(ISASI)
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
x |
|
x |
|
x |
|
x |
|
x |
|
x |
功能说明
随路格式转换数据搬运,适用于在搬运时进行格式转换。
函数原型
1 2 | template <typename T, bool enableSmallC0 = false> __aicore__ inline void DataCopy(const LocalTensor<T>& dst, const GlobalTensor<T>& src, const Dn2NzParams& intriParams); |
参数说明
参数名 |
描述 |
|---|---|
T |
源操作数或者目的操作数的数据类型。 |
enableSmallC0 |
SmallC0模式开关:当dValue小于等于4的时候,C0_SIZE会补齐到4 * sizeof(T) Bytes,默认不开启。 |
参数名称 |
输入/输出 |
含义 |
|---|---|---|
dst |
输出 |
目的操作数,类型为LocalTensor。 |
src |
输入 |
源操作数,类型为GlobalTensor。 |
intriParams |
输入 |
搬运参数,Dn2NzParams类型,具体参数说明请参考表Dn2NzParams结构体参数定义;具体定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。 |
参数名称 |
含义 |
|---|---|
dnNum |
传输DN矩阵的数目,取值范围:ndNum∈[0, 4095]。 |
nValue |
DN矩阵的行数,取值范围:nValue∈[0, 16384]。 |
dValue |
DN矩阵的列数,取值范围:dValue∈[0, 2^32-1]。 |
srcDnMatrixStride |
源操作数相邻DN矩阵起始地址间的偏移,取值范围:srcDNMatrixStride∈[0, 2^64-1],单位为元素。 |
srcDValue |
源操作数同一DN矩阵的相邻行起始地址间的偏移,取值范围:srcDValue∈[1, 2^64-1],单位为元素。 |
dstNzC0Stride |
DN转换到NZ格式后,源操作数中的一列会转换为目的操作数的多行。dstNzC0Stride表示,目的NZ矩阵中,来自源操作数同一列的多行数据相邻行起始地址间的偏移,取值范围:dstNzC0Stride∈[1, 65535],单位:C0_SIZE(32B)。 |
dstNzNStride |
目的NZ矩阵中,Z型矩阵相邻行起始地址之间的偏移。取值范围:dstNzNStride∈[1, 65535],单位:C0_SIZE(32B)。 |
dstNzMatrixStride |
目的NZ矩阵中,相邻NZ矩阵起始地址间的偏移,取值范围:dstNzMatrixStride∈[1, 2^32-1],单位为元素。 |
DN2NZ转换示意图如下,样例中参数设置值和解释说明如下(以half数据类型为例):
- dnNum = 2,表示传输DN矩阵的数目为2。
- nValue = 8,DN矩阵的列数,也就是矩阵的宽度为8。
- dValue = 24,DN矩阵的行数,也就是矩阵的高度为24个元素。
- srcDnMatrixStride = 96,表达相邻DN矩阵起始地址间的偏移,即:A1与C1之间的间隔,为6个DataBlock,6 * 16 = 96个元素。
- srcDValue = 48, 表示一行的所含元素个数,即为3个DataBlock, 3 * 16 = 48个元素。
- dstNzC0Stride = 6。DN转换到NZ格式后,源操作数中的一列会转换为目的操作数的多列,例如src中A1和A2为1列,dst中A1和A2被分为2列。多列数据起始地址之间的偏移就是A1和A2在dst中的偏移,偏移为6个datablock。
- dstNzNStride = 2,表达dst中第x个目的DN矩阵和第x+1个目的DN矩阵的起点的偏移,即A1与B1之间的间隔,即为2个DataBlock。
- dstNzMatrixStride = 64,表达dst中第x个目的ND矩阵和第x+1个目的ND矩阵的起点的偏移,即A1和C1之间的距离,即为4个DataBlock,4 * 16 = 64个元素。

通路说明
支持型号 |
数据通路(通过TPosition表达) |
源操作数和目的操作数的数据类型 (两者保持一致) |
|---|---|---|
Atlas 350 加速卡 |
GM -> A1/B1 |
int8_t、uint8_t、fp4x2_e2m1_t、fp4x2_e1m2_t、int16_t、uint16_t、int32_t、uint32_t、half、bfloat16_t、float |
返回值说明
无
约束说明
无
调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // dstLocal: 存放DataCopy的输出Tensor,仅支持A1/B1 // srcGlobal:存放DataCopy的输入Tensor,仅支持GM AscendC::Dn2NzParams dn2nzParams( /* dnNum */ 1, /* nValue */ 32, /* dValue */ 32, /* srcDnMatrixStride */ 0, /* srcDValue */ 32, /* dstNzC0Stride */ 32, /* dstNzNStride */ 1, /* dstNzMatrixStride */ 0 ); // 将GM中DN的格式的数据, 按照 dn2nzParams 定义的规则,转换为NZ并拷贝到A1/B1中 AscendC::DataCopy(dstLocal, srcGlobal, dn2nzParams); |