查看原文
其他

追求极限性能的芯片设计方法(三)

2017-06-11 吴臻志 StarryHeavensAbove

前情提示

追求极限性能的芯片设计方法(二)”中已经提及,提高效率e的一个主要方法是时序图法。这个方法我们需要做的就是将所需运算映射到数据通路的“器件-时间”二维平面里,填得越满效率越高。具体而言就是在满足变量的依赖关系下,并行通路个数一定时,尽量缩短横轴时钟个数。


这一部分将以一个简单的例子出发,阐述如何实现极限量化设计

     

一个积分发放电路的极限效率设计

我们考虑一个简单的例子,将存储器中的数据求和,将和值与一个阈值进行比较,如果大于阈值(常数)则输出FireEn=1,否则输出FireEn=0。这个模型被称为积分发放模型,是简单的神经网络模型之一,FireEn代表是否发放。这个例子中,存储器输出数据Di,Di求和得到Sum,Sum比较后得到FireEn。

图1. 积分发放电路的数据流图

首先分析这个系统的配平情况,如果我们希望获得最快的运算速度,那么Sum和Cmp可以用一个时钟计算出来,此时D0~D3需要并行提供。此时需要的存储器是具有多输出能力的,例如一系列寄存器。Sum可以采用三个加法器构成的倒三角求和器实现。

如果RAM每个时钟只能输出一个数据,即D0~D3只能串行得到,那么虽然Sum还可以采用倒三角求和器实现,可以在一个等效时钟内求和所有的输入,但受限于输入的速率,这样做会造成效率只有峰值效率的1/3。而使用累加器(一个带寄存器的加法器)实现更为合适。此时峰值效率与实际效率一致。

图2. 积分发放电路的数据流图

根据上图的数据流图,编排的数据通路时序图如下图所示。可看到PE 1和PE 2在Body部分已经达到了满效率,PE 3由于数据依赖,大部分时间空闲,但已经达到了流水线尽量满,横轴尽量短的需求,因此整体设计是合理的。

图3. 数据通路的时序图

当然,对于一个复杂的设计,数据通路很多,数据相互依赖比较强,需要更多的安排。

     

基于时序图法的完整电路设计过程

上文已经阐述了如何设计数据通路,这部分将从一个系统完整设计流程出发,阐述一下如何采用时序图法设计一个完整的电路系统。


(1)设计的输入

时序图法的输入有两个:

1.需要实现的计算程序或算法的伪代码;

2.给出的基础硬件架构(可选)和性能指标需求。

 其中,计算程序或算法的伪代码应该是已经整理过的硬件友好的代码,这部分今后再作详细阐述。总之,一个理想的伪代码是暴露了并行度、暴露了数据依赖关系、运算/内存访问/控制分离、具有简单的循环和跳转规则、没有复杂运算、量化到低精度定点的代码。而最重要的是第一项。要达到这个效果,一般原型代码是不行的,需要经过有经验的固件工程师整理才可以。

为什么这里边还有给出的硬件架构呢?因为当前的设计一般都不是单个功能的设计,或者独立的设计,因此通常会在一个已经草拟的初定框架下进行这个新功能的映射。这个初定框架可能包括内存情况、模块划分方案、接口物理约束、已有的数据通路和控制逻辑、数据源的动态特性等等。

 

(2)设计的输出

时序图法的输出有几个:

1.早期量化评估;

2.电路基本的逻辑连接关系,用于进一步设计电路图;

3.时序图,用于功能仿真时的时序波形验证。

 

(3)基于时序图法的完整电路设计步骤

a.画出数据依赖关系图(DFG);

b.标示出每个节点的计算延迟,找出关键路径;

c.如果前两者无法表达,例如具有选择、计数、循环等逻辑,请加入状态机和计数器后再次考虑(a),(b);

d. 找一个二维方格纸,将数据计算过程及相互影响关系标示出来,首先安排关键路径,之后安排与之相关的其他数据通路;

e. 根据关键路径(流水线)上各个子步骤的计算量需求,配平各个子模块的并行度,设计速率均衡的通路;

f. 在二维方格纸上推导内存读写使能和地址信息;

g. 在二维方格纸上标志出控制逻辑输出;

h. 根据控制逻辑输出需求和状态机情况,构建出控制逻辑。

 

例如,积分发放模型例子的完整时序图如图4所示。由图我们可以看到,我们先配置数据通路,之后标定状态机和状态计数器。数据通路确定后确定内存地址和使能。之后确定控制逻辑。最后考虑接口的数据通路与输入输出控制信号。前文已经提过,系统的效率只需要在数据通路映射和内存映射做完,就知道了。因此我们可以在早期只做数据通路映射和内存映射两部分。尤其的,如果数据通路映射完就感觉性能已经不够了,那么内存映射也不需要做,因为内存映射做完效率只会降低不会升高。

 

另外,图4为了表示出所有的数据依赖关系,因此画出了所有的箭头,实际使用时,可以只标示重要的依赖关系,从而让整个表格更加整洁。另外,行间也是可以互换的,可以将相关的控制、内存访问和数据通路信号放在相邻的行。

图4. 基于时序图法设计出的完整的时序逻辑

绘制完完整的时序图,就可以进行下边的步骤,一个是电路图的绘制和RTL描述实现,另一个是通过高层模型产生测试用例(黄金向量和对比向量)。之后搭建仿真平台进行功能验证,对比仿真的时序图和预设计的时序图是否一致,并对时序图进行修改补充。

 更复杂的设计往往需要从高层模型衍生出更多的抽象层模型,依照时序图暴露的并行度和计算次序,书写伪码,最为精确的伪码是时钟精确模型。我们将在今后的高级设计方法中提及这些内容。

总  结

本文从一个具体的例子-积分发放电路出发,解释了采用时序图法进行效率优化设计的详细过程和完整流程。是系列文章(二)所提及的效率极限设计方法的具体案例。系列文章(四)将详细阐述各种引起性能下降的原因的排查与分析,敬请大家关注。


作者简介

吴臻志博士,清华大学类脑计算研究中心助理研究员。专长通信基带专用处理器和信道译码加速器设计,神经网络和神经形态芯片设计。邮件:wuzhenzhi@gmail.com

同行及朋友可加微信:zhenzhi-wu


题图来自网络,版权归原作者所有

推荐阅读  

追求极限性能的芯片设计方法(一)

追求极限性能的芯片设计方法(二)

AI芯片架构的争论真有意义吗?

专用处理器设计方法&工具

从Nvidia开源深度学习加速器说起

Nvidia Volta - 架构看点

AI会给芯片设计带来什么?

如何做神经网络处理器的需求分析?

深度神经网络的模型·硬件联合优化

脉动阵列 - 因Google TPU获得新生

长按二维码关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存