我是FPGA编程的新手,我对总体执行时间方面的性能有一个问题。
我读到过延迟是按周期时间计算的。因此,总体执行时间=延迟*周期时间。
我想优化处理数据所需的时间,我将测量总体执行时间。
假设我有一个计算a=b*c* d。
如果我让它在两个周期内计算(result1 =b* c) & (a = result1 * d),那么总的执行时间将是2*周期时间的延迟(由乘法操作的延迟决定,比方说值X) = 2X
如果我在一个周期内进行计算(a=b*c* d)。总体执行时间将是1*周期时间的延迟(比方说值2X,因为由于两次乘法而不是一次乘法,它具有两倍的延迟)= 2X
因此,似乎为了在执行时间方面优化性能,如果我只关注减少延迟,周期时间将增加,反之亦然。是否存在延迟和周期时间都可以减少的情况,从而导致执行时间减少?什么时候应该专注于优化延迟,什么时候应该专注于周期时间?
此外,当我在C++中编程时,似乎当我想要优化代码时,我想要优化延迟(执行所需的周期)。然而,对于FPGA编程来说,优化延迟似乎是不够的,因为周期时间会增加。因此,我应该专注于优化执行时间(延迟*周期时间)。如果我想提高程序的速度,我这样说对吗?
希望有人能帮我解决这个问题。提前谢谢。
发布于 2011-04-04 17:10:22
我倾向于认为延迟是从第一次输入到第一次输出的时间。由于通常有一系列数据,因此查看一个接一个地处理多个输入所用的时间是很有用的。
在您的示例中,在一个周期(一个周期= 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两个1t周期内的计算,流水线方式,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,第一个是一个2t周期,第二个是两个1t周期。然而,第二个解决方案的吞吐量是前者的两倍。一旦考虑到延迟,每1t周期就会得到一个新的答案。
因此,如果您有一个复杂的计算,需要5个1t周期,那么延迟将是5t,但吞吐量仍然是1t。
发布于 2011-04-04 20:39:44
除了延迟和周期时间之外,您还需要另一个词,即吞吐量。即使需要2个周期才能得到答案,如果您可以在每个周期中放入新数据,并在每个周期中将其取出,则您的吞吐量可以比“在一个周期内完成所有操作”提高2倍。
假设您的计算在一个周期内需要40 ns,因此每秒2500万个数据项的吞吐量。
如果你使用流水线(这是将计算拆分成多个周期的技术术语),你可以在2批20 is +一点(你必须进入的额外寄存器中损失一点)中完成它。比特是10 ns (这很多,但是计算起来很简单)。因此,现在2x25+10=50 ns =>每秒需要2000万个项目。更糟!
但是,如果您可以使两个阶段彼此独立(在您的情况下,不共享乘法器),则可以在每个25+a位ns将新数据推送到流水线中。这个“比特”将比前一个更小,但即使它是整个10 ns,你也可以以35 ns的时间或接近30M项/秒的速度推送数据,这比你一开始的时候要好。
在现实生活中,10 ps会少得多,通常是100s的ps,因此增益要大得多。
发布于 2011-04-04 19:56:31
George准确地描述了含义延迟(不一定与计算时间有关)。看起来你想要优化你的设计来提高速度。这非常复杂,需要很多经验。总的运行时间是
execution_time = (latency + (N * computation_cycles) ) * cycle_time其中N是要执行的计算次数。如果你为了加速而开发,你应该只在大数据集上计算,即N是大的。通常情况下,你对延迟没有要求(这可能是在实时应用程序中不同)。因此,决定因素是cycle_time和computation_cycles。在这里,它真的很难优化,因为有一种关系。cycle_time是由设计的关键路径决定的,寄存器越少,它就越长。时间越长,cycle_time就越大。但是你拥有的寄存器越多,你的computation_cycles就越高(每个寄存器增加所需的周期数1)。
也许我应该补充一下,延迟通常是computation_cycles的数量(这是造成延迟的第一个计算),但在理论上这可能是不同的。
https://stackoverflow.com/questions/5529844
复制相似问题