为什么CPU主频最高的cpu比FPGA快那么多,但是却说FP

搞定零延时前端智能
USB Type-C PD充电器快设计
实践理解应用RTOS各组件
物联网安全从小白到大师
实战让你秒懂mbed OS
&08-08&20:00
&08-15&20:00
&08-11&20:00
&08-25&10:00
移入鼠标可放大二维码
FPGA真的能取代CPU和GPU吗?
来源:雷锋网 作者:黄鑫日 10:39
[导读] 最近我们看到一篇文章,说FPGA可能会取代CPU和GPU成为将来机器人研发领域的主要芯片。文章列举了很多表格和实验数据,证明了在很多领域FPGA的性能会极大优于CPU。并且预言FPGA将来可能会取代CPU和GPU现在的地位。但事实真的是这样吗?
  最近我们看到一篇文章,说FPGA可能会取代CPU和GPU成为将来机器人研发领域的主要芯片。文章列举了很多表格和实验数据,证明了在很多领域FPGA的性能会极大优于CPU。并且预言FPGA将来可能会取代CPU和GPU现在的地位。但事实真的是这样吗?要搞清楚这个问题,我们首先得对CPU和FPGA都有足够的了解。
  FPGA这个词可能很多人都有所耳闻,尤其是理工科的同学们大多数应该都自愿或被迫被这个词刷屏过。但要真追究起来FPGA到底是个什么东西。很多非相关专业的人都会陷入一脸迷茫。不过说起开发板,可能知道的人就很多了,有些人会以为FPGA就是开发板。但实际上FPGA指的只是开发板上面的那一小块芯片而已(下图黄圈处),整个开发板的其余部件都是为了协同它工作,让它发挥出它的性能而存在的。
  FPGA开发板,/youtube
  可即使有心的同学曾经查到了这里,或许也搞不懂它和CPU到底有什么区别,毕竟把它的位置换成CPU,整个开发板看起来就变成一块普通的电脑主板了嘛,感觉简直分分钟接上硬盘和显示器就可以开始LOL了。确实,不管从外形上来看还是实际的功能上来看,FPGA和CPU都表现得太像了,但在这两者相似的外表之下,其内部构造其实有着根本性的差别,而这种差别也正是FPGA会被很多人认为适合机器人开发的原因,因为它的构造决定了它在处理机器人需要的很多运算,尤其是在机器感知这方面的处理时的速度会比CPU快很多,同时还能将功耗控制在很低的水平。
  CPU的构造
  在讲FPGA之前,我们先从大家比较熟悉的CPU的数据处理方式讲起。首先需要强调的一点是,处理我们指令的计算机元件本身是无法理解我们的指令的,它们只能理解作为组成CPU最基本的元件&&晶体管能实现的两种状态:&开&和&关&的含义,对应的就是1和0这两个机器码数字,这也是计算机的整个体系都基于二进制建立的原因。而为了让我们下达的各种各样的指令变成CPU能理解的0和1,CPU需要一个专门的译码器来翻译我们的指令。这个过程分为两步:&取指&(从一个专门存放指令的存储器中将需要执行的指令提取出来)和&译码&(根据特定的规则将指令翻译成计算单元能够理解的数据)。CPU的结构大概是这样的
  via wikipedia
  其中的Control部分就是控制取指、译码等整个流程的部分,Cache是在高速的CPU与相对低速的内存间为了提高从内存获得指令的效率而设置的一个临时指令存储器,DRAM则是速度比较慢的那一部分指令存储器。可以看到,真正的计算单元ALU只占了CPU结构中不大的一部分。这样的设计是有原因的。CPU存在的目的是作为通用计算机的处理核心,注意&通用&二字,这意味着块核心必须具备处理各式各样千奇百怪的指令要求的能力,并且因为要处理来自多个设备的请求,它必须拥有随时中止目前的运算转而进行其他运算,完成后再从中断点继续当前运算的能力。把这些话看完你可能都快睡着了,但在CPU内这些都要求在一瞬间完成。所以CPU需要有非常复杂的逻辑控制单元和这套独特的指令翻译结构。这都是保证CPU能顺利完成它的使命的必须的东西。可以说,在计算效率和通用性上CPU牺牲前者选择了后者。
