在FPGA上执行64位乘法或除法的速度有多快?


8

当使用Xilinx Spartan 3或Virtex 5等常规FPGA时,执行双精度浮点64位乘法或除法运算需要多少个周期?

据我了解,FPGA没有硬FPU,您需要使用标准IEEE库或其他材料创建一个。这意味着它不会在单个周期内执行,因此我正在寻找一个粗略的估计,以比较100 Mhz CPU和100 MHz Spartan / Virtex FPGA的性能。

我主要对浮点运算符感兴趣,但是如果您有整数运算的经验,也将不胜感激。


3
首先,有必要澄清这个问题:您谈论的是64位MPY /除法,这意味着64位整数乘/除-然后提到FPU,这意味着双精度浮点。每种答案的详细信息都会有所不同...
Brian Drummond

2
对于一次一次的乘法,该时间可能与CPU相当或略微有利。显然,FPGA的优势在于您可以并行使用很多它们。
pjc50

Answers:


12

对于双精度FP,我尚未做到这一点,但是与实现单精度(除以乘以倒数)的单精度相同。

这些FPGA确实具有代替FPU的功能,是硬连线的DSP /乘法器模块,能够在单个周期内实现18 * 18或(Virtex-5)18 * 25乘法。较大的设备在Spartan-3或Spartan-6系列的高端设备中大约有1000种,甚至是126或180。

因此,您可以使用DSP的加法器或FPGA架构将部分乘积(其中Virtex-5执行单精度为2)中的多个分解为较小的运算。

您将在几个周期内得到一个答案-SP的3或4,DP的5个-取决于您如何构成加法器树(有时,合成器工具必须在其中添加流水线寄存器!)。

但是,这就是等待时间-因为它是流水线,吞吐量将是每个时钟周期1个结果。

对于除法,我使用查找表和二次内插法近似了一个倒数运算符。这比单精度要好,并且如果我愿意的话,可以扩展到DP(具有更多硬件)。在Spartan-6中,它需要2个BlockRams和4个DSP /乘法器,以及数百个LUT / FF对。

它的延迟是8个周期,但吞吐量又是单周期的,因此,通过将其与上述乘法器组合,可以在每个时钟周期获得一个除法。在Spartan-3中,它应该超过100MHz。在Spartan-6中,综合估计为185MHz,但在单个路由路径上为1.6ns,因此200MHz在合理范围内。

在Virtex-5中,它的平方根双胞胎也毫不费力地达到了200MHz。我有几个暑假学生尝试对其进行重新流水线处理-少于12个周期的延迟,他们接近400MHz-平方根为2.5 ns。

但是请记住,您可能有一百至一千个DSP单元?这使您的处理能力比单个FP单元高一到两个数量级。


感谢您的回答,Brian,但是您不是关于整数乘法/除法的全部答案吗?我主要对浮点数感兴趣。
TheFlash 2012年

2
不,正如我所说,单精度,表示32位浮点数。同样的原则适用于双打,但资源使用率显然更高。
Brian Drummond

5

当使用Xilinx Spartan 3或Virtex 5等常规FPGA时,执行双精度浮点64位乘法或除法运算需要多少个周期?

答案是:是的!

但是,认真地说,要提出一个数字非常困难。设计任何复杂的逻辑时,总会在不同事物之间进行权衡,没有一种方法适合所有设计。我会尽力掩盖大问题。

采用逻辑设计时,要权衡大小与速度。一个简单的例子就是单个浮点乘法器太慢。要加快速度,您只需添加第二个乘数即可。您的逻辑大小加倍,但是每秒的乘法数确实增加。但是,即使只看一个乘数,也有不同的方法可以将数字相乘。有些既快又大,另一些又小又慢。

另一个折衷方案是时钟速度与每个乘法的时钟。我可以设计一些逻辑,以在一个时钟中进行单个浮点乘法。但这还需要时钟更慢-可能慢至10 MHz。或者,我可以将其设计为与100 MHz时钟配合使用,但每次乘法需要10个时钟。整体速度是相同的(一个乘以100 ns),但是一个速度更快。

