流水线算法定义

Pipelined algorithm definition

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

表示可以将一个任务T拆分成多个步骤T1,T2,...,Tn 和每个这些步骤或多或少是独立的。现在数据首先被注入处理器 P1 执行任务 T1就可以了,一个时间步后P1的结果被转移到P2 其中任务 T2 被执行。重点是那个时候processor P1又可用了,所以你加载下一块需要处理的数据到processor P1。您可以将其与装配线进行比较,其中每个工人(处理器)在一个大型流程中做 his/her 个零件。可以流水线化的进程是高效的,因为处理 n 数据块所需的时间与 n 成比例,但仍然需要相同数量的硬件就好像你只处理一大块数据(显然会有一些开销来组织这个)。

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

并非所有算法都可以流水线化,因为有时数据之间存在 依赖关系,这使得 hard/impossible 让数据在 块中进行处理:你需要所有的数据同时可用,否则你无法处理它(或者至少不能有效地处理)。

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

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

类比

在我的数字电子课程课文中,他们用自助洗衣店做了类比。假设您想洗衣服。现在显然你不能把所有这些衣服一次放进洗衣机和烘干机里:你需要把它分成十份。

现在假设您有一台既可以用作洗衣机又可以用作烘干机的机器。洗涤和烘干需要两个时间步骤。那么你洗衣服需要二十个时间步,而且你只用一台机器。

一个解决方案是租用十台洗衣机和十台烘干机。将所有衣服放入洗衣机,完成后将所有衣服放入烘干机,步即可完成。缺点是需要租十台台洗衣机和烘干机

使用流水线的解决方案是租用一台洗衣机和一台烘干机。现在你把第一批衣服放进洗衣机。完成后,您将洗过的衣服放入烘干机,但与此同时,您将下一批衣服放入洗衣机。因此洗衣机和烘干机(处理器)并行工作,但在不同的衣服夹头(数据)上。在每个时间步,您从烘干机中取出衣服,将洗衣机中的衣服放入烘干机中,然后将一批新衣服放入洗衣机中。因此,您将有 11 个时间步长,但只需租用 1 台 台洗衣机和 1 台烘干机。就成本和时间而言,流水线可以是高效的。