FPGA与CPU在软件和硬件上fpga和cpu的区别别

为什么微软在服务器中用 FPGA 代替传统 CPU 可以使效能大幅提升?
【林名的回答(7票)】:
这个技术上不算什么新闻吧,印象中google 什么的服务器就是用xilinx fpga搭的,以提高固定算法的执行速度。服务器端而已,数量不是很大,没有流片的必要,所以就用fpga咯。
不是产业级的,一次性买卖。估计altera也不是很感兴趣,只是借机提一下股价罢了。
实现细节在于自定义算法内容。如果这个算法相对稳定了 ,就可以用fpga实现,一方面加快运行速度,另一方面提高单机负载量。就是常说的硬件加速。
实现效果看算法硬件化改造的水平。
我觉得最大的难点在于算法改造以及任务调度。但我没接触分布式计算,并行计算的领域,对微软而言,这个应该也不是什么难点。这就是个工作量的问题罢了。
【胡雨松的回答(10票)】:
自己的领域答一下,微软的这篇论文前两天我刚刚看过。
这条新闻是真的。这个项目已经做出来了,并且这篇论文将会出现在2014年的ISCA上。ISCA是计算机架构领域的顶级会议。文章题目叫 “A Reconfigurable Fabric for Accelerating Large-Scale Datacenter Services”。现在ISCA还没开,所以论文在ACM上搜不到,过几周应该能搜到了。
通常情况下,用实现的算法速度可以比CPU快100倍。所以文章里说FPGA处理Bing算法的速度比CPU快40倍也是可信的。最后整个系统级的性能是:在保持latency不变的情况下,吞吐量增加了一倍,在保持吞吐量不变的情况下,latency减小了。整个系统的功耗没有明显增加。
技术难度在于软件硬件接口的设计和整合。FPGA的开发代价是远高于CPU的,所以架构要有一定的灵活,要可以和软件系统简单可靠地接合。另一个难点是系统的可靠性。1600多块FPGA链接在一起,是很容易出现错误(errors, failing hardware, reboots, software updating)。所以如何及时探测错误,如何处理错误,如何保持整个系统的稳定性需要做很多的工作。
算法改造并不是难点。因为考虑到和现有系统的匹配,他们完完全全就是照搬的Bing的软件算法(完全没有一点改动)。
这个工作算是把FPGA应用在数据中心的一个尝试。不只是微软,Amazon,google也参与了这个工作。我相信未来FPGA一定会应用在数据中心。不过现在来看FPGA的开发难度还是太高了点。希望High level synthesize能够让FPGA的开发简化。
【JonsonXP的回答(6票)】:
问题好快!我也刚看到这则新闻。
可信度没问题,微软一直有一支reconfigrable computing部门,发过不少好文章。去年葡萄牙的FPL2013会议(FPGA领域顶级会议)上keynote4,微软的人做了题为“Reconfigurable Hardware at the World’s Largest Software Company
”的报告。不过可能出于保密当时没有过多介绍有价值的信息。反而keynote3,来自Google的“Accelerating the datacenter”提供了一些思路。
具体架构我们目前不得而知,还等他们自己出来说明(会在9月慕尼黑的FPL2014公布?),但根据FPGA应用最近动向和新闻里的措辞,很有可能是完全不同于目前通用计算的可重编程架构。最近同样醒目的一则新闻是HP的The Machine项目,同样声称大幅改进了计算机架构。
请大家也持续关注FPGA新技术动向,及时分享讨论。
【赵翔的回答(4票)】:
先回答问题:
在数据中心中使用FPGA代替通用CPU真的能够实现报导中的效果吗?
--自2003年,Virtex-II Pro的年代,FPGA厂商就一直在考虑将FPGA置于逻辑时序控制之外的领域,从数字信号处理,网络,数据中心,FPGA在逻辑控制之外的能力已经充分得到验证。对于新闻的事实其实我并不清楚,但是从过去的情况来看,至少牛吹的没有那么多。
在技术上的实现细节是怎么样的?难度在哪里?
--举个简单的例子,一段运算在CPU层面需要做的事情是用“编程”的方式来将运算本身翻译为CPU结构可以处理的指令序列,然后一一处理。此时,提高运算能力最简单的方式就是提升CPU的频率或数量(当然,事实上的情况要复杂的多)。
而从FPGA角度来看,一段运算则可以通过模块的堆叠,级联来实现针对算法优化过的硬件结构,在面积足够的情况下,运算任务可以如同流水线一样通过硬件结构得出运算结果。
以乘加运算为例,CPU层面的工作是将乘加运算变成“x乘y,得出z,缓存z,z加a,缓存a”之类的流程。FPGA层面的工作是将合适的乘法器和加法器级联起来,设计数据接口。
所以细节上来看,新闻里描述的工作主要是分析需要处理的运算特点,设计适合运算特点的硬件结构。不清楚搜索的运算特点,但是只要是具有大量可重复运算的算法,FPGA实现起来效率都是比较高的。
这个任务真正的难度,在我看来是市场上广泛缺乏对于硬件最够了解的算法人员,也缺乏对算法足够了解的硬件设计人员。与这点相比,FPGA实现上的性能、功耗等等要求都显得容易多了。
如果多说一些的话,FPGA之所以适合做高性能计算,有几个层面的原因。第一个层面,面对部分特殊的任务,大量相对低速并行的单元比起少量高效单元而言效率更高。第二个层面,FPGA可以通过硬件结构的改变来适应算法的要求。第三个层面,这种改变是可以在运行过程中进行的。
其实我知道一点都没说清楚,这是囿于自身知识能力和表达能力限制的。如果大家希望了解更多可以私信,我介绍一些原来的同事给大家,离开他们的时候他们跟我一样是菜鸟,现在我还是菜鸟而他们已经成为业内专家了。
【龚黎明的回答(2票)】:
说明我等做IC前端的春天要来了:-D,如果真是可重编程的FPGA,那就厉害了,可以大大改善FPGA计算能力比上不足,比下有余的尴尬局面,也能改善FPGA总是沦于流片前的小白鼠这种给他人作嫁衣裳的佣人角色。
【陈旭的回答(2票)】:
首先感谢被邀请,首先我介绍一下FPGA和传统CPU的区别。FPGA说简单一点就是门电路的集合,它所有的模块几乎是同时运行的,而CPU是从上而下的运行的。所以说FPGA的处理速度一定远远高于任何CPU。但是CPU用于算法处理特别方便,FPGA做算法只能利用硬件实现,很麻烦也很耗资源。我并不是很了解微软的FPGA用途,但是我大致能猜测到若用FPGA那么一定用于没有设计算法的地方才能体现出它的优势。目前FPGA的最大应用在于信号处理或者通信的接口部分,在军方也用FPGA做算法,很浪费,代价很高,微软出不了那种钱的。毕竟商业为了挣钱(个人观点)。所以我能想到的FPGA微软使用的优势就是用于搜索引擎了
【欧阳的回答(2票)】:
可信度应该是很高的,我刚读研的时候看过微软研究院招FPGA的实习生,又三年过去了,做出点成果没什么问题。
在数据中心中使用FPGA代替通用CPU真的能够实现报导中的效果吗?
“微软现在正计划采用现场可编程阵列或现场可编程门阵列(FPGA)来代替原有的处理器架构,让微软可以采用自主软件专门修改并为自己服务。”这句话比较笼统,系统中的CPU完全被FPGA代替?还是用FPGA来做固定算法计算,减少CPU的使用?前一种那是FPGA计算机了,系统架构就完全不一样了。不过这种可能应该比较小,这条路很长。后一种的话,就是异构计算的一种了,用FPGA做算法加速,40倍的加速是合理的。
其实这里有意思的是“采用自主软件专门修改并为自己服务”,芯片厂商都有EDK,微软为什么自己做了个开发软件?如果不是唬人的话,这里面有可能意味微软研发了一套基于FPGA适用于WINDOWS下异构计算的开发流程。
这里想要说清楚,就要提到常用的异构计算方式以及其异同了。DSP、GPGPU、FPGA应该是常见异构计算方式,还有一种是重核。
常见的三种,单说计算性能,FPGA完爆剩下两种。FPGA比GPGPU的功耗也不是一个级别的。但是其实用的最多的是GPGPU。上面有答案说,FPGA贵,我觉得不是,高端GPGPU比高端FPGA并不便宜多少,而且耗电量高。限制FPGA使用的其实是开发成本,FPGA经常用在asic的前期验证上,因为FPGA验证比流片验证低,而且前端设计是一样的。但是相对于GPGPU来说,FPGA设计周期要长的的多,而且难度要大。相对于软件来说,FPGA调试也是相当困难。所以说限制FPGA使用的不是价格,用在需要和适合地方,硬件成本不算什么。一个团队早几个月完工,工资还能省一大笔呢。
如果微软的那个“自主软件”能降低开发难度和周期,那才是真正能推动FPGA发展,还有这个项目的意义所在。
说偏了,不说了........
在技术上的实现细节是怎么样的?难度在哪里?
这个就没法说了,看这个新闻看不出来微软做了什么,也就没法谈细节和难度了。
【知乎用户的回答(1票)】:
说一个有些跑题的方面。
IT 行业巨头们都开始做 custom processor ,只会加速 Intel 现行商业模式(通过高利润率芯片养活需要巨额投资的 fab 和 R&D)走向终点。
【刘浩冉的回答(1票)】:
谢邀,第一次被人邀请有点激动啊。
楼上的都是大神级别的答案,小弟就在这班门弄斧了,说下自己的看法。0.0
1.原理,客观上来讲用FPGA代替传统的CPU来进行服务器的数据处理,肯定可以让效率提高,毕竟并行的机制在那里。
2.实现问题,这个问题关键算法的实现。现在主流的服务器算法应该都是基于CPU设计的(这个我没调查过),想要把串行的算法进行逻辑转化为并行的算法,这个工作量非常大,而且周期长。应该不能在短时间内完成。
3.商业需求,引用下
大神的一段话:
这个技术上不算什么新闻吧,印象中google 什么的服务器就是用xilinx fpga搭的,以提高固定算法的执行速度。服务器端而已,数量不是很大,没有流片的必要,所以就用fpga咯。
从这里可以看出。商业需求不是很大。商家是不会做赔本的买卖呢,他才不管是否技术革新。
结论:我个人认为这个东西属于学术界,而非工业界,可以申请下专利。短期内无法实现。
【一直在改的回答(1票)】:
fpga算法相比通用cpu的软件算法具有并行和复用的优点。以通信上的tpc信道译码算法为例,通常情况下单模块综合速度可以到120mhz以上,是intel 酷睿cpu软件算法效率的50倍以上。而且fpga模块很容易就可以实现多路并行。做这种单纯的算法fpga的优越性实在是太强了。但fpga并不擅长做大存储量数据复杂的数学计算,如果做这种事情fpga一样的要用到cpu核来做,优势就没有了,因为fpga的时钟可是远低于我们目前cpu的4ghz的。我不清楚bing算法细节,可能微软将其改造得适合fpga算法了,那理论上40倍的提升是没有问题的
【KaiserLi的回答(1票)】:
很简单的,若了解FPGA的原理就很简单了。
FPGA+软件,整个系统的架构是针对算法专用的,例如cache大小,指令处理都可以是最优化的。通用CPU的架构对于某种应用不一定是最优的,整个系统为了迎合CPU的架构,需要牺牲一些性能,是泛用型的。
举个例子:
FPGA用在美国交易所里贴着交易所主机做高频交易,他们已经很成熟了。
【黄振栋的回答(0票)】:
xilinx经常出的杂志几乎每期都会有xilinx帮助生意伙伴用FPGA设计代替传统方法提高效率的,比如前几期的morgan的快速交易,我想这类的设计工程往往有一个非常大的团队在做专门支持吧,原来要好几天,用xilinx fpga重构后只需要2、3个小时,数据来源 。使用传统CPU确实在一些高吞吐量,高实时性方面有瓶颈,原因是传统CPU的潜力已经挖掘差不多了,而天然并行的FPGA在做同样计算时确实可以轻松提高数十倍效率,而且功耗还很低。说实话新闻应该是真的,但是我们从来没见过,,这里每一期都会说一个例子,真真的感觉是雾里看花那种。我也很迷惑,做这些可重构,方向是对的,但是是不是走错路了,一个体现是现在各大FPGA厂商都想放弃之前硬件描述语言来开发FPGA,转而使用autoesl或hls,以及中的c、java自动化转vhdl的。不管怎样,看不出来对我们IC前端有什么利好, ,还请前辈指教。以上是我的一个感受,现在在校生,比较迷惑于FPGA方向。
【bingdutzh的回答(0票)】:
谢邀。我就我的知识面简单的说一下。
1.FPGA叫做可编程门阵列。是由上万个MOS管集成在一个芯片上组成。FPGA相比于CPU的优势在于硬件速度更快。FPGA里有一句话叫做以面积换速度。意思是我使用更多的门电路,以消耗更多的FPGA内核资源为代价,提升整个系统的运行速度。CPU的速度几乎是固定的,因为CPU的代码是顺序执行,而每执行一条指令,就需要消耗一个时钟周期。而FPGA可以做到并行处理,几条流水线同时处理一个程序,达到硬件加速。
2.FPGA很难作为最终产品的出现。因为其成本昂贵。但是有一个好处就是可编程,即用它来做实验品,如果实验效果不好可以立马换一个新的程序继续实验。而做一个芯片则需要几个月的迭代周期,很漫长,作为研发,实在等待不起。但是最终产品一旦定型批量生产,那时候就需要定制芯片。
3.现在整个网络服务都面临一项新技术的冲击,叫做openflow。技术改革的趋势已经显现,谁都想抢在最前面。要不就是被淘汰,就和诺基亚一样。但这个技术改革并不成熟,大家都在摸着石头过河的阶段,所以都在实验,都说自家生产的服务器芯片是最好的。
本人愚见,请高手指教。
【程序猴子的回答(0票)】:
很简单,FPGA是硬件编程,比CPU上的软件编程性能可以做到更好。
【丁朋程的回答(0票)】:
FPGA是全并行执行,一次可处理的数据位宽比CPU高,但FPGA逻辑实现难度要比CPU软件编程要大,微软在服务器中用 FPGA 代替传统 CPU属于FPGA的可重构计算的应用。
【keithkeith的回答(0票)】:
这是微软都没钱流片了么?还是微软的码农开始搞VHDL抢我微电子的生意!
【杨杰的回答(0票)】:
FPGA是一堆逻辑门器件连在一起的。简单的说,里面的处理过程是死的,在什么情况传来什么数据需要得出什么结果,已经是固定的,内部几乎没有任何计算。所以可以输入的数据只是按照里面预先设定好的路径经过那些逻辑门,并得到所需的逻辑结果。比如计算1+1,FPGA里面有许多个加法器,或者只要按照加法器的规律把各个逻辑门连起来,就能得到1+1的结果。注意,这里是设定好了1+1的结果就是等于2,而不是通过计算得到2。因为内部没有计算,所以输入到输出的速度非常非常的高。而传统cpu就需要计算了,传统cpu需要了解1是什么类型的数字,+号是什么运算,然后再计算出原来1+1=2,最后再输出2这个数字。
&&&&&本文固定链接:
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!
最新日志热评日志随机日志努力加载中,稍等...
暂无新消息
努力加载中,稍等...
已无更多消息...
这些人最近关注了你
努力加载中,稍等...
已无更多消息
努力加载中,稍等...
已无更多消息
深入理解CPU和异构计算芯片(GPU/FPGA/ASIC)
版权所有,禁止匿名转载;禁止商业使用;禁止个人使用。
一、异构计算:WHY  明明CPU用的好好的,为什么我们要考虑异构计算芯片呢?  随着互联网用户的快速增长,数据体量的急剧膨胀,数据中心对计算的需求也在迅猛上涨。诸如深度学习在线预测、直播中的视频转码、图片压缩解压缩以及HTTPS加密等各类应用对计算的需求已远远超出了传统CPU处理器的能力所及。  历史上,受益于半导体技术的持续演进,计算机体系结构的吞吐量和系统性能不断提高,处理器的性能每18个月就能翻倍(众所周知的“摩尔定律”),使得处理器的性能可以满足应用软件的需求。但是,近几年半导体技术改进达到了物理极限,电路越来越复杂,每一个设计的开发成本高达数百万美元,数十亿美元才能形成新产品投产能力。日,英特尔宣布正式停用“Tick-Tock”处理器研发模式,未来研发周期将从两年周期向三年期转变。至此,摩尔定律对英特尔几近失效。  一方面处理器性能再无法按照摩尔定律进行增长,另一方面数据增长对计算性能要求超过了按“摩尔定律”增长的速度。处理器本身无法满足高性能计算(HPC:High PerformanceCompute)应用软件的性能需求,导致需求和性能之间出现了缺口(参见图1)。  一种解决方法是通过硬件加速,采用专用协处理器的异构计算方式来提升处理性能。图1 计算需求和计算能力的缺口发展形式二、异构计算:STANDARDS  通常我们在为业务提供解决方案的时候,部署平台会有四种选择CPU、GPU、FPGA、ASIC。那有什么标准来评判计算平台的优劣呢?我是法官,标准我说了算  当今理想的协处理器应该是基于硬件的设计,具备三种基本能力。第一是设计能够提供专门的硬件加速实现各种应用中需要的关键处理功能。其次是协处理器设计在性能上非常灵活,使用流水线和并行结构,跟上算法更新以及性能的需求变化。最后,协处理器能够为主处理器和系统存储器提供宽带、低延迟接口。  除了硬件要求以外,理想的协处理器还应该满足HPC市场的“4P”要求:性能(performance)、效能(productivity)、功耗(power)和价格(price)。  HPC市场对性能的最低要求是全面加速实现算法,而不仅仅是某一步骤,并能够加速实现整个应用软件。  效能需求来自最终用户。在现有的计算机系统中,协处理器必须安装起来很方便,提供简单的方法来配置系统,加速实现现有的应用软件。  HPC市场的功耗需求来自计算系统安装和使用上的功耗限制。对于大部分用户,能够提供给计算机的空间有限。计算系统的功耗越小,那么可以采取更少的散热措施来保持计算机不会过热。因此,低功耗协处理器不但能够为计算系统提供更低的运转成本,而且还提高了计算系统的空间利用率。  价格因素在HPC市场上显得越来越重要。十几年前,某些应用软件对性能的需求超出了单个处理器能力范围,这促使人们采用专用体系结构,例如密集并行处理(MPP)和对称多处理(SMP)等。然而,这类系统要求使用定制处理器单元和专用数据通路,开发和编程都非常昂贵。  现在的HPC市场抛弃了如此昂贵的方法,而是采用性价比更高的集群计算方法。集群计算采用商用标准体系结构,例如Intel和AMD;采用工业标准互联,例如万兆以太网和InfiniBand;采用标准程序语言,例如运行在低成本Linux操作系统上的C语言等。当今的协 处理器设计必须能够平滑集成到商用集群计算环境中,其成本和在集群中加入另一个节点 大致相当。  了解了基本的评判标准之后,我们以当今最火的深度学习为例,从芯片架构、计算性能、功耗、开发难度几个方面来对几种不同的芯片进行分析对比。三、异构计算:WHICH1、芯片特性  对常用的处理器芯片进行分类,有一个明显的特点:CPU&GPU需要软件支持,而FPGA&ASIC则是软硬件一体的架构,软件就是硬件。这个特点是处理器芯片中最重要的一个特征。图2 处理器芯片对比  图2可以从两个角度来说明:从ASIC-&CPU的方向,沿着这个方向芯片的易用性越来越强,CPU&GPU的编程需要编译系统的支持,编译系统的作用是把高级软件语言翻译成机器可以识别的指令(也叫机器语言)。高级语言带来了极大的便利性和易用性,因此用CPU&GPU实现同等功能的软件开发周期要远低于FPGA&ASIC芯片。沿着CPU-&ASIC的方向,芯片中晶体管的效率越来越高。因为FPGA&ASIC等芯片实现的算法直接用晶体管门电路实现,比起指令系统,算法直接建筑在物理结构之上,没有中间层次,因此晶体管的效率最高。  本质上软件的操作对象是指令,而CPU&GPU则扮演高速执行指令的角色。指令的存在将程序执行变成了软件和硬件两部分,指令的存在也决定了各种处理器芯片的一些完全不同的特点以及各自的优劣势。  FPGA&ASIC等芯片的功能是固定的,它们实现的算法直接用门电路实现,因此FPGA&ASIC编程就是用门电路实现算法的过程,软件完成意味着门电路的组织形式已经确定了,从这个意义上,FPGA&ASIC的软件就是硬件,软件就决定了硬件的组织形式。软硬件一体化的特点决定了FPGA&ASIC设计中极端重要的资源利用率特征。利用率指用门电路实现算法的过程中,算法对处理器芯片所拥有的门电路资源的占用情况。如果算法比较庞大,可能出现门电路资源不够用或者虽然电路资源够用,但实际布线困难无法进行的情况。  存在指令系统的处理器芯片CPU&GPU不存在利用率的情况。它们执行指令的过程是不断从存储器读入指令,然后由执行器执行。由于存储器相对于每条指令所占用的空间几乎是无限的,即使算法再庞大也不存在存储器空间不够,无法把算法读入的情况。而且计算机系统还可以外挂硬盘等扩展存储,通过把暂时不执行的算法切换到硬盘保存更增加了指令存储的空间。2、芯片计算性能  深度学习的学名又叫深层神经网络(DeepNeural Networks),是从人工神经网络(Artificial Neural Networks)模型发展而来。我们以深度学习作为切入点来分析各个芯片的性能。图3是神经网络的基本结构,模型中每一层的大量计算是上一层的输出结果和其对应的权重值这两个矩阵的乘法运算。图3 神经网络基本结构  横向对比CPU,GPU,FPGA,ASIC计算能力,实际对比的是:1、硬件芯片的乘加计算能力。2、为什么有这样乘加计算能力?3、是否可以充分发挥硬件芯片的乘加计算能力?  带着这三个问题,我们进行硬件芯片的计算能力对比。CPU计算能力分析  这里CPU计算能力用Intel的Haswell架构进行分析,Haswell架构上计算单元有2个FMA(fused multiply-add),每个FMA可以对256bit数据在一个时钟周期中做一次乘运算和一次加运算,所以对应32bit单精度浮点计算能力为:(256bit/32bit)* 2(FMA) * 2(乘和加) = 32 SP FLOPs/cycle,即每个时钟周期可以做32个单精度浮点计算。  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所示,所以导致计算通用性强,可以处理计算复杂度高,但计算性能一般。图6 CPU结构  通过CPU计算性能分析,直接提高计算性能方向为:增加CPU核数、提高CPU频率、修改CPU架构增加计算单元FMA(fusedmultiply-add)个数。这3个方向中,直接增加CPU核数对于计算能力提升最高,但是带来芯片功耗和价格的增加,因为每个物理核中只有30%的晶体管是计算单元。提高CPU频率,提升的空间有限,而且CPU频率太高会导致芯片出现功耗过大和过热的问题,因此英特尔等芯片制造商目前走多核化的路线,即限制单个微处理器的主频,通过集成多个处理器内核来提高处理性能。修改CPU架构增加计算单元FMA个数,目前英特尔按照“Tick-Tock”二年一个周期进行CPU架构调整,从2016年开始放缓至三年,更新迭代周期较长。GPU计算能力分析  GPU主要擅长做类似图像处理的并行计算,所谓的“粗粒度并行(coarse-grainparallelism)”。图形处理计算的特征表现为高密度的计算而计算需要的数据之间较少存在相关性,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.29TFLOPs/s即每秒4.29T峰值浮点计算能力。  GPU芯片结构是否可以充分发挥浮点计算能力?GPU同CPU一样也是指令执行过程:取指令 -& 指令译码 -& 指令执行,只有在指令执行的时候,计算单元才发挥作用。GPU的逻辑控制单元相比CPU简单,所以要想做到指令流水处理,提高指令执行效率,必然要求处理的算法本身复杂度低,处理的数据之间相互独立,所以算法本身的串行处理会导致GPU浮点计算能力的显著降低。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 SignalProcessing),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。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、平台性能和功耗比较  由于不同的芯片生产工艺,对芯片的功耗和性能都有影响,这里用相同工艺或者接近工艺下进行对比,ASIC芯片还没有商用的芯片出现,Google的TPU也只是自己使用没有对外提供信息,这里ASIC芯片用在学术论文发表的《DianNao: A Small-Footprint High-Throughput Acceleratorfor 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。四、总结与展望  处理器芯片各自长期发展的过程中,形成了一些使用和市场上鲜明的特点。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系统上运用XilinxFPGA加速工作负载处理技术,以打造更高性能、更高能效的数据中心应用。微软:  早在2014年,Microsoft就将Altera FPGA运用在其Bing搜索的业务中,使Bing的搜索处理量提升了一倍,搜索时间缩短了29%。2015年,微软进一步将FPGA运用于深度学习领域。2016年,微软体系结构顶级会议Micro上发表的《A Cloud-ScaleAcceleration 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倍。注:文章中少数材料来自互联网,如侵权,请联系,谢谢。
分类:(原创)前沿技术圈
登录后参与讨论。点击
请勿发表无意义的内容请勿发表重复内容请勿发表交易类内容禁止发表广告宣传贴请使用文明用语其它
淫秽色情政治倾向人身攻击抄袭剽窃广告刷屏恶意挖坟冒充他人其它

我要回帖

更多关于 fpga cpu 区别 的文章

 

随机推荐