基于FPGA的异构计算在多媒体中的应用

文 / 周小鹏

整理 / LiveVideoStack

大家好,我是来自CTAccel的研发负责人周小鹏,我分享的题目是《基于FPGA的异构计算在多媒体中的应用》。 FPGA从1984年被发明到现在已经35年了,现在的FPGA有足够的规模去做大规模计算。 我们团队主要是研究它能否解决多媒体领域中的现有问题。


1. 团队介绍

基于FPGA的异构计算在多媒体中的应用

联捷计算科技成立于2016年,英文名CTAccel。 实际上我们团队从2014年就开始研究这项技术了,主要致力于以FPGA为载体的数据中心的异构计算,让它能帮助我们解决一些实际的问题。


2. 主题

基于FPGA的异构计算在多媒体中的应用

今天分享的主题包括两点,一个是基于FPGA的异构计算的一般性问题,另一个就是我们团队(CTAccel)基于FPGA的异构计算方案。


2.1 基于FPGA的异构计算的一般性问题

基于FPGA的异构计算在多媒体中的应用

对于FPGA在异构计算的一般性问题,结合我们的认识,从以下五个方面来说。


2.1.1 当前处理的困境

基于FPGA的异构计算在多媒体中的应用

上图左边描述的是2016年AMD发布的一个报告。 Intel宣布停止CPU的Tick-Tock发展模式,Moore定律的失效意味着CPU性能的提升慢于之前18个月为一周期的速度。 但是数据计算需求增长却越来越快,对计算的需求越来越多。 这些需求包括多媒体转码,搜索计算,加解密以及矩阵的计算。 由于计算需求越来越大,就需要新的底层硬件来支持大规模计算。

基于FPGA的异构计算在多媒体中的应用

上图描述的是网络和存储本身的技术发展,数据中心内部网络速度越来越快,从最早的1Gbps到现在100Gbps; 存储速度也从机械硬盘的0.7MB/s加快到固态驱动器的1GB。 但是CPU处理IO的速度没有那么快,例如AES256加密和SHA-1签名,如果是使用单核CPU处理,处理能力只有100MB/s,与存储速度之间存在很大的差距。 从网络的角度来讲,如今处理网路协议所需要的CPU核数也是很大的,CPU处理速度是不能匹配网络处理速度的。 如果从硬件方面解决此问题,FPGA可以提供一些帮助。


2.1.2 FPGA及其历史

基于FPGA的异构计算在多媒体中的应用

传统的FPGA概念,就像图中所示。 实际是把电路板上一些小的门电路,安装在芯片上通过改变连线来改变它的功能,叫做现场可编程门列阵。 它其实是一个半定制化专用集成电路,里面已经有一些基本门电路,也会有一些触发器,以及互联资源。 通过改变这些互连资源对门电路、触发器的连接方式来改变功能,这样就可能实现例如数字滤波器、矩阵变换等基本功能。 现在的FPGA相较之前已经发生了巨大的改变。 之前只有门电路、触发器,互连资源,但是现在里面已经包含了比较高层一点的功能模块,例如增加dsp、bram,甚至包括ddr控制器、pcie控制器、serdes、光口,以及arm、powerpc、gpu等系统级的单元。

基于FPGA的异构计算在多媒体中的应用

在30多年的时间里,FPGA大致有四个发展阶段,从1984年赛灵思发明FPGA到1991年这段时间的主要发展体现是芯片晶体管数目的逐渐增多,主要解决的问题是如何扩大电路的规模。 从1992年到1999年是FPGA的扩张阶段,这一阶段依然在探求扩大电路规模的方法。 由于当时芯片规模依然较小,为实现复杂功能,这一阶段解决的另一个问题就是通过软件进行芯片间的功能分治。 第三阶段是从2000年到2007年,当时FPGA的规模已经相对较大,这一阶段主要解决的是数字信号处理方面的问题,比如软件对互连资源的布局布线,如何充分利用晶体管等问题。 从2008年开始进入到FPGA的转型阶段,这一阶段不仅包含可编程逻辑,还包括Ethernet MAC和PCI Express以及一些高速接口、微处理器,甚至包括GPU、浮点计算器单元。 FPGA在朝着系统化方向发展,规模越来越大,为计算机提供最底层的技术基础。 在不断发展的过程中,FPGA的功耗越来越小,容量越来越大,速度也越来越快,这也是它现在可以用于数据中心的技术基础。


2.1.3 基于FPGA的异构计算的特点

基于FPGA的异构计算在多媒体中的应用

CPU、GPU都基本采用冯诺依曼架构,它的组成部件包括指令存储、数据存储、译码逻辑、算数逻辑单元以及共享内存。 它的工作原理是将取得的指令和数据进行指令译码,然后执行返回结果。