如今,物联网浪潮已然席卷至汽车电子产业,发动机控制系统、底盘控制系统和车身电子控制系统已模型初显,安全...
ADAS市场或破千亿
国产汽车雷达将爆发
抢占智能汽车制高点
为自动驾驶保驾护航
电动汽车面临的挑战
德州仪器(TI)
版权所有 & 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-当前位置:
比CPU快40倍?FPGA成服务器香饽饽
如今的芯片市场可谓备受关注,特别是服务器市场对于FPGA在处理数据运算上的优势有新的需求,连芯片巨头英特尔也开始致力于整合FPGA和CPU,未来FPGA进入服务器领域值得关注。
  2.FPGA结合CPU性能翻倍.  FPGA的作用之一,就是给芯片设计提供一个原型设计,比如CPU芯片,可以在FPGA上验证无误后再流片。因为进行一次流片的费用很高,所以原型系统可以最小程度降低风险。  FPGA  另外,FPGA也可以直接作为小批量的产品组件。FPGA主要用于对性能比较敏感的部分功能实现,尤其是在网络,音视频处理,通信基带处理方面。随着高层次综合技术的成熟,FPGA的编程也越来越智能化。  目前,这个领域相对还比较冷门,掌握FPGA的人也是少数,所以它的职业前景也被广泛看好,其应用广泛,并且处在技术的核心地位。  CPU是通用处理器,追求一个时钟频率做单一操作,通过提高主频来加速性能。而用FPGA设计专用电路可以在一个时钟周期实现更多操作,虽然主频降低但性能提高。所以基于FPGA架构的芯片在节能降温方面也丝毫不逊于同样以此着称的ARM。  Altera计算和存储业务部总监Michael Strickland则评论说:&Altera FPGA帮助微软满足了高性能计算的需求,使其数据中心能够在一定的成本、功效和空间限制下保持运行。在计算架构上增加精细粒度FPGA加速功能后,数据中心的能力超过了商用服务器设计的能力。&  当前,软件定义数据中心已经逐渐成为行业主流趋势,FPGA作为一种,在并行运算、数据交换和图像处理方面都有上佳的表现。对于一般存储服务器来说,对CPU的运算要求并不高,FPGA在性能和能耗上的表现使其和CPU整合时能能爆发出巨大的能量。Intel发言人也表示,将FPGA和服务器的中央处理器整合在同一模块,可能会将速度提升到两倍。&
