接口基本信息
卷积运算的输入数据搬运由3D加载指令完成,具体操作是将滑动在特征图中的3D核窗口数据转换为矩阵数据块(称为分形块),3D加载指令也称为img2col。
参数名 |
说明 |
取值范围 |
单位 |
---|---|---|---|
dst |
目的地址 |
/ |
/ |
src |
源数据地址 |
/ |
/ |
stepK |
从起始位置开始,沿K方向进行扩展大小 如果它没有覆盖k方向末端的分形矩阵: b32类型应为8的倍数 f16类型应为16的倍数 s8类型应为32的倍数 s4类型应为64的倍数 |
[0, 2^16-1] |
B |
stepM |
从起始位置开始,M方向的扩展大小 如果它没有覆盖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 |
是否转置 |
[0,1] |
/ |
fmatrixCtrl |
如果此位设置为0,则使用SPR.FMATRIX来描述此指令的特征图 如果此位设置为1,则使用SPR.FMATRIX_B来描述此指令的特征图 |
[0,1] |
/ |
sizeChannel |
通道数 |
[0, 2^16-1] |
elem |
分形块的大小在微架构中,16x16是类型为f16的基本分形,而16x32是类型为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] |
左pad大小 |
[0, 255] |
[47:40] |
右pad大小 |
[0, 255] |
|
[55:48] |
顶部pad大小 |
[0, 255] |
|
[63:56] |
底部pad大小 |
[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);