2011-04-03 14 views
2

我是FPGA编程的新手,我对整体执行时间方面的性能有疑问。FPGA时序问题

我已经读过,延迟是按周期计算的。因此,总体执行时间=延迟*周期时间。

我想优化处理数据所需的时间,我会测量整个执行时间。

假设我有一个计算a = b * c * d。

如果我在两个周期(result1 = b * c)&(a = result1 * d)中进行计算,总体执行时间将为2 *周期时间的延迟(这是由乘法运算说价值X)= 2X

如果我在一个周期(a = b * c * d)进行计算。总体执行时间将是1 *周期时间的延迟(比如值2X,因为它具有两倍的延迟,因为两次乘法而不是一次)= 2X

因此,似乎为了优化执行方面的性能如果我只关注延迟时间,则周期时间会增加,反之亦然。是否存在潜伏期和周期时间缩短的情况,导致执行时间减少?我应该什么时候专注于优化延迟以及我应该在什么时候关注周期时间?另外,当我用C++编程时,似乎当我想优化代码时,我想优化延迟(执行所需的周期)。但是,对于FPGA编程来说,优化延迟并不充分,因为周期时间会增加。因此,我应该专注于优化执行时间(延迟*周期时间)。如果我想提高程序的速度,我是否正确?

希望有人能帮助我。提前致谢。

回答

2

我倾向于将延迟看作从第一次输入到第一次输出的时间。由于通常有一系列的数据,查看处理多个输入所需的时间是很有用的。

用你的例子,在一个循环(一个循环= 2t)中处理10个项目a = b x c x d需要20t。但是在两个1t周期内处理10个物品需要11t。

希望有所帮助。

编辑添加时间。

在一个2t周期内计算。 10个计算。

Time 0 2 2 2 2 2 2 2 2 2 2 = 20t 

Input 1 2 3 4 5 6 7 8 9 10 
Output 1 2 3 4 5 6 7 8 9 10 

计算两个1吨周期,流水线,10个计算

Time 0 1 1 1 1 1 1 1 1 1 1 1 = 11t 

Input 1 2 3 4 5 6 7 8 9 10 
Stage1 1 2 3 4 5 6 7 8 9 10 
Output  1 2 3 4 5 6 7 8 9 10 

延迟两种解决方案是2T,一个2吨周期的第一个,以及两个1吨周期为第二个。然而,第二种解决方案的通过速度是其两倍。一旦等待时间被考虑,你会在每1t周期得到一个新的答案。因此,如果你有一个复杂的计算,需要5 1t周期,那么延迟将是5t,但通过仍然是1t。

+0

嗨乔治,真的很感激你的回复。当你在一个周期中提到10个项目时,这10个项目是指什么?你如何在第一种情况下使用20t,在第二种情况下使用11t?不好意思问这样一个简单的问题,因为我浏览了网络和很多书籍,没有太多资源讨论如何计算和提高性能。谢谢。 – Steveng 2011-04-04 15:44:14

+0

我用一些时序图更新了答案。 – George 2011-04-05 09:43:20

1

乔治准确地描述了意义等待时间(这不需要涉及计算时间)。它似乎你想优化你的设计速度。这非常复杂,需要很多经验。总运行时间为

execution_time = (latency + (N * computation_cycles)) * cycle_time 

其中N是您要执行的计算次数。如果你开发的是加速,你只能计算大数据集,即N很大。通常你不会有延迟要求(可能是实时应用程序不同)。决定性因素是cycle_timecomputation_cycles。而且在这里真的很难优化,因为有一个关系。 cycle_time由您的设计的关键路径决定,并且越长,您拥有的寄存器越少。它得到的时间越长,cycle_time就越大。但是更高的寄存器是computation_cycles(每个寄存器将需要的周期数增加1)。

也许我应该补充说,延迟通常是计算周期数(它是第一次计算延迟),但理论上这可能是不同的。

2

除了等待时间和周期时间(吞吐量)之外,还需要另外一个词。即使需要2个周期才能得到答案,如果您可以在每个周期中放入新数据,并在每个周期内将其排出,则“吞吐量在一个周期内完成”的吞吐量可以增加2倍。

假设您的计算在一个周期内需要40纳秒,所以吞吐量为2500万个数据项/秒。

如果你正在管理它(这是将计算分割成多个周期的技术术语),你可以在2个20ns +的位上做一点(你必须在额外的寄存器中失去一点点) 。比方说这个位是10纳秒(这是很多,但是使得和数很容易)。所以现在需要2x25 + 10 = 50 ns => 20M items/sec。更差!但是,如果你可以使两个阶段相互独立(在你的情况下,不共享乘数),你可以每25 +一个ns将新数据推入流水线。这个“一点点”会比前一个小,但即使是整个10纳秒,您也可以以35ns的时间推动数据或接近30M items/sec,这比您开始使用时要好的多了

在现实生活中,10ns会少得多,通常是ps的100s,所以收益要大得多。

+0

这是一个很好的答案。如果您需要加快速度,请确定逻辑中的关键路径,并尝试查看是否有方法来管理逻辑的执行。如果您的时钟周期更短并有助于提高吞吐量,则更多的时钟周期不一定是坏事。 – 2011-04-04 13:33:42