MTK NPU Dimensity 1000

A 3.4-to-13.3TOPS/W 3.6TOPS Dual-Core Deep-Learning Accelerator for Versatile AI Applications in 7nm 5G Smartphone SoC

论文出处 ISSCC2020-07_visuals.pdf

Dimensity 1000是MTK的首款真正的AI芯片,通过ISSCC论文PPT看了一下架构,在这里做一下记录:

整体架构如下图所示

从图上看,Dimensity1000采用双DLA核,与业界的趋势一致,采用双核提高算力。两个DLA可以直接通信,不需要AP_MCU的参与,提高了通信速度。

每个DLA中有:

四个处理单元: CE, 1DE,2DE,CMDE。

两个L1 Buffer,一个L2 Buffer。

两个DMA: CBLD,SBDMA

下面详细的看一下每个单元的功能:

主要的处理单元 Convolution Engine(CE)

  1. Convolution Buffer Loader (CBLD)

    一个4D DMA引擎,支持stride的模式,主要是从L2搬运数据到CB,也可以从SB搬运到CB(应该是为layer-fusion特性做的)。支持weight压缩。

  2. convolution Buffers(CB)

    每层输入数据的activation、weight。CB的大小对Data-reuse的性能影响较大,此处没有介绍具体大小。

  3. CONV Data Dispatcher(CDD)

    将CB的数据搬入CE,除了数据搬运,应该还支持数据格式转换。同时还有Register Banks,减少对CB的访问,一些固定或变动少的数据可以放到register中。

  4. Convolution Engine(CE)

    CE是DLA的主要网络计算单元,执行卷积计算,其中还有个小的AQU核作ASYMM-Q计算。提高了ASYMM-Q的性能。

非卷积处理器

  1. 1D Engine

    激活函数(ReLu,PReLu,…)

    数学计算(乘,加)

  2. 2D Engine

    Pooling函数(Avg,Max),这里看不懂与1D分开的优势在哪里。在1D和2D CU之间没有直连通道。2D操作需要额外进出一次L1。个人猜测是为了减少2D CU的寄存器数量,2D操作需要缓存数据,1D到2D的数据需要先缓存足够的数据才可以计算。减少2D CU的寄存器,那就要利用L1,也就没必要增加1D到2D CU的直连通道了。

  3. L1 用于1D 2D数据交换

  4. 4D DMA数据传输,支持stride,外存和SB之间。一个双向DMA,输出计算结果,输入应该是1D,2D引擎的参数。

控制处理器

1.Common Engine 整个DLA的控制单元,控制各个核的运行,数据的同步等。

  1. 加载代码
  2. 解码,发送指令到其他CE
  3. 处理数据依赖和资源冲突

简单网络计算流程

一个简单的卷积流程实例,主要表达通过减少外存访问见到latency,提高性能。

数据复用

数据复用,CE规格: CUCUGCores=32162

数据复用可以减少50%的weight对CB的访问,减少16%的数据CB访问。(不太理解16%怎么算的)

AQ 量化

权重压缩和跳零

支持权值压缩和跳零,降低87%的带宽和71%的计算量。权重压缩是全网络支持。跳零只是在FC层支持

tile方式降低带宽

通过输出Tile方向降低带宽

​ C Chanel 优先,可以data复用,weight reload

​ X-Y Chanel 优先,可以weight复用,data reload。

​ 可以指定优先方式,也可以编译自动搜索。

layer fusion 降低带宽

多层融合降低带宽

先遍历层,利用网络中Featuremaps生命周期端的层。(看不懂,depthwise,pointwise)

DLA 本身支持两层融合

通过L2实现多层融合

多核计算

多核合作方式

处理不同操作(按网络或层划分任务)

  1. 批处理,每个核单独跑网络

  2. 按层划分每个核跑不同的层。

相同操作(层内划分任务)

  1. 数据并行,权值复用

  2. 数据复用,权值并行

总结

性能功耗对比


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论

×

喜欢就点赞,疼爱就打赏