设计思路

本节以BatchNorm算子为例,介绍通过TIK方式进行算子开发的设计思路。

算子分析

BatchNorm算子主要包括以下两部分:

本样例重点关注的是算子动态shape场景,因此仅实现了归一化处理部分。

算子规格

确定BatchNorm算子设计规格。

参数

规格

支持框架

Caffe

格式

单算子调用场景设计,采用NCHW格式。

输入数据类型

用户自行设计。当前样例为float16。

N

用户自行设计。当前样例支持单Batch,即N=1。

C

用户自行设计。当前样例为0~1024通道。

H

用户自行设计。当前样例为0~1024像素。

W

用户自行设计。当前样例为0~1024像素。

shape

支持任意shape。

Tiling设计

BatchNorm算子Tiling方案设计为:

场景划分

策略

C通道并行度占优,C > H*W

Tiling_1:按照C通道方向并行逐像素点计算,通道设计需考虑32Byte对齐,采用Pingpong以及多核优化技术。

单通道HW并行度占优,C < H*W

Tiling_2:单featuremap的H*W*C(C=2)>112KB时,则一次最多能搬运1个通道,按照单通道方向切分featmap来计算BN,考虑Global MemoryUnified Buffer间PingPong操作。

说明:112KB是结合pingpong流水线考虑后的Size值,为Unified Buffer空间的一半并保留一定大小的Buffer缓存空间,下文不再赘述。

Tiling_3:单featuremap的H*W*C(C>1) <= 112KB时,一次可搬运多个通道,Global MemoryUnified Buffer间pingpong操作,不同通道间可考虑多核优化。

下面分别介绍各种场景的详细设计思路: