用于优化现场可编程门阵列的代码的方法和装置制造方法及图纸

技术编号:28567946 阅读:17 留言:0更新日期:2021-05-25 18:05
描述了一种用于生成硬件加速器(20)的方法。该方法包括输入(110)具有多个代码行的程序(105),该多个代码行描述要在硬件加速器(20)上实现的算法,以及从输入的程序(105)生成(125)存储器中的数据流图。优化该数据流图,并且输出从数据流图创建的输出程序(140)。然后将输出程序(140)提供给高级综合工具,以生成硬件加速器(20)。

【技术实现步骤摘要】
【国外来华专利技术】用于优化现场可编程门阵列的代码的方法和装置本申请要求于2018年8月9日提交的葡萄牙专利申请号20181000054166和2018年8月14日提交的欧洲专利申请号18189022.9的优先权和权益。
本专利技术涉及一种用于优化硬件加速器的代码的方法和装置。
技术介绍
现场可编程门阵列(FPGA)成为用于加速软件应用程序的执行的流行解决方案。高级综合(HLS)工具的使用旨在为软件开发人员提供抽象级别,以使软件开发人员能够开发用于在基于FPGA的硬件加速器上使用的软件代码。但是,重组软件代码和有效使用指令的需求既需要掌握所使用的HLS工具,也需要掌握要在其上运行软件代码的FPGA硬件。本文档中描述的方法使用展开的图表示(其可以从程序执行轨迹生成),与基于图的优化(例如折叠)一起,来生成合适的C代码以输入到HLS工具。实验表明,本文档中描述的方法能够生成只有使用手动重组输入软件代码和手动插入适当的指令才能实现的高效的硬件实现。使用FPGA实现的硬件加速器可以提供许多系统所需的性能改进和/或节约能耗。经过优化后,这些基于FPGA的硬件加速器将具有高性能和高效的能耗[1]。只要硬件提供足够的资源,应用程序的自定义硬件实现(也称为特定于应用程序的架构)就可以并发执行多个独立的运算。这种并发执行可加快具有高指令级并行性(ILP)的算法的执行。为了设计硬件以执行具有ILP程度的算法,当前的方法涉及不同的技能,并且需要了解非常不同的编程语言和工具。描述高效的硬件非常耗时。这些方面给使用和开发FPGA作为硬件加速器设置了障碍。为了解决这些问题,在高级综合(HLS)领域进行了许多努力。HLS工具允许程序员使用高级抽象(例如,诸如C之类的软件编程语言中已知的抽象级别)来定位FPGA硬件。这些高级抽象的目的是允许开发人员更轻松地对FPGA进行编程,并且能够处理更复杂的应用程序,而无需其他方法所需的耗时的工作。但是,即使HLS工具提高了抽象级别,HLS工具仍需要程序员具备一定的硬件专业知识才能在FPGA硬件上实现优化的解决方案。尽管HLS工具可以接受编程语言(例如C),但是该软件代码的结构在很大程度上影响所得到的生成的硬件[2]。此外,HLS工具中典型的HLS工具可能需要其他指令或配置才能生成有效的实现。对于本领域普通技术人员而言,现有技术的HLS工具具有进入壁垒,在这种情况下,本领域普通技术人员是软件程序员。通过降低这种进入壁垒,更多的软件开发人员将能够使用基于FPGA的硬件的计算能力来加速应用程序和/或实现显著降低能耗。基于C的编程语言是许多HLS工具的常见输入[1]。由于C编程模型是为CPU量身定制的,并且没有考虑硬件的并行性性质和可能的定制,因此这些现有的HLS工具通过允许程序员通过提供配置或指令来指导综合,来弥补这些限制。众所周知,软件代码的结构对所生成硬件的性能影响很大。该硬件可以实现为FPGA或ASIC。因此,在现有技术中,通常需要复杂的代码重组,并且HLS工具和编译器可能既不提供这种优化,也不确保其自动应用。为了使基于C的HLS更易于访问,需要一种轻松重组输入软件代码的方法。本文档介绍了一种针对目标专用硬件(例如,使用FPGA实现的)生成自动优化的C代码的方法。该代码随后可用于使用FPGA或ASIC来制造电子电路。现有技术源到源的优化一直是HLS领域的研究主题。例如,Cong等人.[5]简要介绍了代码重组的问题,并提出了一个框架,以促进软件开发人员进行代码重组。Cardoso等人.[6]提出了一种方法,允许用户对策略进行编程以应用代码转换和指令插入。LegUPHLS工具[8]也接受C作为输入,并通过修改后的LLVM编译器[9]实现代码重组,以实现HLS优化。同样相关的是专门处理流式bas计算的方法。例如,Mencer在[7]中提出了一种使用称为ASC的基于C语言的方法。ASC已设计为在硬件中实现基于数据流的计算。Max-Compiler[10]是一种HLS工具,用于以基于Java的编程语言(称为MaxJ)来实现流计算,这些流计算被描述为数据流图。在[11]中,作者讨论了数据流图(DFG)优化,以在MaxJ编译器的上下文中生成更好的FPGA实现。本文档中的方法与先前介绍的工作有所不同,因为本文档的方法侧重于源代码到源代码的重组,以为典型的基于C的HLS工具提供更友好的代码。可以将其视为正交工作,因为所描述的方法可以为HLS工具(诸如LegUp和VivadoHLS)提供有用的代码重组。与MaxCompiler方法相比,所描述的方法也可以用于提供重组的MaxJ代码,但在这种情况下,该方法将需要MaxJ代码生成器作为后端。另外,我们还注意到该方法可以在其他输入编程语言的上下文中使用,因为通过检测应用程序的原始代码并通过获取修改后的应用程序执行的图表来获得所使用的DFG。使用图作为编译器和HLS工具的中间表示很常见(例如,参见DanielD.Gajski,NikilD.Dutt,AllenC.-H.Wu和SteveY.-L.Lin.1992.《高级综合:芯片和系统设计导论(High-LevelSynthesis:IntroductiontoChipandSystemDesign)》。美国马萨诸塞州诺威尔市的Kluwer学术出版社M.P.Cardoso,PedroC.Diniz,MarkusWeinhardt,“用于可重配置计算的编译:一项调查(Compilingforreconfigurablecomputing:Asurvey)”,ACM计算出版社,42(4):13:1-13:65(2010)。通常,输入源代码的结构由控制数据流图(CDFG)或数据流图(DFG)或二者的扩展表示,然后使用这些图进行代码转换和优化。一种典型的情况是循环展开,其可以在通过复制子图在内部实现,并修改例如循环控制结构和归纳变量的值。这是HLS工具应用某些优化的典型方式。这些图甚至用于分配、投标和调度(HLS的三个重要任务,例如,参见PhilippeCoussy,DanielD.Gajski,MichaelMeredith,AndrésTakach,“高级综合入门(AnIntroductiontoHigh-LevelSynthesis)”,IEEE设计&计算机测试26(4):8-17(2009)M.P.Cardoso,MarkusWeinhardt,“高级综合(High-LevelSynthesis)”,第2章,面向软件程序员的FPGA2016,DirkKoch,FrankHannig,DanielZiener(编辑),施普林格2016,23-47页。在源到源编译器处也从使用了这种方法(有些使用树表示,有些使用图表示)。在这些编译器中,转换后的图随后输入到代码生成阶段,其负责生成最终代码(例如,C到C编译器中的C代码)。HLS工具可能需要其他指令或配置来生成有效的实现。现有技术解决方案(诸如HLS工具)在高度复杂的代码重组中表现不佳。实际上,所涉及的高复杂度实际上是由于没有代码重组工具的原因本文档来自技高网...

【技术保护点】
1.一种用于生成硬件加速器(20)的配置的方法,包括:/n-将具有多个代码行的程序(105)输入(110)到装置的前端(110),所述多个代码行描述要在所述硬件加速器(20)上实现的算法;/n-从输入的程序(105)在所述前端(110)中生成(125)存储器中的数据流图;/n-将生成的数据流图传递到所述装置的后端(135);/n-优化所述后端(135)中的所述数据流图;以及/n-输出(360)表示所述硬件加速器(20)的配置并从所述数据流图生成的输出程序(140)。/n

【技术特征摘要】
【国外来华专利技术】20180814 EP 18189022.9;20180809 PT 201810000541661.一种用于生成硬件加速器(20)的配置的方法,包括:
-将具有多个代码行的程序(105)输入(110)到装置的前端(110),所述多个代码行描述要在所述硬件加速器(20)上实现的算法;
-从输入的程序(105)在所述前端(110)中生成(125)存储器中的数据流图;
-将生成的数据流图传递到所述装置的后端(135);
-优化所述后端(135)中的所述数据流图;以及
-输出(360)表示所述硬件加速器(20)的配置并从所述数据流图生成的输出程序(140)。


2.根据权利要求1所述的方法,还包括:在生成(125)所述数据流图之前,注入检测代码(112)。


3.根据权利要求2所述的方法,其中在一个或更多个代码行之前注入多个检测代码(112)。


4.根据以上权利要求中的任一项所述的方法,其中优化所述数据流图包括以下中的一项或更多项:识别所述数据流图中的重复序列,修剪(310)不必要的节点。


5.根据以上权利要求中的任一项所述的方法,还包括以下...

【专利技术属性】
技术研发人员:A·S·卡纳斯·费雷拉J·M·P·卡多佐
申请(专利权)人:伊耐斯克泰克计算机科学与技术系统工程研究所
类型:发明
国别省市:葡萄牙;PT

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1