软硬件协同设计成为现实

来源:众壹云 发布日期:2021-10-20 10:58

在过去的20年中,该行业一直在寻求部署硬件/软件协同设计概念。在取得进展的同时,软件/硬件协同设计的前景似乎更加光明。

为了理解这两种方法之间的区别,定义一些基础知识很重要。

硬件/软件协同设计本质上是一个自下而上的过程,首先开发硬件并具有如何使用它的一般概念。然后将软件映射到该硬件。这有时称为基于平台的设计。最近的一个例子是Arm新的嵌入式边缘可扩展开放架构 (SOAFEE),它旨在实现软件定义的汽车开发。

相比之下,软件/硬件协同设计是一个自上而下的过程,其中软件工作负载用于驱动硬件架构。这在今天正成为一种更流行的方法,它的典型代表是 AI 推理引擎和异构架构。高级综合也是这种方法论的一种形式。

两者都是可行的设计方法,有些设计流程是两者的结合。“它总是回到基本面,即规模经济,” Cadence产品营销总监 Michael Young 说。“它基于您需要实现的功能,而这通常转化为响应时间。某些功能具有实时的关键任务限制。在这些情况下,硬件和软件之间的平衡很明显,因为您需要确保无论做什么,响应时间都在定义的限制内。其他应用程序没有这个限制,可以在资源可用时完成。”

但随着摩尔定律的缩放速度放缓,今天还有其他压力在起作用。Imperas Software 的首席执行官西蒙·戴维曼(Simon Davidmann) 说:“正在发生的事情是软件正在推动硬件中的功能。” “产品需要更高效的软件,这推动了硬件架构的发展。”

这两种方法都不比另一种更好。Synopsys首席应用工程师 Tim Kogel 表示:“我们看到了硬件优先和软件优先的设计方法,两者都不会产生次优结果。” “在人工智能中,优化硬件、人工智能算法和人工智能编译器是一个相位耦合的问题。它们需要一起设计、分析和优化,以得出优化的解决方案。举个简单的例子,A​​I 加速器中本地内存的大小决定了 AI 编译器中的最佳循环平铺。”

成本是等式中非常重要的一部分。“协同设计是针对给定问题实现高度优化硬件的一种非常好的方法,”弗劳恩霍夫 IIS 自适应系统部工程高级系统集成组组长兼高效电子部门负责人 Andy Heinig 说。“但这种高水平的优化是该方法的缺点之一。优化设计非常昂贵,因此这种方法只有在生产的设备数量非常多的情况下才能奏效。大多数应用程序不需要优化的硬件,而是使用可以在不同应用程序中重复使用的更灵活的架构。高度优化但灵活的架构应该是下一代硬件/软件协同设计流程的结果。”

高级综合发展

几十年来,从软件自动生成硬件一直是学术界和工业界的目标,这导致了高级综合 (HLS) 的发展。“为在 CPU 上运行而开发的软件并不是高级综合的最佳代码,”西门子 EDA战略和业务开发高级经理 Anoop Saha 说。“映射本质上是将串行代码转换为并行块,这具有挑战性。这就是 HLS 的价值以及您如何做到这一点。我们已经看到SystemC 的使用,它具有对多线程的本机支持,但它是面向硬件的,而不是面向软件的。”

这种方法仍然存在挑战。Xilinx软件和人工智能解决方案营销总监 Nick Ni 表示:“我们一直在持续投资,并继续提高它的采用率。” “十年前,99% 的人只写Verilog和VHDL. 但是今天,我们有超过一半的开发人员正在将 HLS 用于一个 IP,因此我们在采用方面取得了很大进展。最重要的是,我认为从硬件/软件协同设计的角度来看,没有任何东西真正起飞。在语言方面已经有很多有趣的建议,使其更加并行,更加多处理器友好,而且这些绝对是朝着正确的方向发展的。例如,OpenCL 真的很想达到这个目标,但它已经失去了动力。”

基于平台的方法

平台的设计不会尝试注入尽可能多的自动化。相反,它依赖于基于分析的人工干预。“硬件/软件协同设计已经有一段时间了,” Arteris IP研究员和系统架构师 Michael Frank 说。“人们一直在尝试使用真实软件来估计平台的行为并评估其性能已经有一段时间了。业界一直在构建更好的模拟器,例如 Gem5 和 Qemu。这已经扩展到包含加速器的系统中,您可以在其中构建加速器模型并通过在加速器上运行部分代码来卸载 CPU。然后您尝试平衡这一点,将更多功能从软件转移到硬件中。”

