深刻理解CPU和异构计算芯片GPU/FPGA/ASIC (下篇)

3.2.1 CPU计算能力分析

这里CPU计算能力用Intel的Haswell架构进行分析,Haswell架构上计算单元有2个FMA(fused multiply-add),每一个FMA能够对256bit数据在一个时钟周期中作一次乘运算和一次加运算,因此对应32bit单精度浮点计算能力为:(256bit/32bit) 2(FMA) 2(乘和加) = 32 SP FLOPs/cycle,即每一个时钟周期能够作32个单精度浮点计算。git

CPU峰值浮点计算性能 = CPU核数 CPU频率 每周期执行的浮点操做数。已Intel的CPU型号E5-2620V3来计算峰值计算能力为 = 6(CPU核数) 2.4GHz(CPU频率) 32 SP FLOPs/cycle = 460.8 GFLOPs/s 即每秒460G峰值浮点计算能力。算法

CPU芯片结构是否能够充分发挥浮点计算能力?CPU的指令执行过程是:取指令 ->指令译码 ->指令执行,只有在指令执行的时候,计算单元才发挥做用,这样取指令和指令译码的两段时间,计算单元是不在工做的,如图4所示。编程

图4 CPU指令执行流程服务器

CPU为了提升指令执行的效率,在当前指令执行过程的时候,预先读取后面几条指令,使得指令流水处理,提升指令执行效率,如图5所示。指令预先读取并流水执行的前提是指令之间不具备相关性,不能一个指令的如何执行须要等到前面一个指令执行完的结果才能够获知。网络

图5 CPU指令流水执行架构

CPU做为通用处理器,兼顾计算和控制,70%晶体管用来构建Cache 还有一部分控制单元,用来处理复杂逻辑和提升指令的执行效率,如图6所示,因此致使计算通用性强,能够处理计算复杂度高,但计算性能通常。工具

图6CPU结构布局

经过CPU计算性能分析,直接提升计算性能方向为:增长CPU核数、提升CPU频率、修改CPU架构增长计算单元FMA(fused multiply-add)个数。这3个方向中,直接增长CPU核数对于计算能力提高最高,可是带来芯片功耗和价格的增长,由于每一个物理核中只有30%的晶体管是计算单元。提升CPU频率,提高的空间有限,并且CPU频率过高会致使芯片出现功耗过大和过热的问题,所以英特尔等芯片制造商目前走多核化的路线,即限制单个微处理器的主频,经过集成多个处理器内核来提升处理性能。修改CPU架构增长计算单元FMA个数,目前英特尔按照“Tick-Tock”二年一个周期进行CPU架构调整,从2016年开始放缓至三年,更新迭代周期较长。性能

3.2.2 GPU计算能力分析

GPU主要擅长作相似图像处理的并行计算,所谓的“粗粒度并行(coarse-grain parallelism)”。图形处理计算的特征表现为高密度的计算而计算须要的数据之间较少存在相关性,GPU 提供大量的计算单元(多达几千个计算单元)和大量的高速内存,能够同时对不少像素进行并行处理。学习

图7是GPU的设计结构。GPU的设计出发点在于GPU更适用于计算强度高、多并行的计算。所以,GPU把晶体管更多用于计算单元,而不像CPU用于数据Cache和流程控制器。这样的设计是由于并行计算时每一个数据单元执行相同程序,不须要繁琐的流程控制而更须要高计算能力,所以也不须要大的cache容量。

图7 GPU结构

GPU中一个逻辑控制单元对应多个计算单元,同时要想计算单元充分并行起来,逻辑控制必然不会太复杂,太复杂的逻辑控制没法发挥计算单元的并行度,例如过多的if…else if…else if… 分支计算就没法提升计算单元的并行度,因此在GPU中逻辑控制单元也就不须要可以快速处理复杂控制。

这里GPU计算能力用Nvidia的Tesla K40进行分析,K40包含2880个流处理器(Stream Processor),流处理器就是GPU的计算单元。每一个流处理器包含一个32bit单精度浮点乘和加单元,即每一个时钟周期能够作2个单精度浮点计算。GPU峰值浮点计算性能 = 流处理器个数 GPU频率 每周期执行的浮点操做数。以K40为例,K40峰值浮点计算性能= 2880(流处理器) 745MHz 2(乘和加) = 4.29T FLOPs/s即每秒4.29T峰值浮点计算能力。

