FPGA用来加速运算的调研.😁
FPGA算法加速有什么一般的套路? - Dorus TAN的回答 - 知乎
- 并行计算,比如每个步骤没有关连性的循环操作;
- 算法步骤的固定程度,通常越固定的算法越适合用流水线实现,虽然结果延迟差不多,但是流水结构的吞吐量非常大;
- 乘法运算,FPGA的乘法运算通常用乘法器只需要一个周期;
- 一些特定的矩阵运算。
如何评价微软在数据中心使用 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) 和触发器更少,存储定点数字所需的存储容量更小)
- 功耗更低
- 材料成本降低
- 降低时延
- 相近的性能和精度