当使用Xilinx Spartan 3或Virtex 5等常规FPGA时,执行双精度浮点64位乘法或除法运算需要多少个周期?
据我了解,FPGA没有硬FPU,您需要使用标准IEEE库或其他材料创建一个。这意味着它不会在单个周期内执行,因此我正在寻找一个粗略的估计,以比较100 Mhz CPU和100 MHz Spartan / Virtex FPGA的性能。
我主要对浮点运算符感兴趣,但是如果您有整数运算的经验,也将不胜感激。
当使用Xilinx Spartan 3或Virtex 5等常规FPGA时,执行双精度浮点64位乘法或除法运算需要多少个周期?
据我了解,FPGA没有硬FPU,您需要使用标准IEEE库或其他材料创建一个。这意味着它不会在单个周期内执行,因此我正在寻找一个粗略的估计,以比较100 Mhz CPU和100 MHz Spartan / Virtex FPGA的性能。
我主要对浮点运算符感兴趣,但是如果您有整数运算的经验,也将不胜感激。
Answers:
对于双精度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单元高一到两个数量级。
当使用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。实际上,在许多系统上,计算倒数和进行乘法要比仅进行除法更快。
同样的权衡也适用于除法乘积-只是除法总是会比乘积慢很多,而且要大得多。
至少在Altera ALT_FP除法组件上,双精度64位除法(52位尾数)需要10、24或61个时钟周期(可选)。单次扩展精度可能有所不同。例如43位除法,其中指数为11位,尾数为26位,因此可以选择以下时钟输出延迟选项:8、18或35。启动ISE并检查Xilinx上的功能。