算法FPGA主导CPU

时间:2010-05-25 22:39:44

标签: algorithm cpu fpga

在我生命的大部分时间里,我编写了CPU;虽然对于大多数算法来说,CPU或FPGA上的大哦运行时间保持不变,但常数却大不相同(例如,大量的CPU功率浪费了数据周围的混乱;而对于FPGA,它通常是计算限制的)。

我想了解更多相关信息 - 任何人都知道有关以下问题的好书/参考文件/教程:

FPGA在CPU上的主导作用(纯速度方面) FPGA的主导任务是什么(按工作量计算)

注意:标记为社区维基

4 个答案:

答案 0 :(得分:34)

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

FPGA本质上是硬件的解释器! 该架构就像专用ASIC一样,但为了获得快速发展,你需要支付频率约为10的因素和[不知道,至少10?]的功率因数。

因此,在专用硬件大规模优于CPU的任何任务中,除以FPGA 10 / [?]因素,您可能仍然会有胜利者。这些任务的典型特质:

  • 细粒度并行的大量机会。
    (一次执行4次操作不计算; 128次操作。)
  • 深度流水线的机会。
    这也是一种并行性,但很难将其应用于 单个任务,如果您可以获得许多单独的任务,这会有所帮助 并行工作。
  • (主要)固定数据流路径 有些多路复用器是可以的,但是大量的随机访问是不好的,因为你 无法并行化它们。但请参阅下文关于记忆的内容。
  • 许多小记忆的总带宽 FPGA具有数百个小型(O(1KB))内部存储器 (Xilinx中的BlockRAMs说法),所以如果你可以分区你 将内存使用分成许多独立的缓冲区,即可享受数据 CPU从未梦寐以求的带宽。
  • 小外部带宽(与内部工作相比)。 理想的FPGA任务具有较小的输入和输出,但需要a 很多内部工作。这样你的FPGA就不会饿死等待 I / O。 (CPU已经遭受了饥饿,他们减轻了它 具有非常复杂(和)的缓存,在FPGA中无与伦比。) 完全可能将巨大的I / O带宽连接到 FPGA(现在大约1000个引脚,一些具有高速SERDES) - 但这样做需要一个为此设计的定制板 带宽;在大多数情况下,您的外部I / O将是一个 瓶颈。
  • 足够简单用于HW(又名 SW / HW分区)。
    许多任务由90%不规则胶合逻辑组成,只有10% 努力工作(DSP意义上的“内核”)。如果你把所有这些 在FPGA上,你会浪费宝贵的区域在没有的逻辑上 大部分时间工作。理想情况下,你想要所有的渣土 在SW中处理并充分利用HW作为内核。 (FPGA中的“软核”CPU 是一种很流行的方式 将不规则逻辑放慢到中等区域,如果你无法卸载它 一个真正的CPU。)
  • 奇怪的位操作是一个加号 那些没有很好地映射到传统CPU指令集的东西, 例如对打包位的未对齐访问,散列函数,编码& 压缩......但是,不要过高估计这个因素 你 - 你将会遇到的大多数数据格式和算法 设计用于简化CPU指令集,CPU保持不变 添加专门的多媒体指令 很多浮点特别是减号,因为两者都是 CPU和GPU在极其优化的专用芯片上处理它们。 (所谓的“DSP”FPGA也有很多专用的mul / add单元, 但AFAIK这些只做整数?)
  • 低延迟/实时要求是一个优点 硬件可以满足这些要求。

编辑:其中一些条件 - 尤其是固定数据流和许多单独的任务要处理 - 也可以在CPU上启用bit slicing,这在某种程度上会影响该领域。

答案 1 :(得分:9)

最新一代的Xilinx部件只是弹出的吹制4.7TMACS和600MHz的通用逻辑。 (这些基本上是Virtex 6s在较小的工艺上制造。)

如果你能在定点操作中实现你的算法,主要是乘法,加法和减法,并利用宽并行性和流水线并行性,你可以在功率和处理方面吃掉大多数PC,就像这样的野兽

你可以对它们进行浮动,但会有性能损失。 DSP模块包含一个25x18位的MACC,总和为48位。如果你可以摆脱奇怪的格式并绕过通常发生的一些浮点归一化,你仍然可以从这些中获得卡车的性能。 (即使用18位输入作为strait固定点或使用17位mantissia浮动,而不是正常的24位。)双打浮动将占用大量资源,因此如果您需要,您可能会在PC上做得更好。

如果您的算法可以表示为加法和减法运算,那么这些算法中的通用逻辑可用于实现大量加法器。像Bresenham的line / circle / yadda / yadda / yadda算法这样的东西非常适合FPGA设计。

如果你需要分裂...... EH ......这很痛苦,而且可能会相对缓慢,除非你可以实现你的分数倍增。

如果你需要很多高精度的三角函数,那就不用了......再一次可以做到,但它不会很漂亮或者很快。 (就像它可以在6502上完成一样。)如果你只能在有限的范围内使用查找表,那么你的金色!

说到6502,6502演示编码器可以让其中一个东西唱歌。任何熟悉程序员过去常常在旧式学校机器上使用的旧数学技巧的人仍然适用。现代程序员告诉你的“让图书馆为你做的”所有技巧都是你需要知道的在这些上实现数学的东西。如果你能找到一本关于在基于68000的Atari或Amiga上做3d的书,那么他们将讨论如何以整数形式实现东西。

实际上,任何可以使用查找表实现的算法都非常适合FPGA。您不仅可以在整个部件中分配阻塞,而且逻辑单元本身可以配置为各种大小的LUTS和迷你公羊。

您可以免费查看固定位操作等内容!它只是通过路由处理。固定转移或位反转不需要任何费用。像可变量一样的动态位操作将花费最少量的逻辑,并且可以在奶牛回家之前完成!

最大的部分有3960个乘数!并且142,200个切片,每个切片可以是8位加法器。 (每片切片4个6Bit或每个切片8个5bit Luts,具体取决于配置。)

答案 2 :(得分:6)

选择一个粗糙的SW算法。我们公司以SW algo的硬件加速为生。

我们已经完成了正则表达式引擎的硬件实现,这些引擎将以高达10Gb /秒的速度并行执行1000个规则集。目标市场是路由器,其中反病毒和ips / ID可以在数据流传输时实时运行,而不会降低路由器的速度。

我们在HW中完成了高清视频编码。过去每秒需要几个小时的胶片处理时间才能将其转换为高清。现在我们几乎可以实时完成......转换1秒的胶片需要将近2秒的处理时间。 Netflix几乎专门用于我们的视频点播产品。

我们甚至在HW中做过简单的事情,如RSA,3DES和AES加密和解密。我们在HW中完成了简单的zip / unzip。目标市场是安全摄像机。政府拥有大量的摄像机,可以产生大量的实时数据。他们在通过网络发送之前将它实时拉下来,然后在另一端实时解压缩。

Heck,我工作的另一家公司曾经使用FPGA做雷达接收器。他们会直接在几个不同的天线上对数字化的敌方雷达数据进行采样,并从到达的时间三角洲,找出敌方发射机的方向和距离。哎呀,我们甚至可以检查FPGA中信号脉冲的非预期调制,以找出特定发射器的指纹,因此我们可以知道这个信号来自一个特定的俄罗斯SAM站点,该站点曾经驻扎在不同的边界,所以我们可以跟踪武器的移动和销售。

尝试用软件做!! : - )

答案 3 :(得分:1)

纯粹的速度:   - 可以对等的   - DSP,例如视频过滤器   - 移动数据,例如DMA