GPU芯片结构是否能够充分发挥浮点计算能力?GPU同CPU同样也是指令执行过程:取指令 ->指令译码 ->指令执行,只有在指令执行的时候,计算单元才发挥做用。GPU的逻辑控制单元相比CPU简单,因此要想作到指令流水处理,提升指令执行效率,必然要求处理的算法自己复杂度低,处理的数据之间相互独立,因此算法自己的串行处理会致使GPU浮点计算能力的显著下降。

3.2.3 FPGA计算能力分析

FPGA做为一种高性能、低功耗的可编程芯片,能够根据客户定制来作针对性的算法设计。因此在处理海量数据的时候,FPGA 相比于CPU 和GPU,优点在于:FPGA计算效率更高,FPGA更接近IO。

FPGA不采用指令和软件,是软硬件合一的器件。对FPGA进行编程要使用硬件描述语言,硬件描述语言描述的逻辑能够直接被编译为晶体管电路的组合。因此FPGA实际上直接用晶体管电路实现用户的算法,没有经过指令系统的翻译。

FPGA的英文缩写名翻译过来,全称是现场可编程逻辑门阵列,这个名称已经揭示了FPGA的功能,它就是一堆逻辑门电路的组合,能够编程,还能够重复编程。图8展现了可编程FPGA的内部原理图。

图8 FPGA内部结构图

这里FPGA计算能力用Xilinx的V7-690T进行分析,V7-690T包含3600个DSP(Digital Signal Processing),DSP就是FPGA的计算单元。每一个DSP能够在每一个时钟周期能够作2个单精度浮点计算(乘和加)。FPGA峰值浮点计算性能 = DSP个数 FPGA频率 每周期执行的浮点操做数。V7-690T运行频率已250MHz来计算,V7-690T峰值浮点计算性能 = 3600(DSP个数) 250MHz 2(乘和加)=1.8T FLOPs/s即每秒1.8T峰值浮点计算能力。

FPGA芯片结构是否能够充分发挥浮点计算能力?FPGA因为算法是定制的,因此没有CPU和GPU的取指令和指令译码过程,数据流直接根据定制的算法进行固定操做,计算单元在每一个时钟周期上均可以执行,因此能够充分发挥浮点计算能力,计算效率高于CPU和GPU。

3.2.4 ASIC计算能力分析

ASIC是一种专用芯片,与传统的通用芯片有必定的差别。是为了某种特定的需求而专门定制的芯片。ASIC芯片的计算能力和计算效率均可以根据算法须要进行定制,因此ASIC与通用芯片相比,具备如下几个方面的优越性:体积小、功耗低、计算性能高、计算效率高、芯片出货量越大成本越低。可是缺点也很明显:算法是固定的,一旦算法变化就可能没法使用。目前人工智能属于大爆发时期,大量的算法不断涌出,远没有到算法平稳期,ASIC专用芯片如何作到适应各类算法是个最大的问题,若是以目前CPU和GPU架构来适应各类算法,那ASIC专用芯片就变成了同CPU、GPU同样的通用芯片,在性能和功耗上就没有优点了。

咱们来看看FPGA 和 ASIC 的区别。FPGA基本原理是在芯片内集成大量的数字电路基本门电路以及存储器,而用户能够经过烧入 FPGA 配置文件来来定义这些门电路以及存储器之间的连线。这种烧入不是一次性的,即用户今天能够把 FPGA 配置成一个微控制器 MCU,明天能够编辑配置文件把同一个 FPGA 配置成一个音频编解码器。ASIC 则是专用集成电路,一旦设计制造完成后电路就固定了,没法再改变。

比较 FPGA 和 ASIC 就像比较乐高积木和模型。举例来讲,若是你发现最近星球大战里面 Yoda 大师很火,想要作一个 Yoda 大师的玩具卖,你要怎么办呢?

