FPGA 全称是"现场可编辑门阵列" ( Field Programmable Gate Array),其基本原理是在芯片内集成大量的数字电路基本门电路,存储器以及互连线资源,而用户可以通过对 FPGA 进行"编程",即烧写配置文件来定义这些门电路的功能以及模块之间的连线。这种"编程"不是一次性的,你可以把 FPGA 设计成一个编解码器,只要更改配置文件,就可以变成一个 CPU,这也是所谓的 re-Configurable 的概念。

当然,FPGA 在给我们提供了随意实现硬件电路的灵活性的同时,也要求设计者具有硬件设计的知识和能力。这一点和 CPU,GPU 的软件编程方法有很大的差别,或者说是有更高的应用门槛。

目前主要的 FPGA 芯片厂商是 Xilinx 和 Intel(Altera)。在智能云应用领域,亚马逊的AWS 主要使用 Xilinx 的 FPGA,微软则使用Intel的 FPGA。

微软把 CPU、GPU、FPGA 和 ASIC 放在 Flexibility VS Efficiency的角度进行对比。灵活性(通用性)一定意味着效率的损失,反之亦然。另外,在微软的架构中可以看出,他们FPGA主要还是用在 Evaluation(或者 Inference)。而有趣的是,ASIC 方案在 Training 和 Evaluation 中都还是"under investigation",好像把 Google 的 TPU 给忘了。AWS 给出了另外一个视角的比较,CPU 为了实现最大的灵活和通用,芯片中的很大一部分芯片面积用来提供控制功能,也包括复杂的存储架构,比如 Cache。而在 GPU 当中,用作运算的芯片面积比例大大提高,能够支持大规模的并行处理。而到了FPGA,已经没有预先定义的指令集概念,也没有确定的数据位宽。这些你都可以根据应用来自己设计。你可以设计一个只支持几条指令的处理器;也可以只设计数据通道和简单的控制逻辑,根本不用指令。

每天一句话,送给在IC、泛IC和投资圈奋斗的你我,让我们共勉:

幸福是一种方法,不是一样东西。是一种才能,不是一个目标。——赫尔曼·黑塞(德国作家,诗人)

相关文章