27

在我一生的大部分时间里,我都在编写 CPU 程序。尽管对于大多数算法来说,CPU / FPGA 上的 big-Oh 运行时间保持不变,但常数却大不相同(例如,大量 CPU 功率被浪费在对数据进行混洗;而对于 FPGA,它通常受计算限制)。

我想了解更多关于这方面的信息——任何人都知道处理以下问题的好书/参考论文/教程:

FPGA 在哪些任务上主导 CPU(就纯速度而言) FPGA 在哪些任务上主导 CPU(就每 jule 的工作量而言)

注意:标记为社区 wiki

4

4 回答 4

37

[没有链接,只是我的想法]

FPGA本质上是硬件的解释器!该架构就像专用的 ASIC,但要获得快速开发,您需要支付大约 10 倍的频率和 [不知道,至少 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 将成为瓶颈。
  • 对于硬件来说足够简单(又名良好的SW/HW 分区)。
    许多任务由 90% 的不规则胶合逻辑和仅 10% 的艰苦工作(DSP 意义上的“内核”)组成。如果您将所有这些都放在 FPGA 上,您将在大部分时间不起作用的逻辑上浪费宝贵的空间。理想情况下,您希望所有的垃圾都在软件中处理,并充分利用内核的硬件。(如果您不能将其卸载到真正的 CPU 上,FPGA 中的“软核”CPU是一种将大量缓慢的不规则逻辑打包到中等区域的流行方式。)
  • 奇怪的位操作是一个加号。
    不能很好地映射到传统 CPU 指令集的东西,例如对打包位的非对齐访问、散列函数、编码和压缩......但是,不要高估它给你的因素 - 大多数数据格式和算法你会meet 已经被设计为简化 CPU 指令集,并且 CPU 不断为多媒体添加专门的指令。
    很多浮点特别是一个减号,因为 CPU 和 GPU 都在极其优化的专用芯片上处理它们。(所谓的“DSP”FPGA 也有很多专用的 mul/add 单元,但 AFAIK 这些只做整数?)
  • 低延迟/实时要求是一个优势。
    在这样的需求下,硬件真的可以大放异彩。

编辑:其中几个条件 - 尤其是。固定数据流和许多单独的任务要处理——还可以在 CPU 上启用位切片,这在一定程度上平衡了该领域。

于 2010-05-26T17:41:38.213 回答
9

好吧,最新一代的 Xilinx 部件刚刚发布了 4.7TMACS 和 600MHz 的通用逻辑。(这些基本上是在较小的工艺上制造的 Virtex 6s。)

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

您可以在这些上浮动,但会影响性能。DSP 模块包含一个 25x18 位 MACC,其总和为 48 位。如果您可以摆脱奇怪的格式并绕过一些通常发生的浮点标准化,您仍然可以从这些格式中获得大量的性能。(即使用 18 位输入作为海峡固定点或使用 17 位尾数浮点数,而不是正常的 24 位。)双精度浮点数会占用大量资源,因此如果需要,您可能会在 PC 上做得更好。

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

如果您需要除法... EH... 这很痛苦,并且可能会相对较慢,除非您可以将除法实现为乘法。

如果你需要很多高精度的三角函数,不是那么多......同样可以完成,但它不会很漂亮或很快。(就像它可以在 6502 上完成一样。)如果您可以仅在有限范围内使用查找表,那么您的黄金!

说到 6502,一个 6502 演示编码器可以让这些东西之一唱歌。任何熟悉程序员曾经在老式机器上使用的所有旧数学技巧的人仍然适用。现代程序员告诉你“让库为你做”的所有技巧都是你需要知道的在这些上实现数学的东西类型。如果你能找到一本关于在基于 68000 的 Atari 或 Amiga 上做 3d 的书,他们将讨论很多如何仅以整数实现东西。

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

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

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

于 2010-07-15T23:19:46.093 回答
7

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

我们已经完成了正则表达式引擎的硬件实现,它将以高达 10Gb/秒的速度并行执行 1000 个规则集。目标市场是路由器,当数据流过时,防病毒和 ips/ids 可以实时运行,而不会减慢路由器的速度。

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

我们甚至在硬件中完成了简单的东西,例如 RSA、3DES 和 AES 加密和解密。我们已经在硬件中完成了简单的压缩/解压缩。目标市场是安全摄像机。政府拥有大量摄像机,可生成大量实时数据。他们在通过网络发送之前将其实时压缩,然后在另一端实时解压缩。

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

尝试在软件中这样做!:-)

于 2010-08-01T21:00:03.827 回答
1

对于纯速度: - 可并行化的 - DSP,例如视频过滤器 - 移动数据,例如 DMA

于 2010-05-26T17:38:36.843 回答