有两种办法,一种是用乐高积木搭,还有一种是找工厂开模定制。用乐高积木搭的话,只要设计完玩具外形后去买一套乐高积木便可。而找工厂开模的话在设计完玩具外形外你还须要作不少事情,好比玩具的材质是否会散发气味,玩具在高温下是否会融化等等,因此用乐高积木来作玩具须要的前期工做比起找工厂开模制做来讲要少得多,从设计完成到可以上市所须要的时间用乐高也要快不少。

FPGA 和 ASIC 也是同样,使用 FPGA 只要写完 Verilog 代码就能够用 FPGA 厂商提供的工具实现硬件加速器了,而要设计 ASIC 则还须要作不少验证和物理设计 (ESD,Package 等等),须要更多的时间。若是要针对特殊场合(如军事和工业等对于可靠性要求很高的应用),ASIC 则须要更多时间进行特别设计以知足需求,可是用 FPGA 的话能够直接买军工级的高稳定性 FPGA 彻底不影响开发时间。可是,虽然设计时间比较短,可是乐高积木作出来的玩具比起工厂定制的玩具要粗糙(性能差)一些(下图),毕竟工厂开模是量身定制。

另外,若是出货量大的话,工厂大规模生产玩具的成本会比用乐高积木作便宜许多。FPGA 和 ASIC 也是如此,在同一时间点上用最好的工艺实现的 ASIC 的加速器的速度会比用一样工艺 FPGA 作的加速器速度快 5-10 倍,并且一旦量产后 ASIC 的成本会远远低于 FPGA 方案。

FPGA 上市速度快, ASIC 上市速度慢,须要大量时间开发,并且一次性成本(光刻掩模制做成本)远高于 FPGA,可是性能高于 FPGA 且量产后平均成本低于 FPGA。目标市场方面,FPGA 成本较高,因此适合对价格不是很敏感的地方,好比企业应用,军事和工业电子等等(在这些领域可重配置真的须要)。而 ASIC 因为低成本则适合消费电子类应用,并且在消费电子中可配置是不是一个伪需求还有待商榷。

咱们看到的市场现状也是如此:使用 FPGA 作深度学习加速的可能是企业用户,百度、微软、IBM 等公司都有专门作 FPGA 的团队为服务器加速,而作 FPGA 方案的初创公司 Teradeep 的目标市场也是服务器。而 ASIC 则主要瞄准消费电子,如 Movidius。因为移动终端属于消费电子领域,因此将来使用的方案应当是以 ASIC 为主。

3.3平台性能和功耗比较

因为不一样的芯片生产工艺,对芯片的功耗和性能都有影响,这里用相同工艺或者接近工艺下进行对比,ASIC芯片尚未商用的芯片出现,Google的TPU也只是本身使用没有对外提供信息,这里ASIC芯片用在学术论文发表的《DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning》做为表明。

从上面的对比来看,能耗比方面:ASIC > FPGA > GPU > CPU,产生这样结果的根本缘由:对于计算密集型算法,数据的搬移和运算效率越高的能耗比就越高。ASIC和FPGA都是更接近底层IO,因此计算效率高和数据搬移高,可是FPGA有冗余晶体管和连线,运行频率低,因此没有ASIC能耗比高。GPU和CPU都是属于通用处理器,都须要进行取指令、指令译码、指令执行的过程,经过这种方式屏蔽了底层IO的处理,使得软硬件解耦,但带来数据的搬移和运算没法达到更高效率,因此没有ASIC、FPGA能耗比高。GPU和CPU之间的能耗比的差距,主要在于CPU中晶体管有大部分用在cache和控制逻辑单元,因此CPU相比GPU来讲,对于计算密集同时计算复杂度低的算法,有冗余的晶体管没法发挥做用,能耗比上CPU低于GPU。

4 总结与展望

