流水线算法定义



我读到FPGA适用于并行或可以流水线的算法。根据定义,什么是可以流水线的算法?

这意味着您可以将任务T拆分为多个步骤T1T2Tn并且这些步骤中的每一个或多或少是独立的。现在,数据首先被注入处理器P1,该处理器在其上执行任务T1,经过一个时间步长后,P1的结果被传输到P2[/em>,其中执行任务T2。关键是,此时处理器P1再次可用,因此您将需要处理的下一块数据加载到处理器P1中。您可以将其与装配线进行比较,在装配线中,每个工人(处理人员)都要在一个大流程中完成自己的职责。可以流水线化的进程是高效的,因为处理n数据块所需的时间随着n而扩展,但仍然需要与只处理一个数据块相同数量的硬件(显然,组织起来会有一些开销)。

请注意,对于处理器,我指的不是物理处理器(如80x86),我只是指可以完成特定任务的设备。它是否需要指令集、内存、时钟周期等都无关紧要。

并不是所有的算法都可以流水线化,因为有时数据之间存在依赖关系,这使得很难/不可能在块中处理数据:您需要一次获得所有可用的数据,或者无法处理它(或者至少处理效率不高)。

正如@Paebbels所说(见下面的评论)可以在FPGA中实现这样的处理器或处理元件(PE)或处理单元(PU)。可以将PE网络映射到FPGA区域,特别是当需要多比特操作或2种数据类型的非幂时。如果需要浮点运算或快速DRAM访问,FPGA的性能大多很差。那么GPU或标准CPU可能会更快。注意:FPGA安装在PCIe卡上,因此即使是速度快x100的算法也可能比CPU算法慢,因为延迟或PCIe传输速率会吞噬所有好处。

然而,关键是在不大幅增加硬件成本的情况下实现加速。

类比

在我的数字电子学课程文本中,他们将其与自助洗衣店进行了类比。说你想洗衣服。现在很明显,你不能一次把所有这些衣服都放进洗衣机和烘干机:你需要把它分成十部分。

现在假设你有一台既是洗衣机又是烘干机的机器。清洗和干燥需要两个时间步骤。然后,洗衣服需要20个时间步长,而你只需要一台洗衣机。

一个解决方案是租用十台洗衣机和十台烘干机。把所有的衣服都放进洗衣机,然后把所有的衣物都放进烘干机,你就完成了两个步骤。不利的一面是,你需要雇佣十台洗衣机和烘干机。

使用流水线的解决方案是租用一台洗衣机和一台烘干机。现在你把第一批衣服放进洗衣机。洗完后,你把洗好的衣服放进烘干机,但与此同时,你又把下一批衣服放进洗衣机。因此,洗衣机和烘干机(处理器)并行工作,但在不同的衣物(数据)卡盘上工作。在每个时间步骤中,你将衣服从烘干机中取出,将洗衣机中的衣服放入烘干机,并将新一批衣服放入洗衣机。因此,您将有11个时间步长,但只需租用一台洗衣机和烘干机。当涉及到成本和时间时,流水线可能是高效的。

最新更新