算法FPGA主导CPU

ano*_*non 25 algorithm cpu fpga

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

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

FPGA的主要任务是什么(在纯粹的速度方面)FPGA的主要任务是什么(就每个工作量而言)

注意:标记为社区维基

Ben*_*kin 34

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

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将成为瓶颈.
  • 对于HW(也就是良好的SW/HW分区)来说足够简单.
    许多任务包括90%的不规则胶合逻辑和10%的努力工作(DSP意义上的"内核").如果你把所有这些都放在FPGA上,你就会浪费宝贵的区域来处理大多数时候都无法工作的逻辑.理想情况下,您希望在SW中处理所有muck并充分利用内核的HW.(FPGA中的"软核"CPU是一种将大量慢速不规则逻辑打包到中等区域的流行方法,如果你无法将它卸载到真正的CPU上.)
  • 奇怪的位操作是一个加分.
    那些没有很好地映射到传统CPU指令集的东西,例如对打包位的未对齐访问,散列函数,编码和压缩...但是,不要高估这给你的因素 - 大多数数据格式和算法你会已经设计好了CPU指令集,并且CPU不断添加专用的多媒体指令.
    很多浮点特别是负数,因为CPU和GPU都会在极其优化的专用芯片上处理它们.(所谓的"DSP"FPGA也有很多专用的mul/add单元,但AFAIK这些只做整数?)
  • 低延迟/实时要求是一个优点.
    硬件可以在这样的需求下真正发光.

编辑:其中几个条件 - 尤其是 固定数据流和许多单独的任务要处理 - 也可以在CPU 上启用位切片,这在某种程度上可以调整字段.

  • 了解ILP墙:http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-93-6.html (2认同)

NoM*_*ots 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个6Bit或每个切片8个5bit Luts,具体取决于配置.)


SDG*_*tor 6

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

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

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

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

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

尝试用软件做!! :-)