HLS高阶综合:朋友还是敌人?

作者:Nikilaos Kavvadias,Silexica资深研发工程师

HLS高阶综合(high level synthesis)在被广泛使用之前,作为商业技术其实已经存在了20多年。设计团队对于这项技术可以说呈现出两极化的态度:要么坚信它是先进技术之翘楚,要么对其持谨慎怀疑态度。

高级语言IP的优势是显而易见的,例如易维护性、在设计周期早期进行重大变更的能力、以及大大节省产品上市时间等方面的优势都很明显。目前的工具较之前一代工具,已有了大幅的进步:它们允许一些受欢迎的高级语言(如C和C ++)的准入,这一点让众多软件工程师甘之如饴。与硬件描述语言(如VHDL和Verilog HDL)不同,它并不是由一小部分工程师掌握的工具。当然,它也有局限性:语言限制,就像非可合成构造(non-synthetic constructs)一样,必须解决或与特殊代码的问题,这可能对设计性能产生负面影响。

还有更糟糕的,大量可能解决方案都必须经过一一验证。目前的HLS工具是点工具(point tools),他们解决的是某个具体问题。软件工程师还没有一个生态系统来识别加速至硬件的代码是否需要加速。对于那个工程师而言,这时的高阶综合可能是一个敌人,而不是朋友。如果没有对底层多核平台的全面理解,没有对应用程序进行有效和准确地分析,并且无法从设计空间中提取最佳解决方案,那么盲目断言一个单点的工具可能会导致效率极低的解决方案。

定义

我们先退一步来说说定义。我们说高级综合(HLS),意思是在导出数字电路(digital circuits)的过程里,这个数字电路可以在高级规范的制造过程中合成。这个术语是行为和电子系统的结合:是一门技术,也是一门科学,它把设计意图抽象化,抽象视图可以自动地将人类设计者的努力付诸现实。最终生成的设计应遵循一系列要求,包括芯片面积、时钟频率、功耗和时间性能的要求等等。HLS工具的任务应该是基于可移交给物理实现流程的而生成的优秀设计。通常该接口是RTL(寄存器传输级别),其中生成的描述是由数字设计领域的汇编语言VHDL和Verilog组成的,与逻辑综合和物理实现可以接受的后端工具一样高。 RTL描述内容包括生成的电路在状态机、存储器和寄存器存储、流水线或多周期操作方面的功能。

一个成功的HLS故事中一部分好像是一种艺术。它作为高级语言代码(通常是C,C ++或SystemC),给出的输入规范必须满足对它应该如何编写的某些期望。而它的另一部分则是科学,因为HLS已经成熟到足以成为硬件工程师库存中的实用工具。尽管设计生态系统还不算是一个理想平台,因为它仍不可保证达到可持续生产力的产生。因此每一个成功故事的背后,都包含着更多的不为人知的故事,包括不得不采用老办法时倍感愤怒的团队,因为这样既没有真正利用多核,也没有平台中的FPGA空间。

寻求一个最佳解决方案(包括在面积,功率,时间性能方面)的过程必然充满艰辛。在做设计决策时需要我们的专业知识,用户也必须具有经验,才能为既定的应用程序或程序集进行有效地HLS引擎做正确的决策。

挑战

为了探索解决方案空间,我们必须根据给定的配置合成所得到的电路进行全方位的尝试。使用现在的HLS工具,每种特定配置可能需要几分钟到半小时或更长时间。这显然其实没有帮助用户减轻负担,因为这个过程是手动的、缓慢的、容易出错的,很容易导致明显的非最优解决方案。HLS引擎的常见弱点包括:

- 没有早期的性能估计以及任何违反设计和平台限制的行为

- 没有利用所有可能的数据通信方式

- 没有功能概述,也没有对用户代码进行优化转换

- 支持代码报告得太晚了

- 在某些情况下,工具的高效实施是不可能的,例如当必须将太多的加速器映射到硬件部分时。 HLS工具无法预先检测到这种情况,也无法在用户坚持的情况下尽量减轻其影响。

这些弱点都对设计周期造成损害,因为它们不允许自动设计空间探索,更不用说为所需解决方案自动生成软件和硬件。

解决办法

为了在整体生态系统中有效地整合高级综合,需要更高级别的工具。 Silexica的SLX是唯一真正支持多核自动生成软件的生态系统,无论是硬连线(hardwired),还是在FPGA上实现的软核(如果有的话)。在我们的例子中,SLX解决方案中的分析功能保证用户可以选择适当时机切入设计。它使用底层平台的模型,包括硬连线处理器和软处理器,现在正在扩展到FPGA的硬件加速器。 SLX了解数据通信的可能方式及其成本。它可以分析用户代码以识别执行热点。它使用快速估算引擎,在数秒或数分钟而不是数天和数周内,为实际工业问题进行设计空间探索。

为了从具有FPGA加速器的异构多核系统中获得最佳效果,SLX面临着有趣的挑战。因此,目前正在扩展FPGA资源的高级模型,以便如何组织硬件加速。该模型将允许灵活地在每个应用程序的基础上进行架构决策,因此非常适合HLS感知流程。它还将实现更准确的性能评估,这对于有效探索解决方案空间至关重要。 SLX工具扩展用于自动HLS感知C代码生成,将无缝切换到HLS工具,最后一步实现使用SLX进行FPGA加速的端到端自动化流程。

HLS是我们应该善待的朋友,它也不应该承载我们错误的期望。为了使HLS成为一个方便且不可或缺的工具,我们需要提高设计抽象和自动化的水平。SLX通过经过检查的应用程序及其输入数据,以及底层平台的描述,即可帮助用户以最小的努力获得最佳设计。通过FPGA加速器实现异构多核编程的完全集成流程的要求为Silexica工程师提供了有趣的问题,敬请期待。

作者介绍:Nikilaos Kavvadias

Nikilaos来自于希腊,他于2008年毕业于希腊塞萨洛尼基亚里士多德大学(AUTH)的电子物理学专业,他的博士研究方向为定制处理器设计方法。他从2008年到2012年担任伯罗奔尼撒大学计算机科学与技术系的讲师。2012年1月到2015年7月,他加入了Ajax编译器,并帮助实现了高级综合技术的商业化。2015年1月,Kavvadias博士加入Silexica,并担任研发工程师。 他的研究兴趣包括多核架构的自动软件并行化、高阶综合、特定于应用的处理器设计以及FPGA的系统设计。

文章转载自:SLX多核资讯

推荐阅读