查看原文
其他

如何让软件和算法专家编程FPGA

老石 老石谈芯 2020-12-18

点击蓝字,关注老石谈芯


在十月初举办的赛灵思开发者大会(XDF)上,赛灵思发布了一款名为“Vitis”的软件框架。赛灵思表示,Vitis历经5年时间打造,总共花费了1000“人-年(即,1名工程师全职工作一年)”的工作量。


换句话说,假设赛灵思自1984年成立之日起就开始Vitis的设计工作,那么也需要至少28名工程师在35年的时间里全职为Vitis编写代码。


(图片来自赛灵思)


Vitis相关的技术资料,已上传到知识星球“老石谈芯-进阶版”,欢迎在文末领取优惠券加入星球查看。


现代FPGA开发的痛点

当前,赛灵思的“可编程逻辑设备”已经有了FPGA、ACAP、MPSoC、RFSoC等等一系列产品。当然,老石曾再三提过,这些东西换汤不换药,本质上都是FPGA高度发展分化的产物。


那么,随着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的实际问题。同时,业界也出现了很多第三方的FPGA设计咨询公司、IP提供商、外包公司等等,他们挣钱的方式就是帮助客户尽可能的简化FPGA的开发过程。


也就是说,为了应对FPGA复杂的编程性,业界已经发展产生了很多特定的分工。


当前,FPGA正在不断进入各种快速扩张的市场,包括从边缘计算到云计算的加速、网络数据处理和存储的加速,以及各种嵌入式应用,比如5G和汽车市场等等。然而,这些领域中的大多数开发团队都没有FPGA相关的设计专业知识和经验。更重要的是,在这些领域中,大多数的应用都是使用软件设计开发的,并越来越依赖人工智能技术的发展。这些都使得FPGA的开发难度被无限放大,也极大的阻碍了FPGA的进一步使用。


因此,业界都在期待FPGA的开发环境能够升级,使得特定领域的软件开发者能够高效的利用复杂的异构硬件,独立实现FPGA应用开发,且无需了解底层的电路结构和细节,也无需FPGA专家过多的介入开发过程。


Vitis:拥抱软件开发者

Vitis是赛灵思应对这一问题的最新答案。Vitis位于Vivado工具套件的上层,被设计用来为软件开发者提供开发、调试和运行FPGA的一系列必要组件。


Vitis并没有强制开发者使用固定的IDE,与之相反,它可以被插入到很多常见的软件开发工具和框架中,并依靠一系列硬件加速库库连接底层的赛灵思的生态系统。


赛灵思强调,这些库和硬件IP都是开源的。尽管这里所谓的“开源”是指专门为赛灵思自身的硬件架构设计的,也就是说,在竞品上使用这些开源库和IP可能会很困难,但这也被业界看做是一个大胆的举措。


Vitis的层次化结构

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上执行,并取得可观的改进。


(AI优化器,图片来自赛灵思)


综上所述,Vitis是一个顺应时代潮流的产物,对于赛灵思来说也是一个巨大的进步。它为三类开发者,即硬件工程师、软件工程师和算法工程师,提供了有关FPGA硬件加速的清晰的入口点和熟悉的开发环境


竞品分析:英伟达之CUDA

在某种意义上,Vitis类似于英伟达在多年前对CUDA所做的那样。英伟达之所以在AI时代取得了非凡的成功,很大程度上取决于它对GPU编程模型易用性的提升。对于CUDA,英伟达创建了一个编程框架,允许普通的软件工程师借此利用非传统的硬件架构进行高性能编程。通过CUDA,英伟达成功的将GPU作为硬件加速器并打入数据中心这个广阔的市场。


(幻灯片已上传至知识星球)


相比之下,Vitis可以为赛灵思做CUDA为英伟达做的事情,使可编程逻辑器件更容易用于加速各类实际应用。


竞品分析:英特尔之OneAPI

几乎在同一时间,英特尔也官宣了他们的“OneAPI”编程框架。英特尔表示,OneAPI为CPU、GPU、FPGA提供了一个通用的开发环境,并能够针对特定的架构进行性能调优。在与XEON CPU的互联方面,OneAPI还提供了对UPI以及未来CXL的有效支持。


(图片来自英特尔)


关于OneAPI和CXL的有关内容,老石在之前的文章中曾经介绍过。其中,英特尔的Agilex FPGA将成为首款支持OneAPI与CXL的FPGA产品。兴趣的读者可以在老石谈芯公众号后台回复“Agilex”获取更多技术细节


(图片来自英特尔)


对于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之间的竞争更加精彩和有趣。让我们拭目以待。


Vitis相关的技术资料,已上传到知识星球“老石谈芯-进阶版”,欢迎在文末领取优惠券加入星球查看。


(注:本文仅代表作者个人观点,与任职单位无关。)



往期精选


什么是FPGA工程师的核心竞争力

FPGA在人工智能时代的独特优势

赛灵思新一代计算平台ACAP技术细节全揭秘

英特尔10纳米Agilex FPGA核心技术全解读


更多芯片与FPGA技术解读,欢迎加入知识星球:“老石谈芯-进阶版”,一个关乎技术与观点的互动社区。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存