fpga实现cnn之脉动乘法理论篇

 

本次文章分为几个部分,主要细致介绍脉动,

何为脉动,脉动的数据是什么样子的,下图可以看做是简单的脉动单元,共有P11到P33 9个计算单元,行列数据并不是同时刻到达计算单元,而是依次进入,说白了就是像FPGAer经常说的pipiline,这里面有个关键点是cnn的乘加操作,p11计算单元会在3个节拍进来6个数据,3个节拍后,p11=3*3+2*4+2*3=23,每个计算单元在计算的同时,数据会流入下一个计算单元。

 

fpga实现cnn之脉动乘法理论篇_第1张图片

 

脉动的好处,我认为主要有3点

(1)增加了fpga内dsp的效率,

增加了效率是指,dsp的计算效率会提升,计算单元其实在大部分时间都是闲置的,因为会有大量的时间在进行读数据写数据的操作,而数据一旦脉动起来,则会让dsp无时无刻的都处于计算状态,这也相当于在工作频率不变的情况下,大大的增加了dsp的利用效率。

(2)布局布线更加容易

为什么说布局布线更加容易,当所有的计算单元都需要同一时刻处理数据时,eda编译器肯定会将相关PE都放在一起,至少也是保证数据到他们的时刻相同,这就对编译器具有较高的要求,而数据是脉动过来的话,则可以让编译器有更加宽裕的时间处理,布局布线也会更容易。

 

(3)节省资源,主要是节省lut资源

节省lut资源主要是指cnn的加操作,如果不是用脉动形式,结果会在一个周期内同时出来,如果feature map是3*3则会有9个数据同时出来,需要在同时刻将9个数据求和。这里就需要lut搭建加法树完成操作。而如果是脉动的数据方式,数据脉动出来,可以利用dsp的后加器完成计算,节省lut资源

脉动的实现部分,如何实现

后面我又在写一篇博文,专门介绍如何用verilog实现脉动计算。

 

 

你可能感兴趣的:(机器学习)