A 3.4-to-13.3TOPS/W 3.6TOPS Dual-Core Deep-Learning Accelerator for Versatile AI Applications in 7nm 5G Smartphone SoC
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)
Convolution Buffer Loader (CBLD)
一个4D DMA引擎,支持stride的模式,主要是从L2搬运数据到CB,也可以从SB搬运到CB(应该是为layer-fusion特性做的)。支持weight压缩。
convolution Buffers(CB)
每层输入数据的activation、weight。CB的大小对Data-reuse的性能影响较大,此处没有介绍具体大小。
CONV Data Dispatcher(CDD)
将CB的数据搬入CE,除了数据搬运,应该还支持数据格式转换。同时还有Register Banks,减少对CB的访问,一些固定或变动少的数据可以放到register中。
Convolution Engine(CE)
CE是DLA的主要网络计算单元,执行卷积计算,其中还有个小的AQU核作ASYMM-Q计算。提高了ASYMM-Q的性能。
非卷积处理器
1D Engine
激活函数(ReLu,PReLu,…)
数学计算(乘,加)
2D Engine
Pooling函数(Avg,Max),这里看不懂与1D分开的优势在哪里。在1D和2D CU之间没有直连通道。2D操作需要额外进出一次L1。个人猜测是为了减少2D CU的寄存器数量,2D操作需要缓存数据,1D到2D的数据需要先缓存足够的数据才可以计算。减少2D CU的寄存器,那就要利用L1,也就没必要增加1D到2D CU的直连通道了。
L1 用于1D 2D数据交换
4D DMA数据传输,支持stride,外存和SB之间。一个双向DMA,输出计算结果,输入应该是1D,2D引擎的参数。
控制处理器
1.Common Engine 整个DLA的控制单元,控制各个核的运行,数据的同步等。
- 加载代码
- 解码,发送指令到其他CE
- 处理数据依赖和资源冲突
简单网络计算流程
一个简单的卷积流程实例,主要表达通过减少外存访问见到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实现多层融合
多核计算
多核合作方式
处理不同操作(按网络或层划分任务)
批处理,每个核单独跑网络
按层划分每个核跑不同的层。
相同操作(层内划分任务)
数据并行,权值复用
数据复用,权值并行
总结
性能功耗对比
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论