在FPGA诞生的初期,计算机研究员是最先感受到FPGA的巨大优势的。
在此之前,要想实现一个新计算机体架构的设计想法,必须要开发一个ASIC作为原型,在面板上安装很多个体积庞大的IC。
但是,与这些需要投入巨大成本和精力的方式不同,一旦用户创建了具有多个FPGA的原型板,就可以立即运行您设计的新架构。而且,修正和更改规格也变得轻松简单。
因此,许多新的架构应运而生因此,对可重构处理器的研究和对新FPGA架构的研究也开始蓬勃发展,在此之后,FPGA使用灵活,适用性强的特征在通信/图像处理领域也大获好评,并将其应用于路由器等通信网络的各种设备中。
四个字母 Field(现场) Programmable(可编程) Gate(逻辑门) Array(阵列)凸显了大量的逻辑门单元.
因此 n 年前我国的某一个 FPGA 公司在向国务院领导描述其产品的时候称他们做的是“万能芯片”(用这种通俗易懂的说法忽悠国家的经费)。
先购买再设计。
能有些夸张,但 FPGA 高度灵活,理论上来讲,只要有足够的资源(积木数量足够多)几乎可以实现数字域的任何功能,受限的是速度、功耗以及系统的成本。
1. 更大的并行度。
这个主要是通过并发和流水两种技术实现。
A:并发是指重复分配计算资源,使得多个模块之间可以同时独立进行计算。
这一点与现在的多核和SIMD技术相似。但相对与SIMD技术,FPGA的并发可以在不同逻辑功能之间进行,而不局限于同时执行相同的功能。举个简单例子说就是使用SIMD 可以同时执行多个加法,而FPGA可以同时执行多个加法和乘法和任何你能设计出来的逻辑。
SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。
B:流水是通过将任务分段,段与段之间同时执行。
其实这一点和CPU相似,只是CPU是指令间的流水而FPGA是任务间流水或者可以说是线程间流水。
2.可定制
FPGA 内部通过Lookup Table实现逻辑,可以简单理解为是硬件电路。可定制指的是在资源允许范围内,用户可实现自己的逻辑电路。通常情况下任务在硬件电路上跑是比在软件上快的,比如要比较一个64位数高32位和低32位的大小,在CPU下需要2条区数指令,两条位与指令,一条移位指令一条比较指令和一条写回指令,而在FPGA下只要一个比较器就行了。
3. 可重构
可重构指的是FPGA内部的逻辑可根据需求改变,减少开发成本。同时,使用FPGA复用资源比使用多个固定的ASIC模块为服务器省下更多的空间。
CPU和GPU、FPGA
CPU是一种非常通用的架构,它的工作方式基于一系列的计算机指令,也称为“指令集”。
简单来说,CPU从内存中提取一小部分数据,放在寄存器或者缓存中,然后使用一系列指令对这些数据进行操作。操作完毕后,将数据写回内存,提取另一小部分数据,再用指令进行操作,并周而复始。我把这种计算方式称为“时域计算”。
可以理解成,在图书馆看书,CPU就是你面前的书桌,内存就是书架,一条条的指令和大量的数据就是书架上的书。
运行程序,就是把从书架上取下来,放到书桌上去读。
(拿书的方式可以理解为就是不同的指令集)
运行完一个指令,操作完毕后,把处理好的数据,还放回书架。
不过,如果这些需要用指令进行处理的数据集太大,或者这些数据值太大,那么CPU就不能很高效的应对这种情况。这就是为什么在处理高速网络流量的时候,我们往往需要使用定制芯片,比如网卡芯片等,而不是CPU。这是因为在CPU中,即使处理一个字节的数据也必须使用一堆指令才能完成,而当数据流以每秒125亿字节进入系统时,这种处理方式哪怕使用再多的线程也忙不过来。
对于GPU来说,它所擅长的是被称作“单指令多数据流(SIMD)”的并行处理。这种处理方式的本质是,在GPU中有着一堆相同的计算核心,可以处理类似但并不是完全相同的数据集。因此,可以使用一条指令,就让这些计算核心执行相同的操作,并且平行的处理所有数据。
简单理解,你不是一个人在读书,你是一群人在读书,在同时获取信息
然后对于FPGA而言,它实际上是CPU计算模型的转置。与其将数据锁定在架构上,然后使用指令流对其处理,FPGA将“指令”锁定在架构上,然后在上面运行数据流。
我把这种计算方式称为“结构计算”,也有人称之为“空间计算”,与CPU的“时域计算”模型相对应。其实叫什么名称都无所谓。
但它的核心思想是,将某种计算架构用硬件电路实现出来,然后持续的将数据流输入系统,并完成计算。在云计算中,这种架构对于高速传输的网络数据非常有效,并且对于CPU来说也是一个很好的补充。