BasicConv2d Example Readme
代码组织
├── 33_basic_conv2d
│ ├── CMakeLists.txt # CMake编译文件
│ ├── README.md
│ └── basic_conv2d.cpp # 主文件
功能介绍
-
该算子完成2D版本的卷积计算
-
昇腾亲和的特征图尺寸表达是:
(N, C1, H, W, C0),其中:- N: 批量Batch大小
- C1:
C1 = CeilDiv(C, C0),其中C为输入特征图的通道数,C0为16 - H: 特征图高度
- W: 特征图宽度
- C0:
C0为16
-
昇腾亲和的卷积核尺寸表达是:
(Cin, Kh, Kw, Cout, C0),其中: -
Cin:
C1 = CeilDiv(C, C0) -
Kh: 卷积核高度
-
Kw: 卷积核宽度
-
Cout: 输出通道数
-
C0:
C0为16 -
需满足以下基础约束:
-
膨胀系数
dilations和卷积核计算步幅strides均不能为零 -
卷积核的有效感受野大小不能超过输入特征图的大小,需满足:
hi + padTop + padBottom > dilationH * (kh - 1) + 1wi + padLeft + padRight > dilationW * (kw - 1) + 1
其中
hi,wi为输入特征图的高度和宽度,kh,kw为卷积核的高度和宽度,dilationH,dilationW为上述两方向上的膨胀系数,padTop,padBottom,padLeft,padRight为上、下、左、右填充大小。
-
-
考虑到空间分配,需满足下述条件(为做区分下述公式中小写的符号为运行时常量,反之是编译期常量):
-
L1_STAGES * FmapSize + L1_STAGES * FilterSize <= L1_SIZE其中L1_STAGES在开double-buffer的情形下为2,不启用为1,L1_SIZE是512K(AtlasA2/A3),FmapSize和FilterSize的具体计算公式为:-
FmapSize = Cin1 * hi * wi * C0 * sizeof(ElementFmap),Cin1为FmapL1TileShape下的Tiling常量(输入通道数),hi和wi由FmapL1TileShape下的Ho和Wo(输出特征尺寸)可反推得到,逆运算为:hi = (Ho - 1) * strideH + dilationH * (kh - 1) + 1wi = (Wo - 1) * strideW + dilationW * (kw - 1) + 1
-
FilterSize = Cin1 * kh * kw * Cout * C0,Cin1为FilterL1TileShape下的Tiling常量(输入通道数),Cout是FilterL1TileShape下Cout(输出通道数)对齐到C0后的值
-
-
L0A_STAGES * FmapL0ASize <= L0A_SIZE, 其中FmapL1ASize具体为Ho * Wo * max(L0K, kh * kw * C0) * sizeof(ElementFmap),L0K为L0TileShape下的Tiling常量,L0A_SIZE等于64K(AtlasA2/A3) -
L0B_STAGES * FilterL0BSize <= L0B_SIZE, 其中FilterL0BSize具体为max(L0K, kh * kw * C0) * CoutL0 * sizeof(ElementFilter),L0K为L0TileShape下的Tiling常量,CoutL0是L0N对齐到C0的大小,L0B_SIZE也等于64K(AtlasA2/A3) -
Ho * Wo * Cout * sizeof(ElementOut) <= L0C_SIZE, 其中L0C_SIZE等于128K(AtlasA2/A3),Ho,Wo,Cout均为FilterL1TileShape中的Tiling常量。 (样例中ElementFmap,ElementFilter和ElementOutput为fp16类型)
-
使用示例
- 获取代码之后编译相应的算子可执行文件,可参考quickstart
- 执行算子
# 编译指定用例
bash scripts/build.sh 33_basic_conv2d
cd ./output/bin
# 可执行文件名 |Batch|Hi|Wi|Cin|Cout|kh|kw|padL|padR|padT|padB|strideH|strideW|dilationH|dilationW|Device ID
# Device ID可选,默认为0
./33_basic_conv2d 2 33 43 112 80 3 3 2 2 2 2 1 1 1 1 0
执行结果如下,表明精度验证通过。
Compare success.