接口基本信息
卷积运算的输入数据搬运由3D加载接口完成,具体操作是将滑动在特征图中的3D kernel 数据转换为矩阵数据块(称为分形块),3D加载接口也称为img2col。
假设L1中的源特征图将被转换为特征图矩阵M(水平)x K(垂直)。
参数名 |
说明 |
取值范围 |
单位 |
|---|---|---|---|
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),可根据需要配置使用。
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);