算法 FPGAs 在性能上占优于 CPU

27

在我的大部分人生中,我都编写CPU程序;虽然对于大多数算法,CPU / FPGAs的大O运行时间保持不变,但常数差别很大(例如,大量CPU功率被浪费在数据传输上;而对于FPGA来说,通常是计算受限)。

我想更多地了解这个问题--是否有好的书籍/参考论文/教程,可以涉及以下问题:

FPGA在哪些任务上具有纯速度优势而超越CPU? FPGA在哪些任务上具有比CPU更高的性能功耗比?

注意:标记为社区wiki。


好问题 - 一个例子是专用的DSP应用程序,比如滤波器,在这里你可以针对特定问题投入尽可能多的乘加运算和位数,而不受传统CPU固定执行单元数量和字长的限制。 - Paul R
1
一般来说,当我们谈论大O符号时,我们不关心并行化。在FPGA上节省的大部分时间是通过将算法进行流水线处理,以便每个时钟周期都可以输入和输出(尽管输出不会对应于该时钟周期的输入)来实现的。并行化的整个概念仍然是一个未解决的问题。如果我们的CPU足够聪明,能够意识到某些东西是可并行化的,而无需告诉它,我们可能会在性能方面获得数量级的改进。 - ldog
例如,考虑排序问题。通常我们从顺序的角度来解决它,并声称运行时间有一个O(n log n)的下界。然而,在具有n个处理器的FPGA上(这并不是那么荒谬),您可以实现奇偶排序(http://en.wikipedia.org/wiki/Odd-even_sort是一种非常简单扩展的冒泡排序算法),并且排序将在O(n)时间内发生! - ldog
现在,检查GPGPU(例如CUDA)是否适用于您考虑在FPGA上实现的任何算法是有意义的。 GPGPU也擅长大规模并行处理,但灵活性较差。请参见https://dev59.com/3nRC5IYBdhLWcg3wYP2h。 - Beni Cherniavsky-Paskin
关于CPU与FPGA在“能量”指标上的比较,请参见我在此处的答案https://dev59.com/3nRC5IYBdhLWcg3wYP2h#30765353,该答案表明通常情况下,FPGA比CPU更节能。 - user984260
相关内容:https://dev59.com/IWs05IYBdhLWcg3wFOC8 - Ciro Santilli OurBigBook.com
4个回答

37

[没有链接,只有我的思考]

FPGA本质上是硬件的解释器!其架构类似于专用ASIC,但为了快速开发,你需要付出大约10倍的频率和不知道多少倍的功率效率。

因此,只要有任何任务,其中专用硬件可以大幅度优于CPU,就将FPGA 10/[?]因素除以,你可能仍然会获胜。这种任务的典型特点:

  • 精细并行性的巨大机会
    (一次执行4个操作不算;128个才算。)
  • 深层流水线的机会
    这也是一种并行处理,但很难应用于单个任务,因此如果您可以让许多独立任务并行处理,则会有所帮助。
  • (大多数情况下)固定数据流路径。
    某些多路复用器是可以接受的,但大量随机访问是不好的,因为无法并行化处理。但请参见下面关于内存的内容。
  • 高总带宽到许多小内存
    FPGA具有数百个小型(O(1KB))内部存储器(在Xilinx术语中为BlockRAM),因此,如果您可以将内存使用划分为许多独立缓冲区,则可以享受CPU从未梦想过的数据带宽。
  • 较小的外部带宽(与内部工作相比)。 理想的FPGA任务具有较小的输入和输出,但需要大量内部工作。这样,您的FPGA就不会因等待I/O而挨饿。(CPU已经遭受了挨饿的问题,他们通过非常复杂(而且大型)的高速缓存来解决这个问题,在FPGA中无法匹配。) 连接大量I/O带宽到FPGA(现今有约1000个引脚,其中一些具有高速率SERDESes)是完全可能的 - 但这需要定制的板子架构设计用于此类带宽;在大多数情况下,您的外部I/O将成为瓶颈。
  • 足够简单以适合硬件(也称为良好的软/硬件分区)。
    许多任务由90%的不规则粘合逻辑和仅10%的“内核”(按DSP意义)组成。如果您将所有这些内容都放在FPGA上,您将浪费宝贵的面积在大部分时间都不工作的逻辑上。理想情况下,您希望所有混乱的事情都由软件处理,并充分利用硬件内核。(FPGA内部的“软核”CPU是将大量慢速不规则逻辑打包到中等面积上的流行方式,如果无法将其卸载到真正的CPU,则可以使用此方法。)
  • 奇怪的位操作是一个加分项。
    那些不适用于传统CPU指令集的事物,例如对打包位的非对齐访问,哈希函数,编码和压缩...但是,不要过高地估计这个因素 - 您会遇到的大多数数据格式和算法都已经被设计为易于CPU指令集,并且CPU不断添加用于多媒体的专门指令。
    特别是浮点运算会减分,因为CPU和GPU在极其优化的专用硅上进行运算。(所谓的“DSP”FPGA也具有大量的专用乘/加单元,但据我所知,这些仅处理整数?)
  • 低延

    编辑:其中几个条件(尤其是固定的数据流和许多独立的任务要处理)也使得CPU可以进行位切片,这在某种程度上平衡了局面。


9
最新一代的Xilinx部件宣称拥有4.7TMACS和600MHz的通用逻辑。(基本上是在更小的工艺上制造的Virtex 6。)如果您能在这样的怪物上使用固定点运算,主要是乘法、加法和减法,并利用广泛的并行性和流水线并行性,您可以在功率和处理方面击败大多数PC。您可以在这些上进行浮点运算,但会有性能损失。DSP块包含一个25x18位的MACC和一个48位的总和。如果您可以使用奇怪的格式并绕过通常发生的浮点归一化,仍然可以从中获得大量性能。(例如,使用18位输入作为直接固定点或带有17位尾数的浮点,而不是正常的24位。)双精度浮点将消耗大量资源,因此如果需要,您可能会在PC上做得更好。
如果您的算法可以表示为加法和减法操作,则这些通用逻辑可用于实现无数个加法器。像Bresenham的线/圆/ yadda / yadda / yadda算法之类的东西非常适合FPGA设计。
如果您需要除法...嗯...这很痛苦,除非您可以将除法实现为乘法,否则速度可能相对较慢。
如果您需要大量高精度三角函数,那么不太适合。这也可以做到,但不会很漂亮或快速。(就像在6502上一样。)如果您只使用有限范围内的查找表,则可以解决问题!
说到6502,6502演示编码器可以让这些东西唱歌。熟悉旧学校机器上所有数学技巧的人都将适用。现代程序员告诉您“让库为您完成”的所有技巧都是您需要了解如何在这些上实现数学的类型。如果您能找到一本关于在基于68000的Atari或Amiga上进行3d的书,它们将讨论如何仅使用整数实现各种内容。
实际上,任何可以使用查找表实现的算法都非常适合FPGA。您不仅在整个部件中分布了块RAM,而且逻辑单元本身可以配置为各种大小的LUTS和mini ram。
您可以将固定位操作视为免费!它只是通过路由处理。固定移位或位反转不花费任何费用。动态位操作(例如按可变数量移位)将花费最少的逻辑,并且可以一直执行!

最大的部件有3960个乘法器!还有142,200个片,每个片可以是一个8位加法器。(每个片有4个6位LUT或者8个5位LUT,具体取决于配置)


我喜欢关于场景 - 整数运算的部分。很好的观点。 - name
“让库为您服务”是您需要了解的类型,以在这些上实现数学运算。- 说得好! - mixdev

8
选择一个牛逼的软件算法。我们公司专门为软件算法提供硬件加速实现的服务。
我们已经实现了正则表达式引擎的硬件加速,可以同时处理数千个规则集,速度高达10Gb/sec。这个产品的目标市场是路由器,可以在数据流通过时实时运行反病毒和入侵检测/防御功能,而不会减缓路由器速度。
我们还实现了高清视频编码的硬件加速。以前每秒钟需要几个小时的处理时间才能将电影转换为高清格式,现在我们可以几乎实时完成,只需要大约2秒钟的处理时间就能转换1秒钟的电影。Netflix 几乎完全使用了我们的硬件来提供他们的点播视频产品。
我们甚至还实现了RSA、3DES和AES加密和解密,以及简单的zip/unzip功能的硬件加速。这个产品的目标市场是安全视频摄像头。政府有大量的视频摄像头产生大量的实时数据流。他们在发送到网络之前实时压缩数据,然后在另一端实时解压缩数据。
我曾经工作过的另一家公司甚至使用FPGA实现雷达接收器。他们直接从多个天线采样数字化的敌方雷达数据,并通过到达时间差计算出敌方发射机的方向和距离。我们甚至可以在FPGA中检查信号的意外调制,以确定特定发射机的指纹,从而知道这个信号来自于曾经驻扎在不同边境的俄罗斯SAM站点,以便追踪武器的运动和销售。
试着用软件来做这些吧!! :-)

你是否也做过硬件-软件代码设计?看起来你只是在做高吞吐量的流媒体应用。 - name
奥斯汀谁负责正则表达式加速?Altior? - user597225
这是一个名为Tarari的圣地亚哥初创公司,后来被LSI收购。当它被收购时,我从加利福尼亚州搬到了奥斯汀。不过,我们并不是唯一在做这件事情的公司...还有几家其他小公司也被大公司收购了,但我不知道谁还在继续开发它。后来,我离开了该公司尝试另一个创业公司。 - SDGator
@name:我们确实进行了硬件-软件协同仿真,如果这是你所问的。我不确定你所说的“协同设计”是什么意思。 - SDGator
请问贵公司名称是什么? - user626528
“[...] 所以我们可以追踪武器的流动和销售” - 我觉得现在我读了这个,中央情报局要来找我了。 - undefined

1

对于纯速度: - 可并行的任务 - DSP,例如视频滤镜 - 数据移动,例如DMA


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接