沈阳做企业网站的,租一个服务器建网站多少钱,无锡做百度网站,报价小程序制作引言由于卷积核数据在计算过程中保持不变#xff0c;更新较慢。这样就可以利用LUT来存储权重并同时进行乘法运算。LUT乘法器的实现很早就已经研究过#xff0c;本论文正是在此基础上#xff0c;提出了用于实现可配置的卷积实现方法。基于LUT的乘法器不会受到FPGA中DSP资源的… 引言由于卷积核数据在计算过程中保持不变更新较慢。这样就可以利用LUT来存储权重并同时进行乘法运算。LUT乘法器的实现很早就已经研究过本论文正是在此基础上提出了用于实现可配置的卷积实现方法。基于LUT的乘法器不会受到FPGA中DSP资源的限制能够将神经网络加速应用于低端FPGA芯片。01LUT乘法器的实现一个LUT有固定的输入和输出管脚例如在xilinx的zynq系列器件中LUT有5个输入1个输出或者4个输入两个输出。如何用LUT来实现任意大小的乘法运算呢这里用到了一个基本的数学法则因式分解。考虑一个补码数据x其有Bi bit那么表示为如果这个数被一个常数c乘这个乘法可以被分解为更小bit的乘法然后对这些小份乘法进行位移和求和。这样就将一个BcxBi bit的乘法分解成多个BcxL的乘法而这个小的乘法就可以去利用LUT来实现。将L设置为LUT的输入引脚数量可以直接将乘法映射到LUT上并且对LUT资源利用效率最高。02Compressor加法树上述乘法的分解造成了大量的加法因此需要较大的加法树来完成各个乘法结果移位后的累加。基于Generalized parallel counters(GPC)充分利用了FPGA中的LUT资源以及进位链可以更好的映射到LUT上减少LUT使用的浪费。其主要特点就是在一个LUT中实现最多个全加器的运算这样能保证进位链最短LUT资源利用率最高。图2.1 乘法分解求和03可配置LUTLUT是一个查找表FPGA中对代码逻辑的映射都是映射到查找表中。现代的LUT有个特点就是可以进行动态配置意味着可以在运行中去更新查找表的值。比如在xilinx的virtexspartan和zynq器件中LUT就可以通过移位寄存器的方式来更新内部数据32个时钟周期完成。这样就可以将卷积核数据存放在LUT中然后在需要更新的时候进行更新。04可配置卷积的硬件架构卷积运算的结构如图4.1所示N个输入数据(x1, x2, .., xN)每个和c的乘法都被分解为K个乘法然后将所有的部分乘法结果移位送入加法树。每个BcXL的乘法需要的LUT数量大致为BcL个。加法树输出的Bo位宽会远远大于输入位宽因此需要进行rouding或者截位。图4.1 基于LUT的卷积运算结构论文中使用了LUT4输入2输出使用4输入LUT而不是5输入是因为乘法分解的特点4bit位宽对于16bit8bit整型乘法来说更能充分利用LUT资源。这样N个输入数据的每个部分乘法总共花费的LUT数量就是乘法和加法导致输出Bo位宽变大需要减小位宽。论文采用了faithful rouding的办法。比如输入是12bit的数据要求输出也要截位成12bit如果在最后求和之后再进行截位加法树中就因为计算多余位数求和而浪费LUT。如果每个乘法结果都截位为12那么会造成最后结果精度较大丢失。如果先对每个乘法结果截位大于12bit的数据根据总共求和的个数可以计算出需要保留的bit位数。这样就能够保证最后加法结果精度等于或者小于直接截位加法结果的精度。比如开始对每个乘法截位2^(-q-g)因为总共有N*Bi/L个部分积结果。所以总共的精度损失为通过限制总精度损失在需要范围这样就可以得到g的数据。这样就能最大程度减少LUT的使用同时能保证良好精度。图4.2 3个输入xbit位宽12bit分解为4个乘法输出要求12bit现在来看如何对LUT进行数据的更新。由于将LUT用作4输入2输出那么一个LUT可以计算出2bit结果的乘法。于是计算需要的每个个LUT的一部分用于和weights的偶数部分进行乘法而另一部分用于和weights的奇数部分乘法。而LUT的配置接口只有一个CDI因此就需要分别对LUT的这两部分进行配置。论文中先计算对应奇数部分weights的乘法结果存储到LUT中然后计算对应偶数部分weihts的乘法存储到LUT中。图4.3 动态配置LUT电路图从上述架构中可以看到当进行LUT配置的时候LUT是无法进行计算的。这个很好解决可以通过增加双倍LUT来实现对没有计算的LUT来进行动态配置而另一部分LUT进行计算。这样相当于进行了ping-pong操作。图4.4 双LUT结构进行计算05结果下图给出了不同卷积核大小以及不同位宽所需要的资源对比。相比于其他使用LUT来进行乘法和加法操作的方式来说这样更能最大化利用LUT资源。图5.1 综合后资源对比总结论文中提出的可配置卷积运算架构可以改善CNN在FPGA的应用。充分利用了LUT资源可以更好的改善时序性能。文献1 Hardieck, M., et al., Reconfigurable Convolutional Kernels for Neural Networks on FPGAs, in Proceedings of the 2019 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays - FPGA 19. 2019.往期回顾1 用LUT来搭建乘法器2 在FPGA中实现高效的compressor加法树3 可变位宽的大规模矩阵乘法方法公众号AI加速用FPGA做有趣的事