详解FPGA如何实现FP16格式点积级联运算

作者:杨宇,Achronix资深现场应用工程师

通过使用Achronix Speedster7t FPGA中的机器学习加速器MLP72,开发人员可以轻松选择浮点/定点格式和多种位宽,或快速应用块浮点,并通过内部级联可以达到理想性能。

神经网络架构中的核心之一就是卷积层,卷积的最基本操作就是点积。向量乘法的结果是向量的每个元素的总和相乘在一起,通常称之为点积。此向量乘法如下所示:

b8b3fd69990420eb791d499bbe83d557.png

图1点积操作

该总和S由每个矢量元素的总和相乘而成,因此

d956c4b593432807ca3a7b22d793eb48.png

本文讲述的是使用FP16格式的点积运算实例,展示了MLP72支持的数字类型和乘数的范围。

此设计实现了同时处理8对FP16输入的点积。该设计包含四个MLP72,使用MLP内部的级联路径连接。每个MLP72将两个并行乘法的结果相加0c283288de17698f73357ac5e11b9b1f.png,每个乘法都是i_a输入乘以i_b输入(均为FP16格式)的结果。来自每个MLP72的总和沿着MLP72的列级联到上面的下一个MLP72块。在最后一个MLP72中,在每个周期上,计算八个并行FP16乘法的总和。

最终结果是多个输入周期内的累加总和,其中累加由i_first和i_last输入控制。i_first输入信号指示累加和归零的第一组输入。i_last信号指示要累加和加到累加的最后一组输入。最终的i_last值可在之后的六个周期使用,并使用i_last o_valid进行限定。两次运算之间可以无空拍。

  • 配置说明

c81a62d9f77c7bf64694662a23f6fbbe.png

表1 FP16点积配置表

  • 端口说明

1388012e3f56c82276cf9d6cec150e5c.png

表2 FP16点积端口说明表

  • 时序图

8b5151c3c28f1610fb51595c43b5b09f.png

图2 FP16点积时序图

其中,

864e734c3ba1b82f21aaa5bfa96620b9.png

那么,以上运算功能如何对应到MLP内部呢?其后的细节已分为MLP72中的多个功能阶段进行说明。

  • 进位链

首先请看下图,MLP之间的进位链结构,这是MLP内部的专用走线,可以保证级联的高效执行。

a60de92f402c7484e9310437c5540c40.png

图3 MLP进位链

  • 乘法阶段

下图是MLP中浮点乘法功能阶段,其中寄存器代表一级可选延迟。

dc8be038196d96cb87133cb3d4d7d4ca.png

图4 MLP乘法功能阶段框图

MLP72浮点乘法级包括两个24位全浮点乘法器和一个24位全浮点加法器。两个乘法器执行A×B和C×D的并行计算。加法器将两个结果相加得到A×B + C×D。

乘法阶段有两个输出。下半部分输出可以在A×B或(A×B + C×D)之间选择。上半部分输出始终为C×D。

乘法器和加法器使用的数字格式由字节选择参数以及和参数设置的格式确定。

浮点输出具有与整数输出级相同的路径和结构。MLP72可以配置为在特定阶段选择整数或等效浮点输入。输出支持两个24位全浮点加法器,可以对其进行加法或累加配置。进一步可以加载加法器(开始累加),可以将其设置为减法,并支持可选的舍入模式。

最终输出阶段支持将浮点输出格式化为MLP72支持的三种浮点格式中的任何一种。此功能使MLP72可以外部支持大小一致的浮点输入和输出(例如fp16或bfloat16),而在内部以fp24执行所有计算。

d9c0212dc66097d0587df2b5ad17f7ee.png

图5 MLP浮点输出阶段框图

需要强调的是本设计输入和输出都是FP16格式,中间计算过程,即进位链上的fwdo_out和fwdi_dout 都是FP24格式。具体逻辑框图如下所示:

ba7d0ddf97bbab88101c9d6c070aa23b.png

图6 FP16点积逻辑框图

MLP内部数据流示意图:

dce8b354acf8ed5d1e1e7a683aff4a57.png

图7 FP16点积在MLP内部数据流图

最终ACE的时序结果如下:

0babb7a47aa7bca5fdcf4f9f8881607c.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值