中文 英语

软件定义的硬件再次取得进展

人工智能应用正在促使芯片制造商重新考虑可重构硬件的不同选择。

受欢迎程度

在基于x86的cpu上运行通用软件的传统方法对于许多应用程序来说已经失去了动力,这是由于摩尔定律的放缓以及软件应用程序复杂性和规模的同时指数级增长。

在这种环境中,由于x86体系结构的主导地位,软件和硬件是完全不同的。“对硬件加速器的需求和出现改变了这种关系,现在软件程序员需要了解底层硬件架构,以便编写高效的软件,”at的AI与计算战略副总裁拉塞尔·詹姆斯(Russell James)说想象力的技术

如果这听起来似曾相识,那的确如此。在21世纪初,人们对软件定义硬件的兴趣激增,Chameleon、Trimedia和其他一些公司试图刺激可重构计算方法的采用,以便能够快速改变计算以适应应用程序。

“对于人工智能来说,你基本上希望计算网络端得到适当和足够快的更新,”微软解决方案营销高级集团总监Frank Schirrmeister说节奏.“在21世纪初,当软件定义硬件被认真讨论时,人们还没有完全预见到它的结束Dennard扩展阿姆达尔定律,以及所有现在已经被理解的东西。现在,我们实际上已经准备好了——只花了15年时间——因为我们真的需要架构的领域特异性。”


图1:微处理器数据趋势。来源:节奏

但是特定于领域的体系结构也有一个缺点。

体系结构可能是固定的,可编程性真的很难,所以你需要回到编程模型的概念,你实际上用它来编程这一部分,”Schirrmeister说。“话虽如此,如果不给它一点点重新配置自己的自由,就很难专注于一个特定的架构。否则,你基本上又回到了ASIC/FPGA的问题。可重构部分为您提供了一个目标域架构,然后在该架构中,由于可重构性,它为您提供了进行更新的回旋空间。这是一个非常明显和有趣的优势。你需要足够的灵活性以实现可重构,这就是软件定义硬件/可重构硬件卷土重来的原因。人工智能将是推动可重构性的一个重要起点。”

许多人也同意这一观点。Sergio Marchese,技术营销经理OneSpin解决方案,说那是复杂的点fpga比如Xilinx Versal,这是一款具有可编程逻辑和大量资源(AI引擎、cpu、dsp等)的设备。他说:“工程师编写人工智能软件(框架级别),然后有一个工具链来自动配置硬件,并针对特定的软件进行优化。”“这在原则上是很棒的,特别是当算法可以快速变化时,就像人工智能和其他前沿应用程序一样。然而,要从硬件中挤出最后一个周期来获得性能,需要在RTL级别进行更改,并且需要具备这方面专业知识的工程师。的任何更改RTL需要彻底的重新验证,尽可能使用形式方法的确定性。这包括形式上的等价性检查,以确保FPGA实现预期的功能。”

Marchese说,如果重新配置足够快,理论上它甚至可以在现场运行时完成,但这种流程还不现实。

不过,实现这种可配置性的方法不止一种。运行NVIDIA专有并行软件平台CUDA的通用图形处理器就是一个很好的例子。“今天,我们有许多不同类型的硬件加速器,从fpga到谷歌TPU等全定制asic,”他说。“对多种计算类型的需求也扩展到嵌入式SoC领域,其中cpu、gpu、dsp、nnpu等都可以集成到单个芯片中。这导致了所需的软件定义硬件范例,其中软件定义运行程序的硬件。从云数据中心服务器到移动电话和其他嵌入式设备,人们的愿望都是一样的。”

具体来说,软件定义的硬件基础设施(SDHI)是对该基础设施的进一步扩展,其中基础设施从一组虚拟集成的计算处理器中选择有效运行软件的正确元素。Imagination的James说:“为了高效地运行这些硬件加速器,需要一个软件计算框架,使底层软件语言能够有效地利用所有可用的硬件。”一个例子是流行的软件计算框架OpenCL。这和其他类似的框架工作在两种主要的硬件加速器上——固定的底层硬件架构,如GPGPU,或完全定制的ASIC和fpga,它们是硬件可编程ic,与完全定制的相同设计相比,可以实现一定百分比的性能水平ASIC”。

