FPGA用来加速运算的调研

FPGA用来加速运算的调研.😁

FPGA算法加速有什么一般的套路? - Dorus TAN的回答 - 知乎

  1. 并行计算,比如每个步骤没有关连性的循环操作;
  2. 算法步骤的固定程度,通常越固定的算法越适合用流水线实现,虽然结果延迟差不多,但是流水结构的吞吐量非常大;
  3. 乘法运算,FPGA的乘法运算通常用乘法器只需要一个周期;
  4. 一些特定的矩阵运算。

如何评价微软在数据中心使用 FPGA 代替传统 CPU 的做法? - 李博杰的回答 - 知乎

  • FPGA 为什么快?「都是同行衬托得好」。CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存,FPGA 之所以比 CPU 甚至 GPU 能效高,本质上是无指令、无需共享内存的体系结构带来的福利。

  • FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令

  • 计算密集型任务(包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing 搜索的排序等)

    • Stratix V FPGA 的整数乘法运算性能与 20 核的 CPU 基本相当
    • 浮点乘法运算性能与 8 核的 CPU 基本相当,而比 GPU 低一个数量级。
    • 在数据中心,FPGA 相比 GPU 的核心优势在于延迟
    • FPGA 同时拥有流水线并行和数据并行,而 GPU 几乎只有数据并行(流水线深度受限)。
    • 数据中心的计算任务是灵活多变的,而 ASIC 研发成本高、周期长。好不容易大规模部署了一批某种神经网络的加速卡,结果另一种神经网络更火了,钱就白费了。FPGA 只需要几百毫秒就可以更新逻辑功能。FPGA 的灵活性可以保护投资
  • 通信密集型任务

    • 从吞吐量上讲,FPGA 上的收发器可以直接接上 40 Gbps 甚至 100 Gbps 的网线,以线速处理任意大小的数据包。
    • 网卡把数据包收到 CPU,CPU 再发给网卡,即使使用 DPDK 这样高性能的数据包处理框架,延迟也有 4~5 微秒。
  • 只要规模足够大,对 FPGA 价格过高的担心将是不必要的。

  • 对很多类型的应用,随着分布式 FPGA 加速器的规模扩大,其性能提升是超线性的。

  • 把任务拆分到分布式 FPGA 集群的关键在于平衡计算和通信。

  • 每做一点不同的事情,就要占用一定的 FPGA 逻辑资源。如果要做的事情复杂、重复性不强,就会占用大量的逻辑资源,其中的大部分处于闲置状态。这时就不如用冯·诺依曼结构的处理器。

  • FPGA 和 CPU 协同工作,局部性和重复性强的归 FPGA,复杂的归 CPU

将浮点转为定点大幅降低功耗和成本 - Xilinx

  • 用定点实现的设计总是比用浮点实现的同一设计更加高效,因为定点实现方案所占用的资源和消耗的功耗更少。若将设计迁移到定点,功耗和占用面积缩减一半并不稀奇。
  • 对于采用 C/C++ 语言设计的客户,赛灵思提供 Vivado HLS 并支持任意精度定点数据类型,使客户能够方便地采用定点进行设计或者将现有的 C/C++ 设计转换成定点。
  • 浮点转换为定点的优势:
    • 减少 FPGA 资源占用(所需的 DSP48E2、查找表 (LUT) 和触发器更少,存储定点数字所需的存储容量更小)
    • 功耗更低
    • 材料成本降低
    • 降低时延
    • 相近的性能和精度