与上一段相关的是时钟速度与乘法延迟之间的权衡。逻辑设计中有一种称为流水线的技术。基本上,您需要采用大量逻辑并将其分解为较小的阶段,其中每个阶段都需要一个时钟周期才能完成。这样做的好处是,每个阶段都可以进行乘法运算,而其他阶段则可以进行其他乘法运算。例如,假设我们以10级流水线以100 MHz运行。这意味着每个乘法将花费10个时钟,但是逻辑同时也在处理10个不同的乘法!很酷的事情是它在每个时钟周期都完成一个乘法。因此,每个乘法的有效时钟为1,每个乘法只需花费10个时钟即可完成。

因此,您的问题的答案(FPGA可以以多快的速度进行乘法运算)完全取决于您。FPGA具有不同的大小和速度,您可以根据需要将许多逻辑专用于手头的任务。但是让我们看一个特定的场景...

假设我们要使用最大的Spartan-3A,而我们关心的只是32位浮点乘法。32位浮点乘法需要24x24整数乘法器和8位加法器。这需要四个专用的乘法器模块和一些通用切片(很少有人在乎)。XC3S1400A具有32个专用乘法器,因此我们可以并行执行八个浮点乘法器。关于时钟速度的非常粗略的猜测约为100 MHz。我们可以完全流水线化此设计,以便每个时钟周期可以完成四个32位浮点乘法,有效速度为每秒8亿个浮点乘法。

双精度乘法每个浮点乘法需要9个专用乘法器块,因此我们只能并行执行3个乘法-导致每秒约3亿个64位浮点乘法的速度。

为了进行比较,让我们考虑较新的Xilinx Virtex-7系列。由于专用乘法器更大,因此对于64位浮点乘法,我们仅需要6个专用乘法器块。最大部分还有1,920个专用乘法器-因此我们可以并行执行320个双精度浮点乘法。这些部分也快得多。我估计我们可以在200 MHz的频率下运行这些部分,从而使总速度达到每秒64亿个双精度浮点乘法。当然,这些芯片每个的成本约为10,000美元。

浮点除法很难快速进行。逻辑要大得多,尤其是在FPGA中,并且运行速度要慢得多。对于大多数CPU来说也是这样,因为除法指令(浮点和定点)的运行速度要慢得多。如果速度很重要,那么您要消除尽可能多的鸿沟。例如,您应该乘以0.2,而不是除以5。实际上,在许多系统上,计算倒数和进行乘法要比仅进行除法更快。

同样的权衡也适用于除法乘积-只是除法总是会比乘积慢很多,而且要大得多。


Rasberry Pi 3上的TI DSP甚至GPU都可以从FPGA上的ALU中吸走魔力。
dhchdhd

3

至少在Altera ALT_FP除法组件上,双精度64位除法(52位尾数)需要10、24或61个时钟周期(可选)。单次扩展精度可能有所不同。例如43位除法,其中指数为11位,尾数为26位,因此可以选择以下时钟输出延迟选项:8、18或35。启动ISE并检查Xilinx上的功能。


1
这些数字是延迟还是吞吐量?
Brian Drummond

可以选择双精度时钟周期吗?受什么因素影响?要使用更多/更少的块?那乘法呢?
TheFlash 2012年

1
我没有随组件参数一起移动,只是启动了一个主窗口并复制了它说的内容。可能需要阅读文档并检查gui组件提供的其他参数。因此,基本上,我现在无法同时回答这两个问题。
苏格拉底

2

没有理由不需一个周期。但是,这可能是一个相当大的周期,并且会占用大量资源...


1

我有双精度,浮点乘法和除法的实现。乘法需要13个时钟周期,而除法需要109个时钟周期。两者均通过流水线实现100%的吞吐量(每个时钟一个结果),并在Xilinx V5上以200MHz左右的速度运行。我不知道在100MHz时可以得到多少个时钟,但是二分频是一个安全的选择。

我也有单精度浮点实现,在相同情况下需要10和51个时钟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.