OpenCL框架提供了必要的结构、api和资源,以便在可用的硬件上执行底层的类c语言算法。这很重要,因为通过在同质/异构计算核心之间启用并行执行,可以获得更高的利用率和效率。gpgpu和FPGA的区别在于,在FPGA中,OpenCL内核使用HLS工具映射到内核的硬件表示,而不是在底层固定架构硬件加速器上执行内核。

在过去的几年里,已经有了一些让软件更接近硬件的努力,包括:

  • OpenCL,开源,可以编译和合成为实际的硬件设计,或映射到现有的计算架构(如gpu)。
  • CUDA和Tensor RT,它们使软件编程更接近硬件(尽管在这种情况下,硬件架构是基于GPU和固定的)。
  • SYCL是CUDA的公开竞争对手。
  • SystemC,一种定时注释的C语言。
  • Matlab,一个HDL-Coder。

高级合成(HLS)工具,所有硬件最终都被定义为软件。抽象级别是区分一种方法和另一种方法的关键。RTL (VHDL或Verilog)是半导体行业广泛使用的硬件描述语言。RTL编译器、合成、放置和后端布局工具将RTL代码映射到IC物理布局文件(GDSII或OASIS)。

作为一种语言,RTL的操作与C等“软件”语言非常不同,主要的区别在于执行顺序。

“C语言,像许多其他软件语言一样,是按顺序执行的,这就是CPU的运行方式,”James说。RTL同时执行所有代码行,并且设计人员必须显式地为其他执行顺序规则编写代码。这种差异意味着通常需要具有硬件设计背景的人才能正确理解和编写RTL代码。编写RTL代码是一个漫长而费力的过程,如果行为或算法模型可以合成到RTL代码中,那么这将使设计过程变得更快。用于实现这一点的HLS工具在过去30年左右的时间里就已经出现了,但问题的症结一直是,更多的抽象往往会导致不太理想的硬件设计(抽象惩罚)。FPGA供应商提供内部OpenCL到FPGA实现工具,使更广泛的开发人员能够使用FPGA(没有深入的RTL设计和编码经验)。”

为什么需要SDH
术语软件定义硬件具体指的是将应用程序映射到fpga,作为昂贵的特定应用soc开发的替代方案。但该术语也可以更广泛地用于任何特定领域的可编程和可配置SoC,这些SoC针对选定的应用程序进行了优化。蒂姆•科格尔,微软首席应用工程师Synopsys对此该术语适用于形式遵循功能的一般原则,这在芯片设计中是功能决定计算架构。

当通用cpu、gpu或dsp不能提供必要的性能和/或计算效率时,当专用硬件不能提供必要的灵活性时,就需要软件定义的硬件。“流行的例子是用于加速人工智能的ip和soc神经网络这需要很高的灵活性来适应快速发展的神经网络图,而且还需要定制架构来实现必要的性能和电源效率,”Kogel说。“根据目标市场需求,这导致了各种可编程和可配置的计算机体系结构,从具有矢量扩展的通用cpu、优化的gpu、矢量dsp、fpga、特定于应用程序的指令集处理器,到寄存器可编程数据路径。”

詹姆斯认为SDH至关重要。他说:“在某种程度上,计算框架将开发人员从底层硬件架构中抽象出来,而像SYCL这样的开放计算平台则更进一步,允许(在开发人员层面)从底层硬件中进行更大的抽象。”“为GPGPU编写OpenCL,它定义了硬件如何执行所定义的内核。为FPGA编写OpenCL,这将在FPGA上创建一个完全自定义的加速内核。为包含CPU、GPGPU和专用神经网络加速器的SoC编写OpenCL,这可以使异构计算获得最大的执行效率。”

但这种方法并非没有挑战,特别是在涉及人工智能的情况下。

