软件定义硬件架构
AI 应用正促使芯片制造商和 OEM 重新审视重新配置硬件的可能性。
摩尔定律放缓,软件应用复杂性和规模激增,x86架构CPU运行通用软件的传统方法已无法满足嵌入式和AI应用的高效需求。
在当前x86架构主导的环境中,软硬件间差异显著。Imagination Technologies的AI与计算战略副总裁Russell James指出:“硬件加速器的需求与崛起,已重塑软硬件关系。软件程序员需深入了解底层硬件架构,以编写高效软件,应对新时代的挑战。”
本世纪初,软件定义硬件的热潮涌动,众多企业积极拥抱可重构计算,追求计算能力的即时转变,以灵活适应不同应用需求,这正是未来的计算趋势。
Cadence高级总监Frank Schirrmeister强调:“人工智能渴求计算网络快速而精准的更新。”回顾2000年代初,软件定义硬件的讨论尚未预见Dennard扩展、Amdahl定律等旧观念的终结。如今,我们仅用15年就迎来了架构领域特化的新时代,因为这是我们迫切的需求。”
图:微处理器数据趋势。?
但特定领域架构也有缺点。
Schirrmeister说:"架构可能是固定的,而可编程性确实很难,所以你需要回到编程模型的概念上来,你实际上是用这个模型对这部分进行编程。"话虽如此,但如果不给它至少一点点重新配置的自由,要想专注于一种特定的架构确实很难。否则,你基本上又回到了 ASIC/FPGA 的问题上。可重新配置的部分为你提供了一个目标领域架构,然后在这个架构内,由于可重新配置的特性,为你提供了进行更新的回旋余地。这是一个非常明显和有趣的优势。你需要有足够灵活的可重构性,这就是软件定义硬件/可重构硬件卷土重来的原因。人工智能将是推动可重新配置的一个重要起点。"
许多人对此表示赞同。OneSpin Solutions 的技术营销经理 Sergio Marchese 说,这正是 Xilinx Versal 等复杂 FPGA 的意义所在,它是一种具有可编程逻辑和大量资源(AI 引擎、CPU、DSP 等)的设备。"工程师编写人工智能软件(框架级),有一个工具链可以自动配置硬件,针对特定软件进行优化,"他说:"这在原则上是很好的,尤其是当算法变化很快时,人工智能和其他尖端应用就是这种情况。然而,要从硬件中挤出最后一个周期以提高性能,就需要在 RTL 层面上进行更改,并需要工程师具备这方面的专业知识。此外,对 RTL 的任何更改都需要进行彻底的重新验证,并尽可能使用可靠的正规方法。这包括形式等效性检查,以确保 FPGA 实现预期功能。
不过,实现这种可配置性的方法不止一种。运行英伟达公司 CUDA(一种专有的并行软件平台)的通用 GPU 就是一个很好的例子。"他说:"今天,我们有许多不同类型的硬件加速器,从 FPGA 到完全定制的 ASIC,如谷歌 TPU。"对多种计算类型的需求也扩展到了嵌入式 SoC 领域,CPU、GPU、DSP、NNPU 等都可以集成到一个芯片中。这就形成了软件定义硬件的理想模式,即由软件定义运行程序的硬件。从云数据中心服务器到手机和其他嵌入式设备,愿望都是一样的。"
具体来说,软件定义硬件基础架构(SDHI)是软件定义硬件基础架构的进一步延伸,即基础架构从一组虚拟集成的计算处理器中选择合适的元素来高效运行软件。"Imagination公司的詹姆斯说:"为了高效运行这些硬件加速器,需要一个软件计算框架,使底层软件语言能够有效、高效地利用所有可用硬件。"流行的软件计算框架 OpenCL 就是一个例子。该框架和其他此类框架主要适用于两种类型的硬件加速器--固定的底层硬件架构(如 GPGPU),或完全定制的 ASIC 和 FPGA,后者是硬件可编程集成电路,与完全定制的 ASIC 中的相同设计相比,可达到一定比例的性能水平"。
OpenCL框架为C语言底层算法在硬件上的执行提供了关键架构、API及资源,实现计算核心间的并行执行,显著提升利用率与效率。相较于GPGPU,FPGA中的OpenCL内核经HLS工具映射至硬件表示,非基于固定架构硬件加速器执行,展现出独特的优势。
多年来,人们一直在努力使软件更接近硬件,其中包括:
CUDA与TensorRT让软件编程与GPU硬件无缝对接,显著提升性能,即使面对固定GPU架构也能灵活应对。
SYCL,它是 CUDA 的开放式竞争对手。
SystemC,一种时序注释 C 语言。
Matlab,一种 HDL 编码器。
通过高级综合(HLS)工具,硬件定义完全转化为软件操作,凸显了抽象层次的关键差异。RTL(VHDL或Verilog),作为半导体行业的标准硬件描述语言,经编译器、综合与布局工具,精准映射至集成电路物理布局文件(GDSII或OASIS),展现了高效的硬件设计流程。
James 说:"C 语言和许多其他软件语言一样,是按顺序执行的,这也是 CPU 的运行方式。"而 RTL 则是并行执行所有代码行,设计者必须为其他执行顺序规则明确编码。这种差异意味着通常需要具有硬件设计背景的人才能正确理解和编写 RTL 代码。编写 RTL 代码是一个漫长而费力的过程,如果能将行为或算法模型综合为 RTL 代码,就能加快设计过程。在过去的 30 多年里,HLS 工具一直在做这项工作,但问题一直在于,抽象程度越高,硬件设计往往越不理想(抽象惩罚)。部分FPGA 供应商提供内部 OpenCL 到 FPGA 实现工具,使更多开发人员能够使用 FPGA(无需深入的 RTL 设计和编码经验)"。
图:基于虚拟原型的架构开发流程
为什么需要 SDH
软件定义硬件一词特指将应用映射到 等价硬件模型,以替代昂贵的特定应用 SoC 开发。MachineWare 首席应用工程师 Jan 说,该术语适用于形式服从功能的一般原则,即在芯片设计中,功能决定计算架构。当通用 CPU、GPU 或 DSP 无法提供必要的性能和/或计算效率,以及专用硬件无法提供必要的灵活性时,就需要软件定义的硬件。Jan 说:"最常见的例子是用于加速人工神经网络的 IP 和 SoC,它们需要高度的灵活性来适应快速发展的神经网络图,同时还需要定制的架构来实现必要的性能和能效。"根据目标市场的要求,这就产生了各种可编程和可配置的计算机架构,从带有矢量扩展的通用 CPU、优化的 GPU、矢量 DSP、FPGA、特定应用指令集处理器,到寄存器可编程数据路径。
James 认为 SDH 至关重要。"他说:"计算框架在一定程度上将开发人员从底层硬件架构中抽象出来,而 SYCL 等开放式计算平台则在此基础上更进一步,(在开发人员层面)实现了对底层硬件的更大抽象。他说:"为 GPGPU 编写 OpenCL,这就定义了硬件如何执行定义的内核。为 FPGA 编写 OpenCL,就能在 FPGA 上创建完全自定义的加速内核。为包含 CPU、GPGPU 和专用神经网络加速器的 SoC 编写 OpenCL,这样就可以实现异构计算,从而最大限度地提高执行效率。但这种方法并非没有挑战,尤其是涉及人工智能时。
他说:"人工智能是一项快节奏、快速发展的技术,因此该领域的任何产品都需要快速开发、验证、确认和部署,否则就有可能错失良机。将SDH方法应用于ASIC设计会导致硬件架构具有多种类型和数量的计算元件。
其中一些计算元件将更具通用性,而另一些计算元件的功能则更为固定,但在现在和未来开发软件算法和应用时,这些计算元件的组合将提供最佳的灵活性,从而在一定程度上面向未来,在下一个ASIC出现之前,能够在人工智能进化风暴中渡过足够长的时间。这看起来像是计算硬件的完全民主化,但并非所有的计算内核都是一样的,它们的性能也不尽相同。这时,硬件供应商可以通过在开放式计算框架中添加定制的垂直优化,或者完全定制优化的封闭式计算解决方案,来创造差异化。
此外,软件定义硬件无可争议的优势是能够显著提高性能和计算效率。Kogel 回顾了谷歌 2015 年的 TPU v1,其运行深度神经网络的速度比当代类似技术的 CPU 和 GPU 快 15 到 30 倍,能效比它们高 30 到 80 倍。"人工智能的确是特定领域架构的杀手级应用,因为它提供了令人尴尬的并行性,可以充分利用量身定制的处理资源。因此,我们看到了计算机架构的新黄金时代,它刺激了数以百计的芯片设计项目,而在此之前,设计启动的数量是不断下降的。"但是,软件定义硬件带来的巨大挑战是必要软件编程流程的复杂性。"他说:"需要复杂的编译器和运行时环境,才能将应用映射到定制硬件,并充分利用可用资源。"开发具有竞争力的软件流程需要大量的投资以及硬件和软件团队之间的紧密合作。
”其他人也发现了类似的问题。卡梅隆 EDA 公司顾问 Kevin Cameron说:"如果你看看人们在神经网络中做的事情,神经网络比其他大多数事情更适合扩展 C++ 描述,因为你描述的是一个由小型进程组成的异步网络,它适合称为 CSP(通信顺序进程)的计算范式。"CSP 是一种通信顺序进程,从 70 年代就已经出现,但一直没有得到很好的实施。在硬件/软件权衡方面,很多问题之一是很难找到一种人们喜欢的语言,软件工程师不会使用 Verilog 或 SystemVerilog。这既昂贵又困难。尽管如此,Cameron 认为,如果 C++ 中的一些概念能够扩展到支持硬件描述语言正在做的事情,再加上事件驱动指令和数据通道,也许工程界会使用它们。
Schirrmeister说:"人们一度认为OpenCL很棒,但感觉它并没有真正做到这一点。"编程模型的种类仍然很多。现在有很多很酷、很有趣的可重构架构,但我们该如何对它们进行编程呢?编程模型是什么?这些都是未来需要回答的有趣问题。
其他工具和方法
虚拟原型技术又增加了一个可配置的旋钮。在规范计算机体系结构和软件开发流程的过程中,虚拟原型可实现算法、编译器和体系结构的联合优化。Jan 说:"我们的想法是创建一个高级仿真模型,对应用工作负载、编译器转换和硬件资源进行功耗/性能权衡分析。
"我们的目标是为硬件和软件实施团队提供最佳规范。为了在竞争激烈的市场(如人工智能 SoC 设计)中加快产品上市速度,虚拟原型可以将嵌入式软件和编译器的开发工作转移到左侧比如汽车。在这里,仿真模型可作为虚拟目标,用于硅前验证和优化编译器、早期开发固件和驱动程序,以及早期将人工智能加速器集成到主机 CPU 上运行的软件栈中。"
结论
目前还不清楚这些方法中哪一种最终会取得成功。显而易见的是,设计需要灵活性,以应对软件和市场需求的不断变化,同时还需要更高的性能,这是硬件本身所无法提供的。因此,重点不是仅仅制造更快的硬件,而是定制硬件以提供足够的性能,同时还要有足够的灵活性以适应变化。这是一项艰难的平衡工作,需要掌握一些复杂的硬件和软件编程知识。但只要方法得当,就能显著提高速度和功耗,并留出足够的灵活性,为设计增加一些面向未来的功能。
-对此,您有什么看法见解?-