我读到FPGA适用于并行或可以流水线的算法。根据定义,可以流水线化的算法是什么?
答案 0 :(得分:1)
这意味着您可以将任务 T 拆分为多个步骤 T 1 , T 2 ,..., T n ,这些步骤或多或少都是独立的。现在,数据首先被注入处理器 P 1 ,在一段时间后执行任务 T 1 步骤 P 1 的结果转移到 P 2 ,其中任务 T 2 <执行/ sub> 。关键是,那时,处理器 P 1 再次可用,因此您需要将下一个需要处理的数据块加载到处理器 P 1 子> 的。您可以将其与装配线进行比较,其中每个工人(处理者)在大型流程中完成他/她的工作。可以流水线化的过程是有效的,因为处理 n 数据块所需的时间与 n 成比例,但仍然需要相同数量的硬件,就像您只处理一样一块数据(显然会有一些开销来组织这个)。
请注意,对于处理器,我并不是指物理处理器(如80x86),我只是指可以完成某项工作的设备。它是否需要指令集,存储器,时钟周期等是无关紧要的。
并非所有算法都可以流水线化,因为有时数据之间存在依赖,这使得很难/不可能在块中处理数据:您需要所有可用的数据立刻,或者你不能处理它(或者至少没有效率)。
正如@Paebbels所说(见下面的评论) 这些处理器或处理元件(PE)或处理单元(PU)可以在FPGA中实现。将PE网络映射到FPGA区域是可能的,特别是当需要许多位操作或2种数据类型的非功率时。如果需要浮点运算或快速DRAM访问,FPGA的性能最差。然后GPU或标准CPU可能会更快。注意:FPGA安装在PCIe卡上,因此与CPU算法相比,即使是x100更快的算法也会更慢,因为延迟或PCIe传输速率会消耗所有好处。
然而,重点是在没有大幅增加硬件成本的情况下实现加速。
<强>类比强>
在我的数字电子学课程中,他们用自动洗衣店进行了类比。说你想洗衣服。现在显然你不能把所有这些衣服一次放在洗衣机和烘干机里:你需要把它分成十个部分。
现在说你有一台既可以作为洗衣机又可以作为烘干机的机器。并且它需要两个时间步骤来进行洗涤和干燥。然后需要二十个步骤来洗衣服,而且你需要一台机器。
解决方案是雇用10台洗衣机和10台烘干机。将所有衣物放入洗衣机中,然后在完成后将所有衣物放入干衣机中,然后按两个步骤完成。缺点是你需要雇用十台洗衣机和烘干机。
使用流水线技术的解决方案是您租用一台洗衣机和一台烘干机。现在你把第一批衣服放在洗衣机里。完成后,将洗过的衣服放入烘干机,但同时将下一批衣服放入洗衣机。因此,洗衣机和干衣机(处理器)并行工作,但是在不同的衣服夹头(数据)上工作。在每个时间步骤,你从干衣机上取下衣服,把洗衣机里的衣服放在干衣机里,然后把一批新衣服放进洗衣机里。因此,您将有 11个时间步骤,但只需要雇用一台洗衣机和一台干衣机。在成本和时间方面,流水线技术可以很有效率。