我读到fpga适合于并行或流水线的算法。什么是可以流水线的算法?
最佳答案
这意味着您可以将任务T拆分为多个步骤T1、T2、…、Tn,并且这些步骤或多或少都是独立的现在,数据首先被注入处理器p1中,该处理器p1在其上执行任务t1,在一个时间步之后,p1的结果被传送到执行任务t2的p2。关键是此时,处理器P1再次可用,因此您将需要处理的下一块数据加载到处理器P1中您可以将其与装配线进行比较,在装配线中,每个工人(处理器)在一个大型流程中完成自己的工作一个可以流水线处理的进程是有效的,因为处理n个数据块所需的时间与处理n个数据块所需的硬件量相同(显然,为了组织这个过程,会有一些开销)。
注意,对于处理器,我不是指物理处理器(如80x86),我只是指可以执行特定任务的设备。它是否需要指令集、内存、时钟周期等都无关紧要。
并非所有的算法都可以流水线,因为有时数据之间存在依赖关系,这使得很难/不可能将数据分块处理:您需要所有数据同时可用,或者您无法处理它(或者至少不能有效地处理)。
正如@Paebbels所说(见下面的评论)
这种处理器或处理元件(PEs)或处理单元(PUs)可以在FPGAs中实现当需要多个位操作或2种数据类型的非功耗时,可以将PEs网络映射到FPGA区域如果需要浮点操作或快速DRAM访问,FPGAs的性能通常很差那么gpu或标准cpu可能更快。注意:FPGAs安装在PCIe卡上,因此即使是比CPU算法快x100的算法也可能比CPU算法慢,因为延迟或PCIe传输速率将吞噬所有好处。
但关键是在不大幅增加硬件成本的情况下实现加速。
类比
在我的《数字电子》课程中,他们把这比作洗衣服。说你想洗衣服。显然,你不能把这些衣服一下子全部放进洗衣机和烘干机里,你得把它们分成十份。
现在假设你有一台洗衣机和烘干机。清洗和干燥需要两个步骤那么洗衣服就需要20个时间步骤,你只用一台机器。
解决办法是租十台洗衣机和十台烘干机。把所有的衣服都放在洗衣机里,洗完后把所有的衣服都放在烘干机里,分两步完成缺点是你需要租十台洗衣机和烘干机。
一个使用流水线的解决方案是你租用一台洗衣机和一台烘干机。现在你把第一批衣服放进洗衣机里洗完后你把洗好的衣服放进烘干机,但同时你又把下一批衣服放进洗衣机因此,洗衣机和烘干机(处理器)并行工作,但在不同的衣夹(数据)。在每一个时间步,你都要把衣服从烘干机里拿出来,把洗衣机里的衣服放到烘干机里,然后把新的一批衣服放到洗衣机里因此,你将有11个时间步骤,但只需租用一台洗衣机和一台烘干机。在成本和时间方面,流水线是有效的。