CPU、GPU都是典型的单指令多数据的模型。 CPU中ALU数量有限,可以支持复杂的控制逻辑,对应的缓存容量也较大。 在GPU中,算术逻辑单元较多,但是可完成的控制种类较少,相应缓存容量也有限。 两者解决的问题不同,但他们的最小执行单元都是指令。 编程的本质就是将算法和业务逻辑拆解为顺序执行的指令的过程。

基于FPGA的异构计算在多媒体中的应用

对于FPGA来讲,它是*指令架构,本身只提供部件池。 组成部件包括CLB(可编程逻辑单元)、BRAM、DSP单元、PCIE控制器、时钟单元、高速收发器等。 可以通过设计,利用这些部件实现不同功能。 工作流程也可根据应用定制。 从计算的角度来讲,它可以支持单操作多数据,因为它不需要译码,故也不存在指令的概念。 同时它也支持单数据多操作,可对同一数据多次操作。 FPGA的最小执行单位是寄存器和算术逻辑单元,FPGA编程的本质是将算法和业务逻辑映射到FPGA基本部件,这与CPU也是不同的。

基于FPGA的异构计算在多媒体中的应用

基于FPGA的计算过程,相比于CPU/GPU的优点:


1)延时低稳定性强


FPGA可定制单操作多数据、单数据多操作以及混合模型,可形成更细粒度的操作、流水和并行。 并且由于数据流动路径固定,处理延迟也是固定的。 因此,它会有低延时强稳定的优点。


2)功耗低


晶体管全部用于算法和业务处理,冗余少,利用率更高。


3)并发度高


对于FPGA,芯片资源是足够控制并行和顺序执行之间平衡的。 在FPGA的应用单元和CPU、GPU有效率利用核数相当时,由于延时更低,所以FPGA并发度更高。


4)IO资源丰富


FPGA有高速接口,甚至包括光口、以太网接口,可以支撑靠近接口的计算。

基于FPGA的异构计算在多媒体中的应用

下面将以最基本的编解码原理来说明FPGA适合图像编码的原因。 上图描述了视频编码的过程。 首先将视频划分为不同编码单元,然后对每个单元进行编码,先经过变换然后进行量化,之后进行反量化反变化,得到重构的数据再和原数据进行预测编码,对量化的残差数据进行熵编码。 功能单元的划分和每个单元的处理是串行的过程; 而处理过程的预测、变换、量化都是矩阵乘的过程,又是并行过程; 熵编码也是串行的。 整体过程是串行并行相结合的,CPU、GPU难以支撑这个过程,FPGA中可由不同电路完成。

基于FPGA的异构计算在多媒体中的应用

从实测数据来看,上图柱状图展示了JPEG图压缩到一定大小时,FPGA和GPU方式下QPS值的大小。 可以看出,无论在何种情况下,FPGA相对来说是有一定优势的。 这种优势来源于它的底层技术架构。


2.1.4 FPGA异构计算的系统级问题

基于FPGA的异构计算在多媒体中的应用

FPGA可以带来一定优势,但仍然存在许多需要解决的问题。 在单个功能上,它有很大的优势,但是从系统应用来看,这种优势会大打折扣,因为它有很多系统限制条件。


  1. 算法和业务逻辑在FPGA映射上还需进行优化以充分利用深度流水线与并行。


  1. 加速卡上的资源配比仍存在问题,做图像视频编解码常需要使用外部缓存,而缓存的容量、带宽等是需要与之匹配的,数据传输的延迟也会对性能产生影响。同时部分算法需要使用非常大容量的片内块缓存。


  1. FPGA在系统级别的资源配比,Host调度上也会存在一定的效率问题。我们如何在用户无感知的情况下,对系统状态进行监控,这是我们在软件侧要解决的问题。为适应部署需求,还需要解决虚拟机支持和docker部署方面的问题。


从产品侧来讲,系统在FPGA异构卡、网卡、ssd与其他异构平台之间能否P2P传递数据,让系统更有效也是需要考虑的。 FPGA与Host之间能否有效传递数据也是我们研究的一部分,并且也尝试了不同的技术。


2.1.5 FPGA异构计算的开发流程和方法学

基于FPGA的异构计算在多媒体中的应用

上图展示了异构系统开发的流程。 左图展现了传统FPGA的开发流程,可以看出和芯片的开发流程是相像的,由于是硬件开发,所以需要代码转换的过程,还需要分析电路是否满足要求,要做仿真、测试、优化,最后才能得到满足要求的设计进行板级测试。 为了满足数据中心的快速落地的需求,FPGA需要用到更高层的工具和编程语言。

基于FPGA的异构计算在多媒体中的应用

除了工具、开发流程,平台也是一个方面。 在我们的开发中,有固定的hdk和sdk,会提供对应的接口操作基本驱动、hdk里的监控接口。 真正的设计在于功能的设计。

