脉动阵列的深入
传统卷积使用K个LineBuffer也就是K个shifter来将数据流进行二维并行化,实际上是传统的一维串并转化(使用移位寄存器进行转化)的二维拓展,这种并行暂时叫做结构并行
而脉动阵列的实质上是一个二维流水线的形式,为什么呢
图中的每一个数据传播路径上均有一个reg,因此每一个PE实际上是在单独计算的,和其他的PE的数据流可以使用reg隔开。如果我们只看行或者列方向,可以看到它就是一个一维流水线。所以实际上脉动阵列是被切割成了9个任务的二位流水线。
我们知道流水线形式并行和结构并行的最大区别是流水线并行更加灵活,它的每一个小任务的数据流是可控的,同时它的并行度也是可控的(下图)。而结构并行的数据流完全来自依赖于输入的数据,在数据形式不符合并行结构时,性能的损失十分巨大。
同时
图中上半部分是传统的计算系统的模型。一个处理单元(PE)从存储器(memory)读取数据,进行处理,然后再写回到存储器。这个系统的最大问题是:数据存取的速度往往大大低于数据处理的速度。因此,整个系统的处理能力(MOPS,每秒完成的操作)很大程度受限于访存的能力。这个问题也是多年来计算机体系结构研究的重要课题之一,可以说是推动处理器和存储器设计的一大动力。而脉动架构用了一个很简单的方法:让数据尽量在处理单元中多流动一会儿。
正如上图的下半部分所描述的,第一个数据首先进入第一个PE,经过处理以后被传递到下一个PE,同时第二个数据进入第一个PE。以此类推,当第一个数据到达最后一个PE,它已经被处理了多次。所以,脉动架构实际上是多次重用了输入数据。因此,它可以在消耗较小的memory带宽的情况下实现较高的运算吞吐率