我知道,我对与电子有关的所有事情都很着迷,但不论从哪个角度看,本日的现场可编程门阵列(FPGA),都显得“鹤立鸡群”,我就呵呵了。如果在这个智能时期,在这个领域,想拥有一技之长的你还没有关注FPGA,那么天下将抛弃你,时期将抛弃你。小张绝非骇人听闻哦。
好了

从几个方面来先容一下GPU和FPGA:

从峰值性能来说,GPU(10Tflops)远远高于FPGA(<1TFlops)。GPU上面成千上万个core同时跑在GHz的频率上还是非常壮不雅观的,最新的GPU峰值性能可达10TFlops以上。GPU的架构经由仔细设计(例如利用深度流水线,retiming等技巧),在电路实现上是基于标准单元库而在critical path上可以用手工定制电路,乃至在必要的环境下可以让半导体fab依据设计需求微调工艺制程,因此可以让许多core同时跑在非常高的频率。相对而言,FPGA首先设计资源受到很大的限定,例如GPU如果想多加几个core只要增加芯片面积就行,但FPGA一旦你型号选定了逻辑资源上限就确定了(浮点运算在FPGA里会占用很多资源)。而且,FPGA里面的逻辑单元是基于SRAM-查找表,其性能会比GPU里面的标准逻辑单元差好多。末了,FPGA的布线资源也受限定(有些线必须要绕很远),不像GPU这样走ASIC flow可以随意布线,这也会限定性能。
除了芯片性能外,GPU相对付FPGA还有一个上风便是内存接口。GPU的内存接口(传统的GDDR,最近更是用上了HBM和HBM2)的带宽远好于FPGA的传统DDR接口,而众所周知做事器端机器学习算法须要频繁访问内存。
但是从灵巧性来说,FPGA远好于GPU。FPGA可以根据特定的运用去编程硬件(例如如果运用里面的加法运算非常多就可以把大量的逻辑资源去实现加法器),但是GPU一旦设计完那就没法改动了,没法根据运用去调度硬件资源。目前机器学习大多数适宜利用SIMD架构(即只需一条指令可以平行处理大量数据),因此用GPU很适宜。但是有些运用是MISD(即单一数据须要用许多条指令平行处理,微软在2014年ISCA paper里面就举了一个MISD用于并行提取feature的例子),这种情形下用FPGA做一个MISD的架构就会比GPU有上风。不过FPGA的编程对付程序员来说并不随意马虎,所以为了能让机器学习程序员能方便地利用FPGA每每还须要在FPGA公司供应的编译器根本上进行二次开拓,这些都是只有大公司才能做。
FPGA实现的机器学习加速器在架构上可以根据特定运用优化以是比GPU有上风,但是GPU的运行速率(>1GHz)比较FPGA有上风(~200MHz)。
以是,对付均匀性能,看的便是FPGA加速器架构上的上风是否能填补运行速率上的劣势。如果FPGA上的架构优化可以带来比较GPU架构两到三个数量级的上风,那么FPGA在均匀性能上会好于GPU。例如,百度在HotChips上发布的paper显示,GPU的均匀性能比较FPGA在矩阵运算等标准batch data SIMD bench上远好于FPGA;但是在处理做事器真个少量多次处理要求(即频繁要求但每次要求的数据量和打算量都不大)的场合下,均匀性能会比GPU更好。
功耗方面,虽然GPU的功耗(200W)远大于FPGA的功耗(10W),但是如果要比较功耗该当比较在实行效率相同时须要的功耗。如果FPGA的架构优化能做到很好甚至于一块FPGA的均匀性能能靠近一块GPU,那么FPGA方案的总功耗远小于GPU,散热问题可以大大减轻。反之,如果须要二十块FPGA才能实现一块GPU的均匀性能,那么FPGA在功耗方面并没有上风。
能效比的比较也是类似,能效指的是完成程序实行花费的能量,而能量花费即是功耗乘以程序实行的韶光。虽然GPU的功耗远大于FPGA的功耗,但是如果FPGA实行相同程序须要的韶光比GPU长几十倍,那FPGA在能效比上就没有上风了;反之如果FPGA上实现的硬件架构优化得很适宜特定的机器学习运用,实行算法所需的韶光仅仅是GPU的几倍或乃至于靠近GPU,那么FPGA的能效比就会比GPU强。
小张自动化,祝您本日的自己比昨天更精良。