Arm 最近宣布了一种新的软件架构和参考实现,称为嵌入式边缘可扩展开放架构 (SOAFEE),以及两个新的参考硬件平台,以加速汽车的软件定义未来。副总裁 Chet Babla 表示:“为了满足汽车的软件定义需求,必须提供一个标准化框架,以增强经过验证的云原生技术,这些技术可与汽车应用所需的实时和安全功能大规模协同工作。” Arm 的汽车和物联网业务线的汽车。“同样的框架还可以使其他实时和安全关键用例受益,例如机器人和工业自动化。”

这适用于某些类别的应用程序。“我们看到更多的硬件/软件协同设计,不仅因为处理范式发生了变化,而且硬件范式也发生了变化,”西门子的 Saha 说。“过去,硬件是非常通用的,上面有一个 ISA 层。该软件位于此之上。它为软件和硬件之间的边界以及它们如何相互交互提供了非常清晰的分割。这缩短了上市时间。但为了改变这一点,他们必须改变软件编程范式,这会影响投资回报率。”

一个引爆点

有人建议 Nvidia 用 CUDA 创建一个引爆点。虽然这不是第一次创建新的编程模型和方法,但可以说这是第一次成功。事实上,它把深奥的并行处理硬件架构变成了一种接近通用计算平台的东西,可以解决某些类别的问题。没有它,GPU 仍然只是一个图形处理器。

“CUDA 远远领先于 OpenCL,因为它基本上使并行平台的描述变得不可知,”Arteris 的 Frank 说。“但这不是第一次。托勒密(加州大学伯克利分校)是一种建模并行性和建模数据驱动模型的方法。OpenMP,自动并行化编译器——人们已经在这方面工作了很长时间,解决它并非易事。将硬件平台构建为编译器的良好目标被证明是正确的方法。英伟达是最早做到这一点的公司之一。”

Xilinx 的 Ni 表示同意。“如果用户可以设置显式并行性,例如 CUDA 甚至 OpenCL,那总是最简单的。这使得编译更加明确和容易。充分利用管道,充分利用内存,仍然是一个不平凡的问题。”

AI

的影响 AI的快速发展已将焦点从硬件优先转向软件优先流程。“了解 AI 和 ML 软件工作负载是开始设计硬件架构的关键第一步,”Esperanto Technologies 的 CBO Lee Flanagan 说。“人工智能中的工作负载在模型中被抽象地描述,人工智能应用程序中有许多不同类型的模型。这些模型用于驱动 AI 芯片架构。例如,ResNet-50(残差网络)是一个卷积神经网络,它推动了图像分类密集矩阵计算的需求。然而,机器学习的推荐系统需要一种架构,该架构支持深度内存系统中跨大型模型的稀疏矩阵。”

当软件必须满足延迟要求时,需要专门的硬件来部署软件。“许多 AI 框架被设计为在云中运行,因为这是获得 100 个或 1000 个处理器的唯一途径,”Imperas 的 Davidmann 说。“现在发生的事情是,人们希望在端点的设备中以及靠近物联网边缘的设备中处理所有这些数据。这是软件/硬件协同设计,人们正在构建硬件以启用软件。他们不会构建硬件,也不会查看其上运行的软件,这是 20 年前发生的事情。现在,他们受到软件需求的驱动。”

虽然人工智能是显而易见的应用,但趋势远不止于此。“正如 Hennessy/Patterson 所说,人工智能显然正在推动计算机架构的新黄金时代,”Synopsys 的 Kogel 说。“摩尔定律正在失去动力,预计未来 10 年设计复杂性将增长 1,000 倍,人工智能要求的超出摩尔所能提供的范围。唯一的出路是通过定制用于计算、存储和通信的硬件资源来满足目标 AI 应用程序的特定需求,从而创新计算机架构。”

经济性仍然很重要,这意味着虽然硬件可以针对一项任务进行优化,但它通常必须保持足够的灵活性才能执行其他任务。“人工智能设备需要多功能和变形才能完成不同的事情,”Cadence 的 Young 说。“例如,监控系统还可以监控交通。你可以数出有多少辆车在红灯后排成一排。但它只需要识别一个立方体,以及它背后的立方体,并聚合该信息。它不需要面部识别的分辨率。您可以训练设计的不同部分以不同的分辨率或不同的尺寸运行。当您为 32 位 CPU 编写程序时,就是这样。即使我只使用 8 位数据,它仍然占据整个 32 位路径。你在浪费其他位。人工智能正在影响设计的完成方式。”

在 AI 之外,同样的趋势也发生在其他领域,其中处理和通信需求超过了通用计算的发展。“在数据中心,出现了一类用于基础设施和数据处理任务(IPU、DPU)的新型处理单元,”Kogel 补充道。“这些针对内务和通信任务进行了优化,否则会消耗大量 CPU 周期。此外,极低功耗物联网设备的硬件是为软件量身定制的,以减少开销功耗并最大限度地提高计算效率。”

