任何科学技术的发展和进步都离不开两个主要的推动力量,一个是相关领域各大公司的研发,另一个就是各大高校与科研院所的科学研究。这两者往往是相互补充、相互促进的关系,既能涵盖短期的实用性研究,又有长期技术难题的攻关与突破。
这样的技术发展模式,FPGA 行业也不例外。除了英特尔、赛灵思等大公司的研发投入之外,世界上各大顶尖高校对于 FPGA 的研究也在不断帮助 FPGA 技术取得新的成就。
在诸多决定着 FPGA 技术发展的新成就里,那些最为突出的成果,也就是所谓的“皇冠上的明珠”,都会集中发表在一年一度的“FPGA 国际研讨会”上(简称 ISFPGA)。从 1993 年举办至今,ISFPGA 一直是 FPGA 领域的旗舰级顶会,没有之一。在 ISFPGA 上发表的文章,都代表着 FPGA 最前沿和最优秀的研究成果,也被业界人士看成是预测 FPGA 今后发展方向的风向标。
在 2019 年 2 月结束的 ISFPGA 会议上,再一次涌现出了诸多崭新的研究成果。从整体上看,业界的研究方向主要集中在两个方面:
另一个是 FPGA 的高层次综合(High-Level Synthesis,HLS),也就是使用高层语言,如 C++/OpenCL/Python 等,对 FPGA 进行有效的编程和使用。
其中,这届会议中与 AI 相关的文章有 8 篇,与高层次综合相关的文章有 6 篇,占会议接收的全部 24 篇论文的超过一半。
老石在之前详细介绍过赛灵思在这次会议上发表的有关 ACAP 架构的论文。在今天的这篇文章中,老石又挑选了另外五篇具有代表性的论文,为各位逐一点评和解析。同时,我也会简单介绍论文主要作者的背景和代表性研究,方便各位把握当前最新的 FPGA 发展动态。
欲查看本文介绍的这几篇论文全文,请在“老石谈芯”后台回复“FPGA 论文”。
1
FPGA 微架构:低精度乘加单元
一句话总结
对行业发展的影响和意义
显著提升了 FPGA 低精度乘加操作的性能与资源利用率,是针对 DNN 应用的“杀手级”微架构创新。提出的新架构专为英特尔 FPGA 设计,预计会带来巨大的竞争优势。
技术细节
本论文来自多伦多大学的 Vaughn Betz 课题组。多伦多大学的 FPGA 研究一直被公认是世界顶尖水平,归功于这里的一群大牛教授,比如 Jonathan Rose, Vaughn Betz, Jason Anderson, Paul Chow 等。他们的研究基本涵盖了 FPGA 的各个层面,包括架构、工具、应用等各个领域。
他们很多人都曾经担任过 FPGA 公司高管,有多年的工业界一线研发经历,转向学术界后仍然与工业界结合非常紧密,这使得他们的研究有着极强的实用性,对于 FPGA 行业发展有着很重要的推动作用。
这篇论文研究的大背景,是当前在 DNN 中使用低精度算术运算可以取得极大的性能提升。DNN 中的两类核心算法:CNN 和 LSTM,都可以在很大程度上受益于低精度的乘加运算。为了实现这种低精度的 DNN 数据通路,FPGA 往往是超越 CPU 和 GPU 的第一选择,因为它在灵活性和性能等方面有着很好的平衡。例如,微软的脑波项目就使用了自定义的低精度(8~9 位)浮点数表示。
另一方面,作者指出随着 FPGA 器件和云端部署等技术的发展,内存带宽已经逐渐不再是 DNN 的算力瓶颈,取而代之的是单周期可以完成的乘加操作数量,这其实是一个非常新颖的观点。
作者发现,传统的 FPGA 架构在执行乘加操作时,会浪费大量逻辑资源,进而导致性能无法达到最优。因此本文提出了三种针对英特尔 Stratix 10 FPGA 的微架构创新,以提升 DNN 里乘加操作的性能和资源使用率。例如,一种方法是在传统 ALM 结构里增加一条额外的进位链,如下图所示。这样避免了使用多余的 ALM 完成最后一级加法操作,从而节省了逻辑资源,也减少了 ALM 间的传输延时。
使用这种方法,乘加操作的平均延时会缩短 21%,乘加单元的面积会减小 35%。文中提出的另外两种微架构在这里不再详述,这篇文章的文笔很棒,可读性很强,推荐有兴趣的读者看看。
2
名为 HetroCL 的可重构计算编程语言框架
一句话总结
基于 Python 的 FPGA 编程模型与编译工具,为 DNN 应用而优化。
对行业发展的影响和意义
降低了 FPGA 的编程难度,有效解决了一些当前高层次综合存在的问题与痛点。相比传统的 FPGA 开发与编程模型,这个新提出的名为 HetroCL 的领域专用语言和编程框架兼顾了性能与开发效率,使开发者可以专注于算法实现,而无需考虑 FPGA 底层逻辑的实现与优化。
技术细节
这篇文章由康奈尔大学的张志如副教授、以及 UCLA 的丛京生教授及两位的团队合作完成,并获得了本次大会的最佳论文奖。这两位也是 FPGA 领域的顶级学者,主要专注于 FPGA 的高层次综合等领域,而丛教授也是张教授的博士导师。在博士研究期间,二人创办了 AutoESL 公司,并随后被赛灵思收购,其主要软件产品也正是赛灵思 Vivado HLS 的前身。
FPGA 的高层次综合(High-Level Synthesis)指的是将诸如 C++、OpenCL 等高层语言,通过特定编译工具直接转化成 FPGA 上可以运行的硬件代码。有关 HLS 的研究一直是学术界和工业界的研究热点,英特尔和赛灵思都有各自的 HLS 工具和开发套件。
然而,使用 HLS 并没有想象中那么简单。虽然算法和模型可以使用高层语言编写,但为了达到最优的硬件性能,开发者仍然需要清楚的了解底层 FPGA 的硬件架构,并通过特殊的预处理指令指导 HLS 编译器生成期望的硬件结构。这也使得 HLS 在很多时候并没有体现出它的便利性优势。
例如,一个简单的点积函数的 HLS 描述如下图所示,可以看到算法部分包含很多与底层硬件相关的#pragma,用以指导特定的编译器行为,严重影响开发效率与代码可读性。
为了解决这个问题,这篇论文提出了一种基于 Python 的领域专用语言(Domain Specific Language),名为 HeteroCL。它的最主要特点是能将算法描述与底层硬件结构进行完全解耦,使得算法设计师不需要关心底层硬件的数据类型、计算单元实现以及存储器架构优化等,如下图所示。
关于 HeteroCL 的语法和语义在这里不再详述,有兴趣的读者可以在老石谈芯后台回复“FPGA 论文”自行查阅论文原文。
3
使用 P4 语言编程 FPGA
一句话总结
使用高层语言“P4”构建网络算法和应用,并直接映射到 FPGA 上执行。
对行业发展的影响和意义
这是一种快速开发 FPGA 的新方法。与基于 RTL 的传统 FPGA 开发方法、以及基于 C/C++的高层次综合 HLS 相比,这种方法在性能和灵活性达到了很好的平衡。P4 适用于诸如网络数据包处理等算法和应用,使用者不需要掌握 Verilog 或 VHDL 等硬件描述语言,就可以快速完成网络算法的建模与 FPGA 硬件实现。
技术细节
这篇论文的作者来自斯坦福大学、赛灵思和剑桥大学,作者之一的 Nick McKeown 教授就是 P4 语言的发明者。这篇论文主要介绍了如何使用 P4 编写计算机网络算法,并如何通过新提出的软件工具将其自动映射到 FPGA 上。
P4 语言的全名为“Programming Protocol-independent Packet Processors”。与 C/C++/Python 等通用语言不同,P4 是一种领域专用语言,主要被设计用来描述各类网络算法与应用,如数据包处理、分类、查找、路由等等。顾名思义,P4 语言的主要设计目标有以下三点:
协议无关:即 P4 语言及其底层硬件可以支持各类网络协议
现场可编程:即部署后仍然具有可编程能力
可扩展:即 P4 可以在多种硬件平台上使用
与 ASIC 相比,FPGA 在性能上有着大约一个量级的差距。即便如此,FPGA 有着很好的灵活性,能够实现多种网络算法并在其中灵活切换,因此被广泛用于网络数据处理的场合,例如之前讲过的智能网卡等等。
然而,FPGA 对于非硬件工程师而言有着很大的开发难度,因此使用 P4 这种领域专用语言进行 FPGA 的高层次开发就成了十分自然的考虑。
这篇论文提出的开发流程如下图所示。简单来说,就是将 P4 程序,借助赛灵思的 P4 和 SDNet 编译器生成底层的 Verilog 模块,然后映射到名为“NetFPGA”的参考设计上。
在生成 Verilog 模块的过程中,使用了定义好的模块库和元组。因此这种方法本质上是一种 FPGA 虚拟化方法,即在 FPGA 底层硬件之上,增加了一层虚拟的模块层,并可以通过 P4 语言直接映射。
4
将 DNN 模型映射到 FPGA 云的开源架构
一句话总结
一个开源的工具链,用于将训练完成的 CNN 模型映射到亚马逊 AWS FPGA 云服务上运行。
对行业发展的影响和意义
这篇论文与微软脑波项目(Project Brainwave)完成的工作非常类似,不同之处在于采用了高层次综合 HLS 的方法,针对公有云的 FPGA 服务,并且开源。因此为从事云端 DNN 加速研究的相关人员和机构提供了应用平台与经验借鉴。
技术细节
这篇论文的作者来自新加坡和美国伊利诺伊厄巴纳 - 香槟分校(UIUC),作者之一来自 UIUC 的陈德铭教授是硬件加速器研究领域的知名学者。
这篇论文与微软脑波项目完成的目标非常类似,只是实现方法有所不同。老石之前介绍过,脑波项目将训练好的 DNN 模型转化成数据流图表示,然后根据单一 FPGA 的资源情况,对数据流图进行拆分,并映射到 FPGA 的软核 NPU 上。
在这篇论文中,直接使用 HLS 工具对 DNN 模型进行综合,见下图,这在很大程度上减少了开发的难度,但与脑波方案相比,不可避免的会有较大的性能差距。同时,这个工作只支持 Caffe,而不支持其他 DNN 框架。
在脑波项目中,FPGA 基础架构是源于 Catapult 项目的大规模 FPGA 互联和资源池,而本论文主要面向的是亚马逊 AWS-F1 实例的 FPGA 公有云。这样的好处是能为广大 AWS 开发者或其他希望进行 FPGA DNN 加速的用户提供参考平台和经验借鉴,但同样的也会有明显的性能限制。
相比 CPU 而言,使用 FPGA 对 DNN 进行硬件加速仍然可以取得可观的性能提升。比如在这篇论文中,针对不同的 DNN 模型,使用 FPGA 可以取得 47 倍~104 倍的加速性能。
5
多线程代码的高层次综合工具:EASY
一句话总结
使用形式化(formal)方法,有效减少高层次综合多线程代码时使用的内存仲裁器数量与逻辑复杂度。
对行业发展的影响和意义
极大的提高了 FPGA 的高层次综合工具的性能,尤其是对多线程代码有了更好的支持。
技术细节
这篇论文由伦敦帝国理工大学的 George Constantinides 教授团队和多伦多大学的 Jason Anderson 教授团队合作完成。这两位都是 FPGA 学术界鼎鼎大名的人物,George Constantinides 有着很深的数学功底,研究方向主要集中在针对 FPGA 内存优化的高层次综合,以及和数学相关的 FPGA 字长优化,还有近年兴起的近似计算等领域。
帝国理工大学在 FPGA 研究领域也处于世界顶尖水平,除了 George 之外,还有 Peter Cheung 和 Wayne Luk 两位华裔教授,这两位对于现代 FPGA 技术的发展做出了举足轻重的贡献,本文不再展开。
这篇论文研究的主要问题是,当对多线程代码进行 FPGA 的高层次综合时,多个线程之间对内存的读写需要额外的仲裁机制,这主要用来判断某块内存会被哪些线程所访问。而这个仲裁机制在硬件实现上会有很大的额外开销,对性能也有很大的消极影响,如下图所示。
不过作者注意到,线程往往不会访问所有内存块,因此很多情况下仲裁器不需要支持全部的线程 - 内存块映射,这样就大大减少了仲裁器的逻辑复杂度,从而提高了系统性能。
为了判断某个线程是否会访问某个内存块,作者使用了形式化方法,通过将多线程代码转换成一种单线程的形式化描述语言 Boogie,并通过形式化工具证明某个线程与内存块的访问关系,这样就能完全确定仲裁器需要支持的线程与内存块的映射。
这个思路十分简洁但有效,它的完整流程图如下图所示。这篇文章使用这种方法取得了高达 39%的性能提升,以及高达 87%的面积缩减。
6
结语
展望 2019 年 FPGA 技术的发展趋势,人工智能与高层次综合必将是两大值得关注的重点领域。随着新技术的不断涌现,FPGA 的易用性和性能都将得到极大提升。在这其中,人工智能和数据中心将会是老石持续关注的重中之重。
阅读全文