处理器芯片各自长期发展的过程当中,造成了一些使用和市场上鲜明的特色。CPU&GPU领域存在大量的开源软件和应用软件,任何新的技术首先会用CPU实现算法,所以CPU编程的资源丰富并且容易得到,开发成本低而开发周期。FPGA的实现采用Verilog/VHDL等底层硬件描述语言实现,须要开发者对FPGA的芯片特性有较为深刻的了解,但其高并行性的特性每每可使业务性能获得量级的提高;同时FPGA是动态可重配的,当在数据中心部署以后,能够根据业务形态来配置不一样的逻辑实现不一样的硬件加速功能;举例来说,当前服务器上的FPGA板卡部署的是图片压缩逻辑,服务于QQ业务;而此时广告实时预估须要扩容得到更多的FPGA计算资源,经过简单的FPGA重配流程,FPGA板卡便可以变身成“新”硬件来服务广告实时预估,很是适合批量部署。ASIC芯片能够得到最优的性能,即面积利用率高、速度快、功耗低;可是AISC开发风险极大,须要有足够大的市场来保证成本价格,并且从研发到市场的时间周期很长,不适合例如深度学习CNN等算法正在快速迭代的领域。

讲了这么多,当遇到业务瓶颈的须要异构计算芯片的时候,你是否可以根据业务特性和芯片特性选择出合适的芯片呢?

分析完各种芯片特性,接下来,重点来了!

当今的FPGA有很大的性能潜力,支持深度可变的流水线结构,提供大量的并行计算资源,一个时钟周期内就能够完成很是复杂的功能。FPGA的可编程能力保证了这种器件可以知足应用软件的特殊需求,不存在设计定制协处理器的成本或者延迟问题。FPGA是从新可编程的,它能够在一个芯片中为多种应用提供很是灵活的定制协处理功能。拥有了FPGA,业务就拥有无限可能。一样的半导体技术,既能把处理器的性能发挥到极限,也能使FPGA从简单的胶合逻辑控制器,发展到性能很高的可编程架构。FPGA彻底可以知足HPC市场的“4P”需求。

FPGA的内置存储器也有很大的性能优点。例如,片内存储器意味着协处理器逻辑的存储器访问带宽不会受到器件I/O引脚数量的限制。并且,存储器和运算逻辑紧密结合,再也不须要采用外部高速存储器缓冲。这样,也避免了大功耗的缓冲访问和一致性问题。使用内部存储器还意味着协处理器不须要其余的I/O引脚来提升其可访问存储器容量,从而简化了设计。

不少人因为FPGA的开发难度大以及开发周期较长而对其持有怀疑态度,好消息是HLS以及OpenCL语言愈来愈完善,不少应用直接使用这两种高级语言就能够取得较大性能提高。

业界成功案例

为了更好地知足对计算性能的要求,全球的不少大型IT企业都在FPGA的加速硬件上进行了布局和实践。

Intel:

Intel决定以167亿美圆收购FPGA生产商Altera。Intel预计到2020年,30%以上的服务器CPU芯片将配备一个FPGA协处理器。

IBM:

IBM和Xilinx联合宣布开展一项多年战略协做,在IBM POWER系统上运用Xilinx FPGA加速工做负载处理技术,以打造更高性能、更高能效的数据中心应用。

微软:

早在2014年,Microsoft就将Altera FPGA运用在其Bing搜索的业务中,使Bing的搜索处理量提高了一倍,搜索时间缩短了29%。2015年,微软进一步将FPGA运用于深度学习领域。2016年,微软体系结构顶级会议Micro上发表的《A Cloud-Scale Acceleration Architecture》显示了其在数据中心体系架构上的勃勃野心。如今,进入微软数据中心的每个服务器上均带有一块FPGA板卡,其基本的架构以下:

论文中涉及到的应用场景包括:

1.网络加速(例如网络数据包加解密)

2.本地应用加速(Bing加速、DNN延时敏感性业务加速)

3.支持fpga之间通讯,fpga计算资源池化,提供Hardware-as-a-Service的概念,将FPGA和服务器解耦。

Facebook:

2016年,Facebook也宣称要同Intel合做用Xeon-FPGA平台进行数据中心的建设。

百度:

国内百度也推出了FPGA版本的百度大脑,运用到线上服务;FPGA版百度大脑已运用于包括语音识别、广告点击率预估模型、DNA序列检测以及无人车等业务中。据了解,应用了该版本百度大脑后,语音在线服务、广告点击率预估模型等的计算性能皆提高了3~4倍。

本文转载自腾云阁,已得到做者受权。

相关文章
相关标签/搜索