软件/硬件协同

要使新范式成功,需要大量技术才能将程序员与硬件的复杂性隔离开来。“宏架构的规范和优化需要应用程序工作负载和硬件资源的抽象模型,以探索粗粒度分区权衡,”Kogel 解释说。“Y 形图方法(见图 1)的想法是将应用程序工作负载与硬件资源模型相匹配,以构建一个虚拟原型,允许对性能、功耗、利用率、效率等 KPI 进行定量分析。”

图 1:Y 形图方法,映射 HW 平台上的应用程序工作负载以构建用于宏观架构分析的虚拟原型。资料来源:新思科技

图 1:Y 形图方法,映射 HW 平台上的应用程序工作负载以构建用于宏观架构分析的虚拟原型。资料来源:新思科技

“工作负载模型以与架构无关的方式捕获任务级并行性和依赖性,以及每个任务的处理和通信要求,”Kogel 解释说。“硬件平台对设想的 SoC 的可用处理、互连和内存资源进行建模。实际适用性需要一个虚拟原型设计环境,该环境提供必要的工具和模型库,以高效地构建这些模型。”

其中大部分仍然是定向的、手动的方法。“这方面存在差距,”杨说。“每个大公司都在做自己的事情。所需要的是一种复杂的或智能的编译器,它可以基于实时约束并理解经济性来采用不同的应用程序。如果我有各种处理资源,我该如何分配工作量才能获得正确的响应时间?”

随着处理平台变得更加异构,这使得问题变得更加困难。“您不再拥有软件所在的简单 ISA 层,”Saha 说。“界限已经改变。软件算法应该很容易地针对硬件端点。算法人员应该能够编写加速器模型。例如,他们可以使用硬件数据类型来量化他们的算法,他们应该在最终确定他们的算法之前这样做。他们应该能够看到某些东西是否可以合成。算法的可实现性本质上应该是软件开发人员的原生概念。我们已经看到这方面的一些变化。我们的算法数据类型是开源的,我们已经看到其下载量比客户数量高出大约两个数量级。”

具有讽刺意味的是,对于人工智能而言,自动化比许多其他任务更容易。“我们的编译器不仅可以将这些 AI 模型的软件编译为在芯片内处理器上运行的指令,而且我们还可以重新编译为特定领域的架构。整个硬件设计基于实际模型,”赛灵思的 Ni 说。“这是真正的软件/硬件协同设计。这是唯一可能的,因为虽然我们有像人工智能这样具有挑战性的问题,但它也是一个定义明确的问题。人们已经发明了 AI 框架和所有 API,所有插件。TensorFlow 或 PyTorch 已经定义了如何编写层和类似的东西。编译器需要处理的事情较少,在这些范围内,我们可以进行大量优化并调整硬件创建。”

走到一起

纯粹的硬件优先或软件优先的方法不太可能长期成功。这需要合作。“人工智能应用需要一种整体方法,”世界语的弗拉纳根说。“这涵盖了从低功耗电路设计师到硬件设计师、架构师、软件开发人员、数据科学家以及最了解其重要应用的客户的所有人。”

自动化还不如人类。“基于人工智能的方法将帮助专家优化算法、编译器和硬件架构,但在可预见的未来,每个领域的人类专家都将需要‘在循环中’,”Kogel 说。“最具竞争力的产品将由团队开发,不同学科在开放和高效的环境中进行协作。”

完全自动化可能需要很长时间。“这将始终涉及人体工程学方面,因为这是一个非常困难的决定,”杨说。“你在哪里定义这条线?如果你犯了一个错误,它可能会非常昂贵。这就是仿真、仿真和原型设计非常重要的原因,因为您可以运行‘假设’场景并执行架构权衡分析。”

有时,阻碍的不是技术。“这需要组织变革,”萨哈说。“你不能让独立的软件和硬件团队从不互相交谈。必须去除该边界。我们看到的是,虽然许多团队仍然是不同的团队,但他们通过相同的层次结构进行报告,或者他们有更密切的合作。我见过硬件组有一个算法人员向同一经理报告的情况。这有助于确定算法的可实施性,并允许他们对软件进行快速迭代。”

结论

新的应用程序迫使软件编写、硬件定义以及它们如何相互映射的方式发生变化。定义新软件范式的僵局已经打破,我们可以期待看到软硬件组合流程的创新速度加快。它会扩展回在单个 CPU 上运行的顺序 C 空间吗?可能暂时不会。但归根结底,这可能只是问题中非常小的和无关紧要的部分。