FPGA与CPU、GPU、ASIC的区别,FPGA在云计算中的应用方案
FPGA与CPU、GPU、ASIC的区别,FPGA在云计算中的应⽤
⽅案
最近⼏年,FPGA这个概念越来越多地出现。例如,⽐特币挖矿,就有使⽤基于FPGA的矿机。还有,之前微软表⽰,将在数据中⼼⾥,使⽤FPGA“代替”CPU,等等。
其实,对于专业⼈⼠来说,FPGA并不陌⽣,它⼀直都被⼴泛使⽤。但是,⼤部分⼈还不是太了解它,对它有很多疑问——FPGA到底是什么?
为什么要使⽤它?相⽐ CPU、GPU、ASIC(专⽤芯⽚),FPGA有什么特点?……
今天,带着这⼀系列的问题,我们⼀起来——揭秘FPGA。
suv哪款最好
⼀、为什么使⽤ 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 计算卡旗⿎相当的计算能⼒。
FPGA 的整数乘法运算能⼒(估计值,不使⽤ DSP,根据逻辑资源占⽤量估计)
FPGA 的浮点乘法运算能⼒(估计值,float16 ⽤软核,float 32 ⽤硬核)
在数据中⼼,FPGA 相⽐ GPU 的核⼼优势在于延迟。
像 Bing 搜索排序这样的任务,要尽可能快地返回搜索结果,就需要尽可能降低每⼀步的延迟。
如果使⽤ GPU 来加速,要想充分利⽤ GPU 的计算能⼒,batch size 就不能太⼩,延迟将⾼达毫秒量级。
使⽤ FPGA 来加速的话,只需要微秒级的 PCIe 延迟(我们现在的 FPGA 是作为⼀块 PCIe 加速卡)。
未来 Intel 推出通过 QPI 连接的 Xeon + FPGA 之后,CPU 和 FPGA 之间的延迟更可以降到 100 纳秒以下,跟访问主存没什么区别了。
FPGA 为什么⽐ GPU 的延迟低这么多?
这本质上是体系结构的区别。
FPGA 同时拥有流⽔线并⾏和数据并⾏,⽽ GPU ⼏乎只有数据并⾏(流⽔线深度受限)。
例如处理⼀个数据包有 10 个步骤,FPGA 可以搭建⼀个 10 级流⽔线,流⽔线的不同级在处理不同的数据包,每个数据包流经 10 级之后处理完成。每处理完成⼀个数据包,就能马上输出。
⽽ GPU 的数据并⾏⽅法是做 10 个计算单元,每个计算单元也在处理不同的数据包,然⽽所有的计算单元必须按照统⼀的步调,做相同的事情(SIMD,Single Instruction Multiple Data)。这就要求 10 个数据包必须⼀起输⼊、⼀起输出,输⼊输出的延迟增加了。
当任务是逐个⽽⾮成批到达的时候,流⽔线并⾏⽐数据并⾏可实现更低的延迟。因此对流式计算的任务,FPGA ⽐ GPU 天⽣有延迟⽅⾯的优势。
计算密集型任务,CPU、GPU、FPGA、ASIC 的数量级⽐较(以 16 位整数乘法为例,数字仅为数量级的估计
ASIC 专⽤芯⽚在吞吐量、延迟和功耗三⽅⾯都⽆可指摘,但微软并没有采⽤,出于两个原因:
接下来看通信密集型任务。
相⽐计算密集型任务,通信密集型任务对每个输⼊数据的处理不甚复杂,基本上简单算算就输出了,这时通信往往会成为瓶颈。对称加密、防⽕墙、⽹络虚拟化都是通信密集型的例⼦。
通信密集型任务,CPU、GPU、FPGA、ASIC 的数量级⽐较(以 64 字节⽹络数据包处理为例,数字仅为数量级的估计)
对通信密集型任务,FPGA 相⽐ CPU、GPU 的优势就更⼤了。
从吞吐量上讲,FPGA 上的收发器可以直接接上 40 Gbps 甚⾄ 100 Gbps 的⽹线,以线速处理任意⼤⼩的数据包;⽽ CPU 需要从⽹卡把数据包收上来才能处理,很多⽹卡是不能线速处理 64 字节的⼩数据包的。尽管可以通过插多块⽹卡来达到⾼性能,但 CPU 和主板⽀持的 PCIe 插槽数量往往有限,⽽且⽹卡、交换机本⾝也价格不菲。
从延迟上讲,⽹卡把数据包收到 CPU,CPU 再发给⽹卡,即使使⽤ DPDK 这样⾼性能的数据包处理
框架,延迟也有 4~5 微秒。更严重的问题是,通⽤ CPU 的延迟不够稳定。例如当负载较⾼时,转发延迟可能升到⼏⼗微秒甚⾄更⾼(如下图所⽰);现代操作系统中的时钟中断和任务调度也增加了延迟的不确定性。
ClickNP(FPGA)与 Dell S6000 交换机(商⽤交换机芯⽚)、Click+DPDK(CPU)和 Linux(CPU)的转发延迟⽐较,error bar 表⽰ 5% 和 95%。来源:[5]
虽然 GPU 也可以⾼性能处理数据包,但 GPU 是没有⽹⼝的,意味着需要⾸先把数据包由⽹卡收上来,
再让 GPU 去做处理。这样吞吐量受到 CPU 和/或⽹卡的限制。GPU 本⾝的延迟就更不必说了。水果美容
那么为什么不把这些⽹络功能做进⽹卡,或者使⽤可编程交换机呢?ASIC 的灵活性仍然是硬伤。
尽管⽬前有越来越强⼤的可编程交换机芯⽚,⽐如⽀持 P4 语⾔的 Tofino,ASIC 仍然不能做复杂的有状态处理,⽐如某种⾃定义的加密算法。
综上,在数据中⼼⾥ FPGA 的主要优势是稳定⼜极低的延迟,适⽤于流式的计算密集型任务和通信密集型任务。
⼆、微软部署 FPGA 的实践
2016 年 9 ⽉,《连线》(Wired)杂志发表了⼀篇《微软把未来押注在 FPGA 上》的报道 [3],讲述了 Catapult 项⽬的前世今⽣。
紧接着,Catapult 项⽬的⽼⼤ Doug Burger 在 Ignite 2016 ⼤会上与微软 CEO Satya Nadella ⼀起做了 FPGA 加速机器翻译的演⽰。
演⽰的总计算能⼒是 103 万 T ops,也就是 1.03 Exa-op,相当于 10 万块顶级 GPU 计算卡。⼀块 FPGA(加上板上内存和⽹络接⼝等)的功耗⼤约是 30 W,仅增加了整个服务器功耗的⼗分之⼀。
Ignite 2016 上的演⽰:每秒 1 Exa-op (10^18) 的机器翻译运算能⼒
微软部署 FPGA 并不是⼀帆风顺的。对于把 FPGA 部署在哪⾥这个问题,⼤致经历了三个阶段:
微软 FPGA 部署⽅式的三个阶段,来源:[3]
crv是什么第⼀个阶段是专⽤集,⾥⾯插满了 FPGA 加速卡,就像是⼀个 FPGA 组成的超级计算机。
下图是最早的 BFB 实验板,⼀块 PCIe 卡上放了 6 块 FPGA,每台 1U 服务器上⼜插了 4 块 PCIe 卡。
最早的 BFB 实验板,上⾯放了 6 块 FPGA。来源:[1]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。