昇腾社区首页
中文
注册
开发者
下载

接口基本信息

卷积运算的输入数据搬运由3D加载接口完成,具体操作是将滑动在特征图中的3D kernel 数据转换为矩阵数据块(称为分形块),3D加载接口也称为img2col。

假设L1中的源特征图将被转换为特征图矩阵M(水平)x K(垂直)。

表1 img2col参数说明

参数名

说明

取值范围

单位

dst

目的地址。

/

/

src

源数据地址。

/

/

stepK

从起始位置开始,沿K方向的step。

如果它没有覆盖K方向末端的分形矩阵:

b32类型应为8的倍数;

f16类型应为16的倍数;

s8类型应为32的倍数;

s4类型应为64的倍数。

[0, 2^16-1]

B

stepM

从起始位置开始,沿K方向的step。

如果它没有覆盖M方向末端的分形矩阵:

f16/s8/s4类型应为16的倍数。

[0, 2^16-1]

B

posK

目标矩阵的K方向起始位置。

b32类型应为8的倍数;

f16类型应为16的倍数;

s8类型应为32的倍数;

s4类型应为64的倍数。

[0,2^16-1]

B

posM

目标矩阵的M方向起始位置。

[0, 32767]

B

strideW

W方向stride。

[1,63]

elem

strideH

H方向stride。

[1,63]

elem

Wk

W方向卷积核尺寸(在实现空洞卷积的扩张操作前)。

[0,511]

elem

Hk

H方向卷积核尺寸(在实现空洞卷积的扩张操作前)。

[0,511]

elem

dilationW

W方向dilation大小。

[1, 255]

elem

dilationH

H方向dilation大小。

[1, 255]

elem

filterW

W方向卷积核尺寸(在实现空洞卷积的扩张操作前)(最高bit) 与Wk拼接为最终大小。

[0,1]

2^8

filterH

H方向卷积核尺寸(在实现空洞卷积的扩张操作前)(最高bit) 与Hk拼接为最终大小。

[0,1]

2^8

transpose

如果设置了此位,则整个转换后的二维特征映射矩阵将被转置。仅对DST = {L0A}和type={B16,B32}起作用,对于其他DST和类型,该参数可以忽略。

[0,1]

/

fmatrixCtrl

如果此位设置为0,则使用SPR.FMATRIX来描述此接口的特征图。

如果此位设置为1,则使用SPR.FMATRIX_B来描述此接口的特征图。

[0,1]

/

sizeChannel

通道数。

[0, 2^16-1]

elem

分形块的大小在微架构中,16*16是类型为f16的基本分形,而16*32是类型为b8的基本分形。

此外,可以通过对特殊寄存器FMATRIX进行设置,通过该寄存器对feature map进行描述。共有两个FMATRIX寄存器(FMATRIX, FMATRIX_B),可根据需要配置使用。

表2 虚拟矩阵配置

FMATRIX

位宽

说明

取值范围

Feature Map Size

[15:0]

W方向大小。

[0, 32768]

[31:16]

H方向大小。

[0, 32768]

Padding Size

[39:32]

左padding大小。

[0, 255]

[47:40]

右padding大小。

[0, 255]

[55:48]

顶部padding大小。

[0, 255]

[63:56]

底部padding大小。

[0, 255]

L1循环缓冲区支持定制化配置,其范围从L1地址0开始,到config - 1结束(单位为字节)。config的最小值为1024,若设置为1至1023之间,可能导致未知行为。该配置决定了img2col接口的访问边界。如果该接口的初始地址不在边界内,则结果未知。如果接口中更新的地址超过了边界,它将被四舍五入到循环缓冲区的起始位置。如果L1_3D_SIZE为零,则整个L1 SRAM即为循环缓冲区,设置的intrinsic接口如下:

void set_l1_3d_size(uint64_t config);