近年来,FPGA的概念越来越多。
比如比特币挖掘就使用基于FPGA的挖掘机器。还有,微软之前说要用FPGA“取代”数据中心的CPU,等等。
其实FPGA对专业人士来说并不陌生,而且已经广泛应用。但是大多数人对它了解不多,对它有很多疑问——什么是——FPGA?为什么要用?与CPU、GPU、ASIC相比,FPGA有什么特点?……
今天,带着这一系列问题,让我们揭开FPGA的面纱。
1.为什么要用FPGA?
众所周知,通用处理器(CPU)摩尔定律已经进入暮年,而机器学习和Web服务的规模却在指数级增长。
人们使用定制的硬件来加速常见的计算任务,但是不断变化的行业要求这些定制的硬件可以被重新编程来执行新类型的计算任务。
FPGA是一种硬件可重构架构。它的英文全称是现场可编程门阵列,中文名称是现场可编程门阵列。
FPGA常年作为ASIC的小批量替代品。但近年来在微软、百度等公司的数据中心大规模部署,提供强大的计算能力和足够的灵活性。
纵轴:LTL的延迟,横轴:可以达到的FPGA数量。来源:[4]
FPGA中的逻辑模块关系,其中每个角色都是用户逻辑(如DNN加速、网络功能加速、加密),外部部分负责每个角色之间的通信,以及角色与外设之间的通信。来源:[4]
由FPGA构成的数据中心加速平面介于网络交换层(TOR,L1,L2)和传统服务器软件(运行在CPU上的软件)之间。来源:[4]
高带宽、低延迟网络互联的FPGA构成了网络交换层和传统服务器软件之间的数据中心加速平面。
除了每个提供云服务的服务器都需要加速网络和存储虚拟化之外,FPGA上剩余的资源也可以用来加速Bing搜索、深度神经网络()等计算任务。
对于多种类型的应用,随着分布式FPGA加速器规模的扩大,其性能提升是超线性的。
比如CNN推论,在只用一个FPGA的情况下,由于片上内存不足以放下整个模型,需要不断访问DRAM中的模型权重,性能瓶颈就在DRAM;如果FPGA数量足够,每个FPGA负责模型的一层或一层中的几个特征,使模型权重完全加载到片上存储器中,从而消除了DRAM的性能瓶颈,充分发挥了FPGA计算单元的性能。
当然,过于细致的拆解也会导致通信开销的增加。将任务分割成分布式FPGA集群的关键是平衡计算和通信。
从神经网络模型到HaaS上的FPGA。利用模型中的并行性,将模型的不同层和特征映射到不同的FPGA。来源:[4]
在MICRO’16大会上,微软提出了硬件即服务(HaaS)的概念,即将硬件作为可调度的云服务,使得FPGA服务的集中调度、管理和大规模部署成为可能。
硬件即服务(HaaS).来源:[4]
从充满FPGA的第一代专用服务器集群,到通过专用网络连接的第二代FPGA加速卡集群,再到目前的大规模FPGA云复用数据中心网络,有三个思路指引着我们的路线:
硬件和软件不是相互取代的关系,而是合作的关系; 必须具备灵活性,即用软件定义的能力; 必须具备可扩放性(scalability)。三、FPGA在云计算中的作用
最后说说我个人对FPGA在云计算中的作用的想法。作为一名三年级博士生,我在微软亚洲研究院的研究试图回答两个问题:
FPGA 在云规模的网络互连系统中应当充当怎样的角色? 如何高效、可扩放地对 FPGA + CPU 的异构系统进行编程?我对FPGA行业最主要的遗憾是,FPGA在数据中心的主流使用,从微软之外的互联网巨头,到两大FPGA厂商,再到学术界,大多把FPGA当成GPU这样计算密集型任务的加速器卡。但是FPGA真的适合GPU吗?
前面说过,FPGA和GPU最大的区别在于架构。FPGA更适合低延迟的流处理,GPU更适合处理大量同质数据。
因为很多人打算用FPGA做计算加速卡,所以两家FPGA厂商推出的高级编程模型也是基于OpenCL,模仿GPU基于共享内存的批处理模式。给FPGA东西,CPU需要放到FPGA板上的DRAM里,然后告诉FPGA开始执行。FPGA将执行结果放回DRAM,然后通知CPU取回。
PCIe可以用于CPU和FPGA之间的高效通信,那么为什么要绕过板上的DRAM呢?可能是工程实施的问题。我们发现通过OpenCL来回写DRAM,启动内核,读DRAM需要1.8毫秒。通过PCIe DMA通信只需要1~2微秒。
PCIe输入输出通道与OpenCL的性能比较。纵坐标是对数坐标。来源:[5]
OpenCL中多个内核之间的通信就更夸张了,默认方式是共享内存。
在本文的开头,FPGA比CPU和GPU更节能,它在架构上的根本优势是没有指令,不需要共享内存。在顺序通信(先进先出)的情况下,不需要使用共享内存在多个内核之间进行通信。况且FPGA上的DRAM一般比GPU上的DRAM慢很多。
所以我们提出了ClickNP网络编程框架[5],用通道代替共享内存来实现执行单元(元素/内核)之间、执行单元与主机软件之间的通信。
需要共享内存的应用也可以在流水线的基础上实现。毕竟,CSP(通信顺序进程)和共享内存在理论上是等价的。ClickNP还是一个基于OpenCL的框架,受限于c语言对硬件的描述(当然HLS比Verilog效率高很多)。理想的硬件描述语言大概不是C语言。
ClickNP使用通道在元素之间通信,来源:[5]
ClickNP使用通道在FPGA和CPU之间通信,来源:[5]
低延迟流处理最需要通信。
但是由于并行性和操作系统调度的限制,CPU通信效率不高,延迟不稳定。
此外,通信不可避免地涉及调度和仲裁。由于单核性能的限制和核间通信效率低,CPU的调度和仲裁性能有限,硬件适合这类重复性工作。所以我的博士研究把FPGA定义为通信的“大管家”,可以用来加速服务器、虚拟机、进程以及CPU和存储设备之间的通信。
程也萧何,败也我。缺少指令,这既是FPGA的优点,也是它的缺点。
每次做不同的事情,都会占用一定的FPGA逻辑资源。如果要做的事情比较复杂重复,就会占用大量的逻辑资源,而且大部分都是闲置的。此时,最好使用冯·诺依曼结构的处理器。
数据中心的很多任务具有很强的局部性和可重复性:一部分是虚拟化平台需要做的网络和存储,属于通信;另一部分是在客户计算任务,比如机器学习,加密解密。
首先,FPGA将用于它最好的通信。未来FPGA可能会像AWS一样作为计算加速卡出租给客户。
不考虑通信,机器学习,加密解密,算法都很复杂。如果试图用FPGA完全取代CPU,必然会带来FPGA逻辑资源的极大浪费,增加FPGA程序的开发成本。更实用的方式是FPGA和CPU协同工作,强的局部性和可重复性属于FPGA,复杂的属于CPU。
当我们用FPGA来加速必应搜索、深度学习等越来越多的服务时;当网络虚拟化、存储虚拟化等基本组件的数据平面由FPGA控制时;当由FPGAs组成的“数据中心加速平面”成为网络和服务器之间的屏障时...似乎有种FPGAs会控制全局的感觉,但是CPU上的计算任务会变得碎片化,被FPGAs驱动。过去,我们是基于CPU的,把重复的计算任务卸给FPGA未来会不会变成基于FPGA,把复杂的计算任务卸给CPU?随着至强+FPGA的出现,旧的SoC会在数据中心重生吗?
穿过记忆墙,到达一个完全可编程的世界。"
参考文献:
[1]微软数据中心的大规模可重构计算https://www . Microsoft . com/en-us/research/WP-content/uploads/2014/06/HC26 . 12 . 520-Recon-Fabric-Pulnam-MicroSoft-Sprocker . pdf
[2]加速大规模数据中心服务的可重构结构,ISCA ' 14 https://www . Microsoft . com/en-us/research/WP-content/uploads/2016/02/弹射_ISCA_2014.pdf
[3]微软拥有一种全新的计算机芯片——它将改变一切
[4]A Cloud-Scale Acceleration Architecture,MICRO ' 16 https://www . Microsoft . com/en-us/research/WP-content/uploads/2016/10/Cloud-Scale-Acceleration-Architecture . pdf
[5] ClickNP:具有可重构硬件的高度灵活和高性能的网络处理——微软研究
[6] Daniel Firestone,SmartNIC:加速Azure的网络与。OCS服务器上的FPGAs。
作者简介:
李伯杰,博士,中国科技大学微软亚洲研究院
6.举例:用STM32单片机处理四旋翼无人机的飞行控制
声明:本文转载于网络,版权归原作者所有。如果涉及到作品的版权问题,请联系我们,我们会根据您提供的版权证明确认版权并支付报酬或删除内容。
1.《fpga FPGA,你为什么这么牛?》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《fpga FPGA,你为什么这么牛?》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/shehui/1199332.html