如何解决现代FPGA开发的痛点?
2019-12-26
14:00:09
来源: 半导体行业观察
随着FPGA不断发展到今天,它可能是有史以来最为复杂的半导体器件。
例如,赛灵思在XDF上展示的Versal器件包含360亿支晶体管;
前不久之前英特尔发布的全球最大的FPGA器件,Stratix10 GX 10M,有着433亿晶体管、1020万可编程逻辑单元,以及2304个可编程I/O。
FPGA的复杂度远远不能通过晶体管数量进行简单量化。
这几百亿个晶体管,组成了大量可编程逻辑单元和查找表结构、数千个高性能运算单元、各种类型和大小的内存资源、高速串行IO接口、多个嵌入式处理器、还有成百上千种不同功能的软核和硬核IP等等。
当所有这些硬件资源都被集成到一个芯片上时,就产生了一个重要的问题:
用户如何对这些硬件资源进行编程?
对于一个具体的应用,通常来说需要将其分解成在硬件上运行的部分、以及在软件上运行的部分。
对于FPGA,这种分解方式将会变得更加复杂。
比如,哪部分要用可编程逻辑实现,哪部分要用微处理器实现;
需要如何合理的分配片上内存、当片上内存不足时如何优化使用片外内存;
如何提升系统性能、吞吐量、时钟频率;
如何对设计增加并行性、添加流水线……等等。
可以看到,设计一个高效的FPGA应用是一个极其复杂的工作。
对于许多尝试使用FPGA的团队而言,这其中最大的挑战就来自于FPGA结构本身。
和其他芯片结构相比,FPGA有着独特的可编程逻辑阵列,从而可以实现大规模的硬件并行,并带来极高的吞吐量、极低的功耗,以及各种对系统性能和效率的连锁收益。
而这也是FPGA架构最吸引人的地方。
但是,当系统的软硬件架构确定下来,并开始进行实现时,开发团队就面临着设计复杂数字电路的严峻任务。
而这个过程需要使用特定的硬件描述语言(RTL)对电路逻辑进行建模,同时要求工程师对电路综合、逻辑映射、布局布线、时序收敛等各个环节都有丰富的经验。
这一切的一切,都大大增加了FPGA设计的难度和门槛,让很多团队望而却步。
对于FPGA公司来说,几十年来他们在一直致力于降低FPGA的开发难度。
时至今日,包括英特尔和赛灵思在内的大型FPGA公司,都有着更多工程师参与设计工具软件的开发,而不是开发FPGA芯片本身。
除此之外,这些FPGA厂商还有着一支庞大的现场应用工程师大军,他们时刻准备着帮助客户解决各种FPGA的实际问题。
同时,业界也出现了很多第三方的FPGA设计咨询公司、IP提供商、外包公司等等,他们挣钱的方式就是帮助客户尽可能的简化FPGA的开发过程。
也就是说,为了应对FPGA复杂的编程性,业界已经发展产生了很多特定的分工。
当前,FPGA正在不断进入各种快速扩张的市场,包括从边缘计算到云计算的加速、网络数据处理和存储的加速,以及各种嵌入式应用,比如5G和汽车市场等等。
然而,这些领域中的大多数开发团队都没有FPGA相关的设计专业知识和经验。
更重要的是,在这些领域中,大多数的应用都是使用软件设计开发的,并越来越依赖人工智能技术的发展。
这些都使得FPGA的开发难度被无限放大,也极大的阻碍了FPGA的进一步使用。
因此,业界都在期待FPGA的开发环境能够升级,使得特定领域的软件开发者能够高效的利用复杂的异构硬件,独立实现FPGA应用开发,且无需了解底层的电路结构和细节,也无需FPGA专家过多的介入开发过程。
Vitis是赛灵思应对这一问题的最新答案。
Vitis位于Vivado工具套件的上层,被设计用来为软件开发者提供开发、调试和运行FPGA的一系列必要组件。
Vitis并没有强制开发者使用固定的IDE,与之相反,它可以被插入到很多常见的软件开发工具和框架中,并依靠一系列硬件加速库库连接底层的赛灵思的生态系统。
赛灵思强调,这些库和硬件IP都是开源的。
尽管这里所谓的“开源”是指专门为赛灵思自身的硬件架构设计的,也就是说,在竞品上使用这些开源库和IP可能会很困难,但这也被业界看做是一个大胆的举措。
Vitis的架构示意图如下所示。
其中,Vitis的核心开发工具包(Core Development Kit)包括编译器、分析器和调试器,它们位于运行库之上。
运行库负责管理各种硬件加速计算和子系统。
在框架的最底层,是硬件相关的目标平台,它根据目标器件或开发板定义了基本软硬件架构及应用环境,包括存储器接口、自定义IO接口、数据传输协议和接口等。
在核心开发工具包之上,就是所谓的硬件加速库。
它由针对不同应用领域的8个子库组成,分别应对AI、视频编解码、视觉与图像处理、数据分析、金融量化、基础线性代数计算、求解器、以及数据库操作。
这八个子库总共包含400多个预先优化的开源应用,能极大的减轻这些领域应用开发的难度、降低开发时间。
对于软件工程师和算法工程师而言,他们可以根据这些硬件加速库,很快的对算法和应用进行高层次建模,并直接利用底层的可编程逻辑器件对这些应用进行硬件加速。
这些硬件加速库中适合FPGA硬件实现的部分,在底层已经完成了RTL实现、调试、综合、映射、布局布线和时序收敛的工作,在调用时这些步骤会自动在后端进行。
对外则以开源C/C++函数或API的形式分发,并已经为赛灵思HLS编译器进行过了预先优化。
因此,软件和算法开发者无需关心这些函数和功能的底层硬件实现。
在Vitis顶层,则是针对特定领域(domain specific)的开发环境。
以AI为例,它支持TensorFlow、PyTorch和Caffe等标准AI框架,并提供了一些预先训练和优化过的AI模型。
通常来说,AI模型的训练过程是在数据中心环境里、使用高精度浮点数进行的。
当这些模型被部署并用于推理时,往往会经过并行化、量化、剪枝,以及在时空和能耗三个维度进行各类优化。
Vitis AI可以帮助这些优化在FPGA上执行,并取得可观的改进。
综上所述,Vitis是一个顺应时代潮流的产物,对于赛灵思来说也是一个巨大的进步。
它为三类开发者,即硬件工程师、软件工程师和算法工程师,提供了有关FPGA硬件加速的清晰的入口点和熟悉的开发环境。
在某种意义上,Vitis类似于英伟达在多年前对CUDA所做的那样。
英伟达之所以在AI时代取得了非凡的成功,很大程度上取决于它对GPU编程模型易用性的提升。
对于CUDA,英伟达创建了一个编程框架,允许普通的软件工程师借此利用非传统的硬件架构进行高性能编程。
通过CUDA,英伟达成功的将GPU作为硬件加速器并打入数据中心这个广阔的市场。
相比之下,Vitis可以为赛灵思做CUDA为英伟达做的事情,使可编程逻辑器件更容易用于加速各类实际应用。
几乎在同一时间,英特尔也官宣了他们的“OneAPI”编程框架。
英特尔表示,OneAPI为CPU、GPU、FPGA提供了一个通用的开发环境,并能够针对特定的架构进行性能调优。
在与XEON CPU的互联方面,OneAPI还提供了对UPI以及未来CXL的有效支持。
关于OneAPI和CXL的有关内容,老石在
之前的文章中
曾经介绍过。
其中,英特尔的Agilex FPGA将成为首款支持OneAPI与CXL的FPGA产品。
对于FPGA阵营来说,人们已经眼睁睁的看着英伟达在加速应用领域取得了多年的主导地位。
值得欣慰的是,Vitis和One API走在了正确的道路上,它们也许会给赛灵思和英特尔提供更多对抗英伟达的筹码。
对于这两家公司来说,Vitis和One API谁能更胜一筹,还需要时间的检验。
“开放性”是这两个编程框架所大力强调的特点,但这里的开放性都是基于两家公司各自的底层硬件,而非广义的开放和通用。
可以想象的是,将基于其中一个环境开发的应用程序移植到另外一个开发环境中,将面临着相当的困难和挑战。
另一方面,FPGA只是英特尔芯片产品组合中很小(但很重要)的一部分。
One API的设计初衷,还是围绕XEON CPU为主,辅以各类硬件加速单元。
除了FPGA,还包括比如不久前宣布的Xe GPU(见下图),以及现有的各类Nervana AI加速芯片等等。
因此在格局上,似乎One API会更具吸引力。
但可想而知,这种大格局也势必造成更大的开发难度。
任何芯片的大规模使用,都离不开易用性的支持。
从这个角度来看,Vitis可以说为FPGA的发展掀开了崭新的一章。
它将使得FPGA与GPU、FPGA与FPGA之间的竞争更加精彩和有趣。
让我们拭目以待。
*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。
今天是《半导体行业观察》为您分享的第2170期内容,欢迎关注。
『
半导体第一垂直媒体
』
实时 专业 原创 深度
识别二维码
,回复下方关键词,阅读更多
晶圆|AI
|台积电
|华为
|博通
|
TWS|英特尔|存储
回复
投稿
,看《如何成为“半导体行业观察”的一员 》
回复
搜索
,还能轻松找到其他你感兴趣的文章!
责任编辑:Sophie