责任编辑:Voyager
免责声明:
本文仅代表作者个人观点,与
OFweek电子工程网
无关。其原创性以及文中陈述文字和内容未经本站证实,
对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅
作参考,并请自行核实相关内容。
邮箱/用户名:
忘记密码?
用其他账号登录: QQ
请输入评论
广东省/深圳市
四川省/成都市
广东省/深圳市
广东省/深圳市
广东省/深圳市
广东省/深圳市
北京市/海淀区
广东省/深圳市
广东省/深圳市
广东省/惠州市
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:查看: 119|回复: 4
为什么 CPU 等的频率可以达到 GHz 级,但一般的 FPGA 芯片的频率只能在百 MHz 级呢?
个人理解,欢迎讨论。我认为这是由FPGA的结构特点决定的:1、芯片支持的频率高低是由内部寄存器与寄存器之间的走线延迟决定的;2、FPGA是可编程器件,布线资源是要尽量设计成可通用,所以其走线延迟会比较大,也是速度上不去的原因,CPU是ANSIC ,其布线资源是定制的,所以可以更高频率;3、现在有一些FPGA器件支持接口上的高速,内部通过串并转换到低速处理;
ASIC和可编程的区别。假设FPGA的一个32bit加法器跑在100M,CPU的32bit加法器跑在1000M。但是FPGA可以同时提供500个100Mhz的32bit加法器用于计算,性能远高于CPU。
提问者所说的CPU和FPGA都是ASIC,CPU是有固定的逻辑组成,各个逻辑之间的时延关系在一定条件下都是确定的,在设计之初就会考虑进来。FPGA是由大量重复的逻辑组成,但各个逻辑可以多次配置,以实现不同的逻辑功能。提问者所说的FPGA速度是指在FPGA内部实现某个具体的逻辑功能之后,其同步电路的时钟最快能到多少。&&CPU的速度是在制造之前就基本确定了,同样FPGA的最高速度在其制造之前也是确定的,但提问者所说的FPGA的速度,是在FPGA实现某个具体功能速度的时候确定的,如将一个CPU的core在FPGA上实现,就需要将CPU的逻辑映射到FPGA内部的逻辑中,在这个过程FPGA 实现工具会计算其使用的cell,连线配置情况,然后再进行优化,使其速度最优,但这个速度就会由具体的设计决定,如两个触发器之间,如果逻辑比较复杂,其时延就会比较长,整体的同步时钟频率就不能跑太高,否则逻辑功能就是不正常。除了逻辑资源,连线在FPGA中也是一种资源,因为硬件是固定的,连线的功能是根据配置信息决定的。故当资源利用比较多的时候,走线资源就变成瓶颈,走线的延时影响将会越来越大,所以经常会遇到资源利用率超过90%的时候,综合频率会急剧下降。总的而言,cpu是一个功能确定的东东,而fpga是一个可配置平台,其功能未定。专用的东东可定向优化,通用的东东则只能照顾大多数情况。题外话,现在fpga也会有固化一个CPU在里面的情况,这样就能兼顾CPU的高速和FPGA的功能可重构。
使用CPU和使用FPGA是不同的思维方式。CPU是通用处理器,追求一个时钟频率做单一操作,通过提高主频来加速性能。而用FPGA设计专用电路可以在一个时钟周期实现更多操作,虽然主频降低但性能提高。
Powered by 科技台 X3.2
kejitai Inc.为什么FPGA适合做高速处理?个人看法~~
我在我的同学面前炫耀FPGA是做高速处理的,可是,当人家问我,我的时钟频率能达到多少时,我说利用PLL能拉到200MHz,他说,这么低啊?我的手机频率都是1.5G的呢。
我无语。。。
后来才了解到,他的1.5G要想完成一个运算的话,因为是串行处理,所以要n个时钟周期啊,而FPGA虽然起点(时钟频率慢),可是通过并行,处理数据的能力极大提高。
就好比背粮食。
一个长跑冠军和一群普通人背,长跑冠军跑得再快,也是一个人啊,而FPGA可以造出n个普通人,一起并行奔跑,最终的粮食总量不知道是长跑冠军的多少倍呢。
我也是不是很明白,在网上找了一下,表示深有感触,发了一个帖子,不对地方还请指正啊。。。
顶~~看完了给个评论啊?
怎么都不说说啊?
难道是我这个问题太弱智了?
菜鸟求指教啊~~
其实包括出的那些书,应该以通俗的语言先给大家介绍一下,结果上来就内部结构,寄存器.................. 指令,弄得初学者昏头转向的....................没必要 不友好
所以说,有时候老外写的书比国内出版的书容易懂,虽然人家用英文表达但是容易理解;而国内的书里面用很多专业名词去解释另外一个专业名词,或者纯粹翻译器件手册,很不靠谱啊。
lz你自己不是说清楚了吗,就是并行啊;高速是指信号处理速度,不是指pll频率啊;比如fpga可以很随便就搞个100路的高速PWM,cpu来作就比较费解了可能还做不了
其实这也是硬件完成和软件完成的区别
Everything is relative.
FPGA最大特点是可以并行处理 用在电脑形容 就是 N核CPU 只要FPGA闸数够跟你的架构容许的话
挺浅显的道理
与门的时钟算多少? 它的速度有多快? 以后炫耀前多做功课哈哈
可以做分布式算法
主要是并行处理。
更通俗点说 ,&&FPGA就像 MCU 里&&外设触发外设.
那么谁能用通俗的语言再给我们补充一下,
为什么FPGA适合做高速处理?
FPGA超越了DSP吗?
另外具体的哪个公司的哪个项目用到FPGA,
我们日常生活中的哪个产品用到FPGA啊?
回复【15楼】xtqxtq111
-----------------------------------------------------------------------
目前的 TI C2000 DSP 越来越趋向专用集成电路了 , 内部的架构为了实现实时处理电机的反馈信号,
数据不通过CPU了 ,&&电流闭环: timer 触发 ADC ,ADC 数字比较 触发 PWM .
当目前市面上设计的DSP 或者 ASIC 已经无法满足您设计需求的时候 , FPGA就登场了.
FPGA和DSP本来就不是一个层面上的东西。
用FPGA实现数字信号处理等于自己写一个专门的DSP内核,专用 vs 通用。
回复【15楼】xtqxtq111&&
-----------------------------------------------------------------------
高速你是指工作频率高,延迟低,吞吐量大?考虑一下就明白了。
FPGA超越了DSP,因为DSP芯片的设计就是能够用FPGA验证的,不是一层的东西。
用到FPGA的项目和地方多了去了,但是消费电子不会用这个,功耗,成本都和ASIC/批量处理器,不可比。
到底市面上什么产品在用??
我见过最多的就是 示波器上用到 fpga的。&&其他 还有 电信级别的主交换机用到fpga。&&其他消费电子和工业控制没有看到过 fpga
明年给你们看一个,我用在工业控制上了。
回复【18楼】rei1984
-----------------------------------------------------------------------
我们公司几乎所有产品上都有FPGA,很多不止一个。
当市面上的IC都不满足你需求的时候,或者价格,或者计算能力和延时,或者IO……
你就可以考虑FPGA啦。
运动控制卡 (原文件名:rt.jpg)&&这个不是我做的
回复【15楼】xtqxtq111
那么谁能用通俗的语言再给我们补充一下,
为什么fpga适合做高速处理?
fpga超越了dsp吗?
另外具体的哪个公司的哪个项目用到fpga,
我们日常生活中的哪个产品用到fpga啊?
-----------------------------------------------------------------------
同样期待能有大侠总结一下&&
学过数字电路应该都明白为什么吧
回复【楼主位】xtqxtq111&&
后来才了解到,他的1.5g要想完成一个运算的话,因为是串行处理,所以要n个时钟周期啊,而fpga虽然起点(时钟频率慢),可是通过并行,处理数据的能力极大提高。
-----------------------------------------------------------------------
错误!!FPGA 也一样(比如排序或FFT FPGA 能一个周期吗?)
FPGA 速度本来就没有比MASK CPU 快
FPGA是以特殊架构的资料处理量取胜.
回复【24楼】j-link&&
-----------------------------------------------------------------------
嗯嗯,FPGA速度并不是快,比起dsp来,也不特别高速处理,关键的地方就是fpga灵活,能配置成各种各样的器件,能把好多个器件的功能集中在一块芯片上。开发人给它的处理逻辑,它才有处理能力。DSP没有几十G的数据地址总线,但FPGA可以配置出来。总之,FGPA是灵活的东西。
回复【15楼】xtqxtq111
那么谁能用通俗的语言再给我们补充一下,
为什么fpga适合做高速处理?
fpga超越了dsp吗?
另外具体的哪个公司的哪个项目用到fpga,
我们日常生活中的哪个产品用到fpga啊?
-----------------------------------------------------------------------
消费类的东西价格敏感,所以在日常生活中用FPGA还不现实
目前手机基站的信号处理板卡普遍采用了FPGA作为主要部件之一,算是离一般人最近的应用了吧
套用那句广告词:你看不见他,他就在为你服务
回复【25楼】heicnhei1
-----------------------------------------------------------------------
哦,那你说说最快的芯片是什么?难道是电脑内核?酷睿之类的?
就是说目前最快的芯片是什么?
比如对称16阶FIR滤波器,用8个乘法器,12个加法器。采样20MHz数据输入同时,数据也在20MHz处理输出,但是对于只有一个处理器的DSP,想在每50ns内处理8次乘法12次加法,可以想象多么难,数据还要再写入存储器。从这方面,FPGA完胜DSP
额,是这样的吗?
虽然我不懂dsp,可我知道有并行的dsp,网上搜并行dsp有一大堆呢,
对不对啊?
能告诉我fpga在高速领域的具体实例吗?
回复【29楼】xtqxtq111&&
-----------------------------------------------------------------------
FPGA一般是不是都会配合DSP啊,我见很多DSP旁边都有一个FPGA
我用FPGA做过串行LED灯光控制器,要求8路同时控制,单片机就做不了了。
其实FPGA最大的优点是灵活,可以配制各种所需的硬件资源,包括MCU,DSP,单片机等等。
而且现在的FPGA已经内嵌DSP,ARM等硬核资源,甚至AD和DA,集成度更高,向着SOC化的趋势发展了。
回复【29楼】xtqxtq111
额,是这样的吗?
虽然我不懂dsp,可我知道有并行的dsp,网上搜并行dsp有一大堆呢,
对不对啊?
能告诉我fpga在高速领域的具体实例吗?
-----------------------------------------------------------------------
上面说了,DSP的大量并行计算和IO吞吐能力不如FPGA
DSP的乘法器资源是比较有限的,加上是处理器大多单线程操作,做大量吞吐量的并行计算远不如FPGA方便
拿手机主频鄙视别人的人,不要抱什么希望叫他明白他根本不关心的东西
可编程逻辑也不是什么好东西
FPGA 是能做高速,如果做一颗 USB2.0 或 SDIO 全速能办的到吗?
如果真的能办到,市场能接受价格吗?
我认为目前实际上的FPGA只能省下 PCB 大小及取代TTL,至于 DSP 处理后的资料最后还是传给CPU处理,浪费通讯时间~~~
fpga快不快要看场合的,比如我运送沙子,一百条马路我用牛车拉也比用汽车跑一条马路来的快,但是如果我要运一头大象,总不可能把大象劈开一百份用牛车运,这时汽车明显要快!
回复【29楼】xtqxtq111
-----------------------------------------------------------------------
示波器是个很好的例子,通常使用多片高速adc并行分时采样模拟更高速的adc,对于fpga来说多片高速adc压力不大,但是用dsp处理这样的数据是很恐怖的。fpga比较适合高带宽低复杂度的算法,常应用于系统前端,dsp更适合后端低带宽高复杂度算法的处理!
回复【35楼】nono2000&&
fpga 是能做高速,如果做一颗 usb2.0 或 sdio 全速能办的到吗?
如果真的能办到,市场能接受价格吗?
我认为目前实际上的fpga只能省下 pcb 大小及取代ttl,至于 dsp 处理后的资料最后还是传给cpu处理,浪费通讯时间~~~
-----------------------------------------------------------------------
现在低端FPGA的普通IO速度都不止1GHz了
当初想自己玩玩FPGA,可一看这么一大堆脚密密麻麻的,唉,我手笨玩不转,之前48P的STM32手工用0.12的漆包线都飞2天,FPGA看见手的发抖,此物不宜DIY *_*!
我角得吧,FPGA,它终究是个硬件--跑软核的不说,那个就是个FPGA实现的CPU了。HDL,一种用高级语言造硬件的东西。HDL造出来还是一堆门啊,触发器之类的集合。
DSP,它是个专用的跑软件的东西。
这是个软件VS硬件的较量
谁也不能替代谁,你说电脑的南北桥能用DSP/CPU实现吗?要是PC产量不够,估计南北桥得用FPGA做而不会有专用芯片,当年龙芯平台某个桥貌似就是FPGA的。还有很多高速简单的处理,比如数十G的收发器,会把DSP工程师写到吐血的。
很多高复杂度的算法FPGA实现还是非常困难,不过现在已经有软件功能硬件化的趋势了,语音视频编码都有人在用FPGA实现了。
我真正纠结的是,如果产品上量了,还会用FPGA吗?他们会弄个专用片子么。不过想想那么多有量的产品也在用单片机,而没有弄个专用芯片来搞,感觉FPGA还是有很大空间存在的。
回复【39楼】albert_w
我角得吧,fpga,它终究是个硬件--跑软核的不说,那个就是个fpga实现的cpu了。hdl,一种用高级语言造硬件的东西。hdl造出来还是一堆门啊,触发器之类的集合。
dsp,它是个专用的跑软件的东西。
这是个软件vs硬件的较量
谁也不能替代谁,你说电脑的南北桥能用dsp/cpu实现吗?要是pc产量不够,估计南北桥得用fpga做而不会有专用芯片,当年龙芯平台某个桥貌似就是fpga的。还有很多高速简单的处理,比如数十g的收发器,会把dsp工程师写到吐血的。
很多高复杂度的算法fpga实现还是非常困难,不过现在已经有软件功能硬件化的趋势了,语音视频编码都有人在用fpga实现了。
我真正纠结的是,如果产品上量了,还会用fpga吗?他们会弄个专用片子么。不过想想那么多有量的产品也在用单片机,而没有弄个专用芯片来搞,感觉fpga还是有很大空间存在的。
-----------------------------------------------------------------------
有一定复杂程度、定制化的产品,基本上只能用有灵活性的芯片来主打,在一定程度上能降低市场风险
专业领域,手机基站普遍使用FPGA是个非常典型的例子
手机基站那么大的量,如果换成专用芯片,还是能节约不少物料成本,并降低功耗的
问题是,一旦标准改了、升级了,那些板子就得全部废掉,重新设计、测试,系统成本就上去了
这个帖子看了好多次了,忍不住近来罗嗦几句:
1、数字信号处理主要的功能可以分为两类,一类是滤波,比如FIR,一类是变换,比如FFT,而这两类运算又可以分解为基本的乘加运算;注意,是乘加,而不是乘法和加法,在FPGA和DSP中,乘加是可以在一个时钟周期内完成的;这是DSP和FPGA区别于通用处理器的特征之一。
2、运算单元,FPGA可以包含成百上千个乘法器,DSP一般有2到4个乘法器,而通用处理器一般是ALU+FPU;DSP有专门的外部总线结构支持多片并行处理系统,通用处理器一般没有;
3、DSP也有ALU,但DSP区别于通用处理器的地方在于,其乘法运算器可以在一个周期内完成乘加运算,特殊的多总线结构,地址空间和数据空间独立寻址(超哈佛结构),特殊的地址产生单元(FFT蝶形流图/FIR);
4、其他高性能处理器也可以用于高速信号处理:MPC/PPC,GPGPU,BE(Cell)
关于时钟周期、指令周期、流水线等概念就不赘述了;
比如,我们要做128路的AD采集设备,每通道最大采样率100k,任何cpu也是无法胜任的,SPI接口数量,等等无法满足要求
而FPGA灵活性强,可以配置128路SPI(时钟数据两根线就够了),处理起来非常方便灵活
回复【35楼】nono2000
-----------------------------------------------------------------------
用fpga处理usb不是犯傻就是犯贱,有这么多的usb&&ic&&,非得用FPGA,如果你有量,而且有现成的IC,用FPGA都不靠谱,特别是通用,民用领域,没人会用FPGA的。
dsp如果不处理,你打算用什么速度接收?
回复【30楼】yandalyf
-----------------------------------------------------------------------
我是没用过,都是FPGA独立完成的,我做的东西不多啊,
这个帖子,我得经常看看,一直还接受不了这么多。。。
串并行计算的所占比例问题,
这个可以简单看一下阿姆达尔定律(虽然比较落后),这也是世界性难题,如何尽可能多的转换成并行计算。。。
/wz/CRXDQWHFA/11204.htm
用FPGA不怕PCB画错, 这就是我的感觉。
并行计算不是FPGA的强项,那是GPU的主场。FPGA主要是并行信号领域比较牛叉。
首先,楼主只是个初学者,基本的概念还很模糊。建议不要为了炫耀而学技术,为爱好可以理解,为糊口可以理解,为炫耀就没有价值了。
新东西都是在老东西的基础上产生的,一般说来只有时代差异,但没有太大的级别差异。电子行业中的新技术其实不过是商业规模化而已,不用过多在意。
脚踏实地,先学好手边的再说。
很形像的比喻,赞同。
回复【楼主位】xtqxtq111&&
-----------------------------------------------------------------------
有一点一样的感觉!!
呵呵,学了不少东西
回复【36楼】rx_78gp02a
-----------------------------------------------------------------------
嗯 说的很对啊
阿莫电子论坛, 原"中国电子开发网"为什么CPU主频比FPGA快那么多,但是却说FPGA可以加速? - 业界 -
为什么CPU主频比FPGA快那么多,但是却说FPGA可以加速?
  CPU的主频高达几个GHz,FPGA的速率往往在几百兆。但是,往往我们会说FPGA会给CPU进行加速。   虽然CPU主频很高,但其是通用处理器,做某个特定运算(如信号处理,图像处理)可能需要很多个时钟周期;而FPGA可以通过编程重组电路,直接生成专用电路,加上电路并行性,可能做这个特定运算只需要一个时钟周期。   假设我们用FPGA完整的实现了CPU,然后再跑的话,的确比CPU慢。问题是FPGA不会那么干,它会直指问题本质,解决问题。      即使我们用FPGA实现一个CPU,也是为了做一些芯片验证或者说需要一些需要CPU和FPGA需要紧密结合的场景,这种场景现在也逐步由SoC的FPGA实现了。      举个具体的例子,比如有两个数组,其中有256个32位数,我们现在要把它们对应相加变成一个数组,用CPU写最快大概是这样子的:   r[0] = a[0] + b[0];   r[1] = a[1] + b[1];   ...   r[255] = a[255] + b[255];   当然也可能会这么写(在分支预测准确,指令缓存不大的情况下可能更快):   for (int i = 0; i & 255; i++)   r[i] = a[i] + b[i];   CPU指令流水线   根据之前描述的基础,指令进入流水线,通过流水线处理,从流水线出来的过程,对于我们程序员来说,是比较直观的。   I486拥有五级流水线。分别是:取指(Fetch),译码(D1, main decode),转址(D2, translate),执行(EX, execute),写回(WB)。某个指令可以在流水线的任何一级。      流水线的数量不可能无限制增加,流水线的加速也有很多风险。即使流水线可以无限制增加,不管CPU的流水线又多少条,每个指令执行都必须顺序执行。对速率的提升也是有限的。   对于上图中的流水线有一个明显的缺陷。对于下面的指令代码,它们的功能是将两个变量的内容进行交换。
  1  2  3
  XORa,b  XORb,a  XORa,b
  第二条xor指令需要第一条xor指令计算的结果a,但是直到第一条指令执行完成才会写回。所以流水线的其他指令就会在当前流水级等待直到第一条指令的执行和写回阶段完成。第二条指令会等待第一条指令完成才能进入流水线下一级,同样第三条指令也要等待第二条指令完成。   这个现象被称为流水线阻塞或者流水线气泡。   对FPGA来说,也可以用上面相同的写法,不同在于:   CPU是一个一个加法计算,而FPGA排好逻辑电路,在一个时钟周期内计算完毕。就算CPU主频比FPGA快100倍也赶不上啊。   计算机最基本的功能就是运算了,其中最基本的又要属加法运算。我们知道计算机使用二进制来保存和处理数据,因此这里的加减法运算都是用二进制进行。下面雅乐网总结了一些运算器中加法器的设计。
  二进制加法
  一位的二进制加法非常简单,因为只有四种情况   0+0=0 进位0   0+1=1 进位0   1+0=1 进位0   1+1=0 进位1   多位的二进制加法 和十进制类似,每一位上两个数相加后再加上进位就可以了   FPGA半加器   半加器可以实现两个1位的二进制数字相加,并且输出结果和进位。   真值表:      一位半加器真值表   由表中可以看见,这种加法没有考虑低位来的进位,所以称为半加。   输出和:A和B一个为0 一个为1的时候输出1 两个0或两个1输出0 因此 可以用异或门连接。   进位:只有AB均为1的时候进位输出1 进位Cout = AB 用与门连接。      一位半加器   FPGA全加器   全加器在半加器的基础上 增加了进位 它输入三个数字 两个加数 和 一个进位 Cin,输出结果 和 进位      一位全加器真值表   从真值表很容易写出如下逻辑表达式   S=P异或Cout 其中P=A异或B   Cout=P&Cin+G 其中G=A&B      一位全加器   四位行波加法器   将四个全加器 每一个的仅为输出连接到下一个的进位输入 就可以构成一个4位串行加法器了      四位行波加法器   这样构成的加法器连接起来很简单,但是也有不足:每一个全加器计算的时候必须等待它的进位输入产生后才能计算,所以四个全加器并不是同时进行计算的,而是一个一个的串行计算。这样会造成较大的延迟。   超前进位加法器(Carry-Lookahead Adder,CLA)   超前进位加法器的思路是提前算出每一位上的进位。   分析每一个全加器的局部   一个全加器 A B Cn 如果有两个或两个以上的1 那么进位Cn+1就是1   因此 Cn+1 = AB + ACn + BCn = AB + Cn(A+B)   记生成(Generate)信号:Gi=Ai&Bi   传播(Propagate)信号:Pi=Ai+Bi   那么Ci+1=Gi+Pi&Ci   根据这个递推关系,可以推导出每一位的进位   每一位的进位跟前一级进位有关,前一级 又跟 前一级的前一级有关 一直向前 最终是和C0相关。而最开始的第一位C0和A0 B0都是已知的      这样算出结果只需要经过三个门延迟就可以了。   随着位数的增加,进位的计算公式会越来越复杂。32位的进位计算需要32与门   所以我们需要更多的计算位宽或者更大的数组,或者矩阵的运算的时候,我们使用FPGA的优势就体现出来。再多的计算,也就是放置更多的逻辑资源。   FPGA的并行是真并行,CPU完全没得比。CPU如果想并行最多也就是让多个核并行,但是对于大部分算法实现来说,如上例,多个核之间的同步调度开销远远大于计算开销,就算多个核之间的调用开销可以做的很小,一般CPU也就那几个核,而FPGA只要门足够,想并行几路就可以并行几路。   所以在做可并行的计算密集型任务时,比如信号处理,网络传输等等FPGA可以帮上忙;但是如果做我们常见的串行为主的任务而言,FPGA的确远远比不上CPU。   FPGA 是配角   使用FPGA不一定总能加速,只是在某些强计算和数据处理的方面,因为其硬件电路并行运行和有很多DSP硬核资源供调用的特点,可以工作得更出色。FPGA本身也只是辅助角色,起控制的还是CPU本身,所以FPGA并不能代替CPU,只是在完成一件大任务的过程中将某部分任务分解给FPGA可以更好地一起完成任务。在这过程中也会有额外的开销产生,在某些场合,可能用了FPGA而效果更差也是有的。   另外,通常说的使用FPGA加速比CPU和GPU省电,是指在完成同样的任务下,FPGA耗费的电力比起CPU和GPU更少一些,相对而言的,并不是说FPGA本身就一定省电。   FPGA的弱点   1.开发周期长。需要对特定的应用编写特定的FPGA。只要干的事情稍有不同,一般来说FPGA代码就要重新写一遍或者是至少要修改很多东西。开发代价和码农码几行代码完全不可比。而且一般需要若干工程师花费若干周才能搞的定。重点是会写的人还不多。   2.并不是所有东西都适合FPGA。FPGA适合于做那些可并行计算的东西,例如矩阵运算。如果是一些判断类的问题,FPGA算得并没有CPU快(这个时候时钟周期才是关键因素)。所以现实中都是有人来分析,在整个任务中有哪些地方可以并行计算,把这些地方替换为FPGA卡。   由于现在机器学习、大数据比较火,里面矩阵运算成千上万,所以没有出现定制的ASIC之前,FPGA加速还是业界主流。现在百度、微软、谷歌等公司都已经把FPGA加速运用到了实际的商业运营中。   注:部分内容整理自《百度文库》及《知乎》
换一换
& 科技讯版权所有

我要回帖

更多关于 主频 的文章

 

随机推荐