首先,编程FPGA的软件栈已经演进了,尤其是在Altera的帮助下,FPGA增加了对OpenCL开发环境的支持。但不是每个人都是OpenCL的狂热粉丝。
       先有Nvidia为其Tesla GPU加速器创建了自己的CUDA并行编程环境。再有SRC计算机公司不但早在2002年就为国防和智能领域提供混合CPU-FPGA系统,到了2016年年中,进一步将自己研发的Carte编程环境进入了商业市场,这个编程环境可以使C和Fortran程序自动转换为FPGA的硬件描述语言(HDL)。
      另一个推动FPGA被采用的因素是随着芯片制造技术难以持续缩进,多核CPU性能的提高越来越艰难。 虽然CPU的性能获得了大跳跃,但主要用于扩展CPU的性能吞吐量,而不是单个CPU内核的个体性能。(我们知道架构增强是有难度的)。但是FPGA和GPU加速器的每瓦性能都有了令人信服的改进。
      根据微软的运行测试,在执行深度学习算法的时候,CPU-FPGA和CPU-GPU混合计算在的每瓦性能也不相伯仲。GPU在运行中更热和有类似的每瓦性能表现,但是同时他们也带来了更强的工作能力。
       提高了每瓦性能解析了为什么世界上最强大的超级计算机在20世纪90年代后期转移到并行集群,并且解析了为什么现在他们转向了混合机器,而不是英特尔的下一个以 CPU-GPU为混合主力的Xeon Phi的处理器“Knights Landing (简称KNL)。
      在Altera FPGA协处理器和Xeon Phi处理器Knights Landing的帮助下,英特尔不但可以保持自己的在高端的竞争优势。并且在与Nvidia 、IBM和 Mellanox组成的Open power联盟竞争中继续领先。
       英特尔坚信超大规模计算,云端和HPC市场的工作负载会快速成长。为促进其计算业务继续蓬勃发展。这情况下只能成为FPGA的卖家,否则别人就会抢去这唯一的出路。但英特尔并不是这样跟大家说。他们说:“我们不认为这是一种防守战或者其他,”英特尔的CEO Brian Krzanich在Altera收购消息后的新闻发布会上说。“我们认为物联网和数据中心都是庞大的。这些也是我们的客户想要构建的产品。我们30%的云端工作负载将在这些产品上,这是基于我们对如何看待趋势变化以及市场发展的预测。
       这是用来证明这些工作负载能以一种或另一种方式转移到硅中。我们认为最好的做法是使用有业界最佳性能和成本优势的Xeon处理器和FPGA组合。这将给工业领域带来更好的产品和性能。而在IoT中,这将扩展到潜在市场对抗ASIC和ASSP;而在数据中心中,则会将workload转移到硅,推动云的快速增长。
       Krzanich解释道:“你可以把FPGA想象成一堆gate,且能够随时编程。根据他们的想法,其算法会随着时间的推移和学习变得更聪明。FPGA可以用作多个领域的加速器,可以在进行加密的同时进行面部搜索,而且能在基本上在微秒内重新编程FPGA。这比大规模的单个定制部件的成本低得多且具备更高的灵活性。”
       FPGA在AI中的优势:
      现在流行的AI(人工智能)模型基本上都是由人工神经网络构成。这些人工神经网络运行起来都需要庞大的计算。下图是一个简单的人工神经网络结构,可以用它来理解AI需要的计算量。这个简单的模型只有4个输入和和三个输出,每过圆圈代表一个神经单元,相当于一个神经细胞。而每个箭头代表至少一个乘法和加法运算。所以这个超级简单的神经网络每运行一次需要超过18次乘法和加法运算。而上一篇文章演示用的例子则复杂得多,它由16层神经网络构成。其中第一层神经网络需要大约9千万次乘法和加法运算,而第二层神经网络则需要约19亿次乘法和加法。
       对于这些庞大的计算,传统计算机的CPU架构已经很难满足要求,很多AI计算都会使用GPU来加速。原本GPU设计出来是为了加快3D图像的处理,它不必像CPU那样需要执行复杂的控制指令,可以把大部分的硬件资源用于计算,所以它的计算能力要远高于集成度相当的CPU。下图中绿色部分的ALU是CPU的计算单元,而同样面积的GPU则几乎被绿色的计算单元占满。也正因为计算能上的巨大差异,前段时间很火的比特币挖矿大量使用了显卡中的GPU来计算。同样也是因为AI应用方面的潜力再加上比特币挖矿的需求,GPU供应商英伟达的股票价格节节攀升。
1.jpg
       新的CPU架构也不甘落后,纷纷加强了计算能力,比如Intel的AVX扩展指令可以同时处理512bit的计算,硬件上相当于8个32bit的的计算单元。ARM的VFPv3也是专注于计算能力的提升,VFPv3包含了32个64bit的计算单元。当前的CPU基本上都含有多个内核,所以在一颗CPU中总的运算单元大概几十个到上百个。类似的,FPGA也内嵌了这些硬件计算资源,而且应用时间更早。举个例子,Lattice ECP3-150是10年前(2007年)就已经推出的产品,它内嵌了320个DSP硬核,相当于80个32bit的运算单元。而Intel的AVX是2008年才出现。从计算能力上比较,FPGA与新架构的CPU能力相当。虽然计算能力上不及GPU,但是如果考虑功耗的问题,那么FPGA可以甩开GPU好几条街。下面把一些常见的CPU, GPU的性能和功耗列出来供参考。为了便于比较,计算能力统一用G-flops来表示,1 G-flops相当于每秒能完成10亿次浮点运算。为什么要浮点运算呢?因为AI神经网络从输入到输出需要经历很多次乘法和加法运算,很容易产生大数字。如果使用整数来表示,32bit最高范围是10的9次方,超过这个范围就会发生溢出错误。而浮点运算因为是用科学记数法来表示,32bit浮点数最高范围可以到10的38次方,保证绝大部分AI运算不会溢出。
2.jpg
       从上面的数据不难看出FPGA兼顾了高运算能力和低功耗的优点。至于GPU,虽然运算能力最强,但是它的功耗几乎相当于半个电饭锅,比较适合在实验室里训练AI。如果放在移动设备上,相当于背着半个电饭锅到处跑,简直就是一背锅侠。一旦AI模型训练好,需要在移动设备上运行,那么FPGA无疑是非常好的选择。