CPU本身无法满足高性能计算应用软件的性能需求,导致需求和性能之间出现了缺口。在新的芯片材料等基础技术没有取得突破前,一种有效的解决方法就是采用专用协处理器的异构计算方式来提升处理性能。现有的协处理器主要有FPGA,GPU和ASIC,FPGA由于其独特的架构拥有其他处理器无法比拟的优势。
FPGA(FieldProgrammableGateArray)现场可编程门阵列,可以通过软件重新配置芯片内部的资源形成不同功能硬件,就像用乐高积木可以搭出航空母舰或变形金刚一样。因此,FPGA不仅有了软件的可编程性和灵活性,同时又有ASIC高吞吐和低延时的特性。而且,由于有丰富的IO,FPGA还非常适合用作协议和接口转换的芯片。
FPGA在数据中心最大的特点就在高吞吐的同时能做到低延时。FPGA内部的资源都是可以重配置的,因此它可以很容易进行数据并行和流水并行,且易于在数据并行和流水并行之间平衡。而GPU几乎只能做数据并行。
与ASIC相比,FPGA的可编程性体现出很大的优势。现在数据中心的各种算法每时每刻都在更新变化,没有足够稳定的时间让ASIC完成长周期的开发。比如在一种神经网络模型出来之后开始把它做成ASIC,也许还未投片生产,这个神经网络模型已经被另一种神经网络模型所替代。不同的是,FPGA可以在不同的业务需求之间做平衡。比如说白天用于为搜索业务排序的机器;在晚上请求很少的情况下,可以将这些FPGA重新配置成离线数据分析的功能,提供对离线数据进行分析的服务。
另外由于FPGA有高速SERDES等丰富的接口,而且能灵活控制实现的粒度和操作数据,因此非常适合进行协议处理和数据格式的转换。比如说FPGA可以很方便的接入以太网数据,并对以太网包进行包过滤等处理。
和CPU、GPU、ASIC在设计上的区别
(图3)处理器芯片对比
CPU/GPU属于冯·诺依曼结构,任务执行需要经历取指、译码、执行、访存以及写回等过程。CPU为达到足够高的通用性,其指令流的控制逻辑相当复杂。GPU使用SIMD单指令多数据流并行等方式进行计算加速。
FPGA/ASIC在使用时硬件功能模块已固定,无需分支判断等复杂控制逻辑,同时大大降低了访存次数。因此在能效上可以比CPU高出1到2个数量级。
ASIC是一种专用的芯片,是为了某种特定的需求而专门定制的芯片。ASIC与通用芯片相比,体积孝功耗低、计算效率高、芯片出货量越大成本越低。但是缺点也很明显:开发周期很长,算法是固定的,一旦算法变化就可能无法重用。
而FPGA则是“软硬件一体”的架构,软件就是硬件。FPGA基本原理是在芯片内集成大量的数字门电路以及存储器,用户可以通过烧入FPGA配置文件来来定义这些门电路以及存储器之间的连线,进而得到不同的硬件功能。
就开发难度而言,ASIC>FPGA>GPU>CPU。目前主流的FPGA开发语言是硬件描述HDL,需要开发者具备一定的相关技能。随着业界OPENCL、HLS等类C高级语言的推进,FPGA的开发难度和周期也会有所改善。
FPGA部署在哪里?与CPU之间如何通信?
腾讯云的FPGA主要部署在数据中心的服务器中。腾讯云将FPGA芯片加上DDR内存、外围电路和散热片,设计成PCIE板卡。这种FPGA板卡被安装在服务器的主板上,用户通过网络远程访问服务器,开发调试FPGA,并用其加速特定业务。
FPGA与CPU之间是通过PCIE链路通信的。CPU内部集成了DDR内存控制器和PCIE控制器。在FPGA芯片内部也用可编程逻辑资源实现了PCIE控制器、DDR控制器和DMA控制器。一般通讯分三种情况:
(1)指令通道
CPU向FPGA芯片写入指令,读取状态。CPU直接通过PCIE访问到FPGA芯片内挂载的存储器或内部总线。
(2)数据通道
CPU读写FPGA板卡上DDR的数据时,CPU通过PCIE配置FPGA芯片内的DMA控制器,输入数据的源物理地址和目的物理地址。DMA控制器控制FPGA卡上的DDR控制器和PCIE控制器,在FPGA卡上的DDR内存和CPU连接的DDR内存之间传输数据。