FINN(四)FINN的架构和优化

4 可重构逻辑的BNN

4.1 结构

我们采用了异构流式架构,如图Figure 2所示。我们为给定的拓扑构建自定义架构,而不是在固定架构之上进行调度操作。独立的计算引擎专用于每个层,通过片上数据流进行通信。一旦前一计算引擎开始产生输出,每个计算引擎就开始计算。此外,由于BNN的紧凑模型尺寸,所有神经网络参数都保存在片上存储器中,这避免了对磁盘存储器的大多数访问,通过重叠计算和通信最小化延迟(完成对一个图像进行分类的时间),最小化启动间隔:上一个图像在计算阵列计算完成后,新图像就可以进入加速器进行计算。将层与计算阵列分开映射也可以实现异构性。通过针对每个层的要求单独定制计算阵列,我们可以避免“一刀切 所有”的低效率,获得更多可重构计算的好处。当神经网络拓扑发生变化时,需要不同的bitfile比特文件,但我们认为这对于获得的性能增益来说是可接受的。
在这里插入图片描述

根据用例,BNN加速器可能需要施加各种约束。 用户强加的约束包括FPGA和平台的选择,所需的分类吞吐量(每秒帧数(FPS)和时钟频率)。 同时,BNN拓扑限制了如何分配计算资源以获得高效的异构流体系结构。FINN提供可参数化的构建模块和控制分类吞吐量的方法,后面会对此展开进行更加详细的描述。 为了实现可移植性,我们选择了商业高级综合工具Vivado高级综合(HLS)来实现。 该工具通过高级抽象实现更快的开发周期,并提供自动流水线以满足时钟频率目标。

4.2 BNN特定优化

BNN具有多个属性,可以在不影响网络准确性的情况下实现更高效的FPGA映射,我们将在以下小节中对其进行描述。假设所描述的方法用于训练本文中的所有BNN[5],其中所有BNN层具有以下属性(除非另有说明)。

*) 对所有输入激活,权重和输出激活(完全二值化)使用1位值,其中未置位表示-1,置位表示+1。

*) 激活功能之前的批量标准化。

*) 使用激活函数 Sign(x) = {+1 if x ≥ 0, −1 if x < 0}

4.2.1 Popcount for Accumulation

BNN计算的规则和价值约束性质使得能够以更少的硬件资源计算二进制。 令Y为给定神经元的输入突触(或扇入)的数量,其中+ 1值突触输入表示为Y1,-1值突触表示为Y0。因为只有两个可能的值(- 1和+1)对于任何突触输入,Y = Y0 + Y1。 因此,通过仅计算一个值的突触数,可以推断出整个神经元的总和响应。

硬件的实际结果是二进制点乘积的求和通过popcount操作来实现,该popcount操作是计算设置位的数量而不是使用带符号算术的累加运算。 我们使用Vivado HLS进行的实验表明,与signed-accumulate相比,popcount-accumulate需要大约两倍的LUT和FF资源才能实现。 例如,当时钟Fclk = 200 MHz时,128位popcount-accumulate需要3

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值