从产品的角度讲,我们主要考虑数据可用、接口可用、系统稳定易用、迁移成本低、性能这五个维度。 应用要能提供足够多的接口对接原有的软件生态。 系统稳定是最基本的,能否一键升级、一键部署也是需要考虑的。 另外迁移成本包括修改接口对用户流程的影响,端对端整体分析才能确定系统性能的提升量。 从性能指标来看,,除了吞吐,还有延时、任务工作时长、CPU利用率等。 当单卡无法实现功能时,多张卡之间的调度、功能切分,以及使用多卡时性能是否能线性增长都是需要考量的。


2.2 CTAccel基于FPGA的异构计算方案

基于FPGA的异构计算在多媒体中的应用

接下来,我讲一下针对以上谈到的一般问题,我们团队所做的方案。 虽然是具体应用,但是它不会违背我们之前分析的问题。 具体从目前主要产品及产品形态、多媒体图像的处理,和视频视频以及目前已落地应用的情况四个方面分享。


2.2.1 CTAccel主要产品和产品形态

基于FPGA的异构计算在多媒体中的应用

目前,CTAccel主要有两款产品。 一个用于图像处理,一个用于视频。 产品设计的主要目的是为了提升计算性能,提高用户体验。 节省客户投资也是我们产品的优点之一。

基于FPGA的异构计算在多媒体中的应用

我们的产品有两种形态,一种是基于硬件卡形态的。 这种主要集中于私有部署,用于客户有自己的数据中心或者自己的服务器的情况。 客户可以自行购买硬件卡插入服务器,将我们的软件安装在卡上就可以使用我们的产品。 另一种是基于公有云的。 我们的产品可以支持不同的云平台。


2.2.2 CTAccel的图像处理方案

基于FPGA的异构计算在多媒体中的应用

图像处理主要有三个功能,分别是解码器,像素处理,编码器。 像素处理上,我们主要做缩放、旋转、裁剪、水印、去噪等处理。 功能可以串行调用,也可以顺序调用。 编码器目前可支持JPEG,Webp,HEIC。 这些都是有损压缩,相互之间可以通过编解码互转。 除最基本的以外,JPEG目前还可以实现渐进式转码。 Lepton是专门用于无损压缩的,它可对JPEG格式的图片再一次压缩,达到更好的压缩效果,主要用于存储。 软件栈可以支持OpenCV、ImageMagick、GraphicsMagick、Lepton以及ffmpeg,我们目前还在设计支持restful web API的软件。 我们也做了一个图片处理服务的设计供大家参考。 最右侧的图展现了我们产品的分布,包括AFU和Service&Driver以及OpenCV等接口。 客户可以直接调用外面的接口,如果需要WEB接口的话,我们也可以再封装一层。

基于FPGA的异构计算在多媒体中的应用

我们做了很多的功能,也聚焦了几个主要应用领域。 其中一个是AI预处理。 在GPU处理器前,需要对图像进行解码,压缩到规定尺寸,还有一些归一化处理。 针对这个问题,我们希望能对图像进行流量清洗处理,直接得到可以被GPU处理的图片。 图像转码的应用,即各种格式图像进行互转。 图像存储主要用Lepton格式。

基于FPGA的异构计算在多媒体中的应用

这张图展现了我们产品优点体现在哪里。 通过计算加速,整个链路延时会缩短。 对于计算资源消耗大的问题,通过优化可以增大系统的吞吐量。 可以看出,存储上的优点是明显的,资源压缩到越小,越节省空间。

基于FPGA的异构计算在多媒体中的应用

通过使用FPGA卡预处理,可以更好的与GPU匹配,更好的发挥GPU性能。 下面是一些具体的案例及其性能。

 

  • JPEG转码WebP案例

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用


  • JPEG与Lepton互转案例

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用


  • 无损存储的性能

基于FPGA的异构计算在多媒体中的应用


  • JPEG转码JPEG案例

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用


  • Heic转码JPEG案例

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用

 基于FPGA的异构计算在多媒体中的应用


  • AI互转匹配情况

基于FPGA的异构计算在多媒体中的应用


2.2.3 CTAccel的视频处理方案

基于FPGA的异构计算在多媒体中的应用

视频处理方案包括H264,H265的编解码处理以及一些像素处理。 软件支持ffmpeg和gstreamer。

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用

基于FPGA的异构计算在多媒体中的应用


2.2.4 落地应用


1)手机落地应用

基于FPGA的异构计算在多媒体中的应用


2)O2O平台落地应用

基于FPGA的异构计算在多媒体中的应用


3)社交网站落地应用

基于FPGA的异构计算在多媒体中的应用


4)直播平台落地应用(测试中)

基于FPGA的异构计算在多媒体中的应用

 

————————————————

版权声明:本文为CSDN博主「LiveVideoStack_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/103146403


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

基于FPGA的异构计算在多媒体中的应用


上一篇:SystemVerilog 第7章 线程以及线程间的通信


下一篇:JUC并发编程快速入门篇(十)—— Fork/Join 框架和异步回调