FPGA是什么?为什么要使用它
最近几年,FPGA这个概念越来越多地出现。例如,比特币挖矿,就有使用基于FPGA的矿机。还有,之前微软表示,将在数据中心里,使用FPGA“代替”CPU,等等。其实,对于专业人士来说,FPGA并不陌生,它一直都被广泛使用。但是,大部分人还不是太了解它,对它有很多疑问——FPGA到底是什么?为什么要使用它?相比 CPU、GPU、ASIC(专用芯片),FPGA有什么特点?……
今天,带着这一系列的问题,我们一起来——揭秘FPGA。
为什么使用FPGA?
众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和 Web 服务的规模却在指数级增长。
人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新编程来执行新类型的计算任务。
FPGA 正是一种硬件可重构的体系结构。它的英文全称是Field Programmable Gate Array,中文名是现场可编程门阵列。
FPGA常年来被用作专用芯片(ASIC)的小批量替代品,然而近年来在微软、百度等公司的数据中心大规模部署,以同时提供强大的计算能力和足够的灵活性。
▲不同体系结构性能和灵活性的比较
FPGA 为什么快?「都是同行衬托得好」。
CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存。FPGA 之所以比 CPU 甚至 GPU 能效高,本质上是无指令、无需共享内存的体系结构带来的福利。
冯氏结构中,由于执行单元(如 CPU 核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,因此 GPU 使用 SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU 也支持 SIMD 指令。
而 FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。
冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。
由于内存是共享的,就需要做访问仲裁;为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。
对于保存状态的需求,FPGA 中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,无需不必要的仲裁和缓存。
对于通信的需求,FPGA 每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,并不需要通过共享内存来通信。
说了这么多三千英尺高度的话,FPGA 实际的表现如何呢?我们分别来看计算密集型任务和通信密集型任务。
计算密集型任务的例子包括矩阵运算、图像处理、机器学习、压缩、非对称加密、Bing 搜索的排序等。这类任务一般是 CPU 把任务卸载(offload)给 FPGA 去执行。对这类任务,目前我们正在用的 Altera(似乎应该叫 Intel 了,我还是习惯叫 Altera……)Stratix V FPGA 的整数乘法运算性能与 20 核的 CPU 基本相当,浮点乘法运算性能与 8 核的 CPU 基本相当,而比 GPU 低一个数量级。我们即将用上的下一代 FPGA,Stratix 10,将配备更多的乘法器和硬件浮点运算部件,从而理论上可达到与现在的顶级 GPU 计算卡旗鼓相当的计算能力。 666666666666666
页:
[1]