本次文章分为几个部分,主要细致介绍脉动,
何为脉动,脉动的数据是什么样子的,下图可以看做是简单的脉动单元,共有P11到P33 9个计算单元,行列数据并不是同时刻到达计算单元,而是依次进入,说白了就是像FPGAer经常说的pipiline,这里面有个关键点是cnn的乘加操作,p11计算单元会在3个节拍进来6个数据,3个节拍后,p11=3*3+2*4+2*3=23,每个计算单元在计算的同时,数据会流入下一个计算单元。
脉动的好处,我认为主要有3点
(1)增加了fpga内dsp的效率,
增加了效率是指,dsp的计算效率会提升,计算单元其实在大部分时间都是闲置的,因为会有大量的时间在进行读数据写数据的操作,而数据一旦脉动起来,则会让dsp无时无刻的都处于计算状态,这也相当于在工作频率不变的情况下,大大的增加了dsp的利用效率。
(2)布局布线更加容易
为什么说布局布线更加容易,当所有的计算单元都需要同一时刻处理数据时,eda编译器肯定会将相关PE都放在一起,至少也是保证数据到他们的时刻相同,这就对编译器具有较高的要求,而数据是脉动过来的话,则可以让编译器有更加宽裕的时间处理,布局布线也会更容易。
(3)节省资源,主要是节省lut资源
节省lut资源主要是指cnn的加操作,如果不是用脉动形式,结果会在一个周期内同时出来,如果feature map是3*3则会有9个数据同时出来,需要在同时刻将9个数据求和。这里就需要lut搭建加法树完成操作。而如果是脉动的数据方式,数据脉动出来,可以利用dsp的后加器完成计算,节省lut资源
脉动的实现部分,如何实现
后面我又在写一篇博文,专门介绍如何用verilog实现脉动计算。