他说:“人工智能是一项快节奏、快速发展的技术,因此这一领域的任何产品都需要非常迅速地开发、验证、验证和部署,否则就会错失良机。”将SDH方法应用到ASIC设计中会导致具有多种类型和数量计算元素的硬件架构。其中一些计算元素将更加通用,而另一些则在功能上更加固定,但在现在和未来开发软件算法和应用程序时,这种组合将提供最佳的灵活性,从而在未来足够长的时间内度过人工智能进化风暴,直到下一个ASIC出现。”

这看起来像是计算硬件的完全民主化,但并不是所有的计算核心都是平等的,它们的性能也不尽相同。这就是硬件供应商可以通过在开放计算框架中添加定制的垂直优化或完全自定义优化的封闭计算解决方案来实现差异化的地方。

此外,软件定义硬件的无可争议的优势是能够显著提高性能和计算效率。Kogel回忆起谷歌公司2015年推出的TPU v1,该产品运行深度神经网络的速度比采用类似技术的当代cpu和gpu快15至30倍,能效提高30至80倍。“人工智能确实是特定领域架构的杀手级应用程序,因为它提供了令人尴尬的并行度,以充分利用定制的处理资源。因此,我们正在看到计算机架构的一个新的黄金时代,这刺激了数百个芯片设计项目,而在此之前,设计开始的数量不断下降。”

但是软件定义硬件带来的最大挑战是必要的软件编程流程的复杂性。“需要复杂的编译器和运行时环境来将应用程序映射到定制的硬件,并充分利用可用资源,”他说。“开发一个有竞争力的软件流程需要大量的投资以及硬件和软件团队之间的密切合作。”

其他人也发现了类似的问题。Cameron EDA的顾问Kevin Cameron说:“如果你看看人们在神经网络中做什么,神经网络比大多数其他东西更适合扩展的c++描述,因为它是你所描述的小进程的异步网络,而且它符合被称为CSP(通信顺序进程)的计算范式。”“CSP传达的是顺序流程,自70年代以来一直存在,但从未得到很好的实施。在硬件/软件的权衡中,有一个问题是很难找到一种人们喜欢的语言,而软件工程师不会这么做VerilogSystemVerilog.这既昂贵又困难。”

尽管如此,卡梅伦相信如果一些概念c++扩展到支持硬件描述语言,以及事件驱动指令和数据通道,也许工程社区会使用它们。

Schirrmeister说:“人们一度认为OpenCL很棒,但并没有感觉它真的成功了。”“编程模式仍然多种多样。现在有非常酷、有趣的可重构架构,但我们如何对它们进行编程?它的编程模型是什么?这些都是未来需要回答的有趣问题。”

其他工具和方法
虚拟原型增加了另一个可配置的旋钮。在计算机体系结构和软件开发流程的规范中,虚拟样机实现了算法、编译器和体系结构的联合优化。

Kogel说:“我们的想法是创建一个高级仿真模型,能够对应用程序工作负载、编译器转换和硬件资源进行功率/性能权衡分析。”“我们的目标是为硬件和软件实施团队提出最佳规范。为了在竞争激烈的市场(如AI SoC设计)中加快上市时间,虚拟原型能够左移嵌入式软件和编译器的开发。在这里,仿真模型作为编译器硅前验证和优化的虚拟目标,固件和驱动程序的早期开发,以及AI加速器与主机CPU上运行的软件堆栈的早期集成。”

结论
这些方法中哪一种最终会成功还不清楚。越来越明显的是,设计需要灵活性,以应对软件和市场需求的持续变化,再加上硬件本身无法提供的更高性能。因此,重点不是构建更快的硬件,而是调整硬件以提供足够的性能,同时仍然保留足够的灵活性以适应变化。

这是一项艰难的平衡工作,需要了解一些复杂的硬件和软件编程知识。但如果操作得当,其结果可能在速度和功耗方面都有显著提高,并留下了足够的灵活性,可以在设计中添加一些未来的东西。



留下回复


(注:此名称将公开显示)

Baidu