脉动阵列,本身的核心概念就是让数据在运算单元的阵列中进行流动,减少访存的次数。
脉动阵列使得结构更加规整,布线更加统一,提高频率。
脉动阵列架构
上图中上半部分是传统的计算系统的模型。一个处理单元(PE
)从存储器(memory
)读取数据,进行处理,然后再写回到存储器。这个系统的最大问题是:数据存取的速度往往大大低于数据处理的速度。因此,整个系统的处理能力(MOPS
,每秒完成的操作)很大程度受限于访存的能力。脉动阵列架构用了一个很简单的方法:让数据尽量在处理单元中多流动一会儿。正如上图的下半部分所描述的,第一个数据首先进入第一个PE,经过处理以后被传递到下一个PE,同时第二个数据进入第一个PE。以此类推,当第一个数据到达最后一个PE,它已经被处理了多次。所以,脉动架构实际上是多次重用了输入数据。因此,它可以在消耗较小的memory
带宽的情况下实现较高的运算吞吐率。当然,脉动架构还有其它一些好处,比如模块化的设计容易扩展,简单和规则的数据和控制流程,使用简单并且均匀的单元(cell
),避免了全局广播和扇入(fan-in
),以及快速的响应时间等等。
总结起来,脉动阵列架构有几个特征:
- 由多个同构的
PE
构成,可以是一维或二维,串行、阵列或树的结构(现在我们看到的更多的是阵列形式); PE
功能相对简单,系统通过实现大量PE
并行来提高运算的效率;PE
只能向相邻的PE
发送数据(在一些二维结构中,也可能有对角线方向的数据通道)。数据采用流水线的方式向“下游”流动,直到流出最后的PE
。
因此,脉动阵列架构是一种很特殊的设计,结构简单,实现成本低。但它灵活性较差,只适合特定运算。特别适合于卷积运算与矩阵运算。
脉动阵列实现矩阵乘法
- 脉动阵列矩阵乘法示意图
- 源码实现
1 |
|