广告

一种新的硬件加速器编程语言

2022-07-13 12:48:32 MIT 阅读:
美国麻省理工学院计算机科学与人工智能实验室(CSAIL)研究人员创建了一种名为“Exo”的新编程语言,用于在硬件加速器上编写高性能代码。Exo可以帮助初级性能工程师将简单程序转换为复杂程序,以在加速器芯片上运行,从而将程序运算的速度提高几个数量级。目前,谷歌、苹果和英伟达的加速器设施均通过加速目标程序的“关键子程序”、内核或高性能计算(HPC)子进程来为科学计算和机器学习应用提供动力。而Exo语言有望为这些工作提供更优化的性能。

在编程加速器时(应用程序将某些任务卸载到系统硬件,特别是为了加速该任务),您必须构建一个全新的软件支持。硬件加速器可以以比CPU快几个数量级的速度运行某些任务,但它们不能开箱即用。软件需要有效地使用加速器的指令,使其与整个应用系统兼容,这意味着维护新芯片的工作量非常大。bpNednc

现在,麻省理工学院计算机科学与人工智能实验室 (CSAIL) 的科学家创建了一种名为“Exo”的新编程语言,用于在硬件加速器上编写高性能代码。Exo 帮助低级性能工程师将指定他们想要计算的非常简单的程序转换为非常复杂的程序,这些程序与规范执行相同的操作,但通过使用这些特殊的加速器芯片要快得多。例如,工程师可以使用 Exo 将简单的矩阵乘法转换为更复杂的程序,通过使用这些特殊的加速器,该程序的运行速度提高了几个数量级。bpNednc

与其他编程语言和编译器不同,Exo 是围绕一个称为“Exocompilation”的概念构建的。“传统上,许多研究都集中在自动化特定硬件的优化过程上,”博士 Yuka Ikarashi 说。电气工程和计算机科学专业的学生,​​CSAIL 附属机构,他是有关 Exo 的新论文的主要作者。“这对大多数程序员来说都很好,但对于性能工程师来说,编译器会经常出现问题,因为它有帮助。因为编译器的优化是自动的,所以当它做错事并给你 45% 的时候,没有好的方法可以修复它效率而不是 90%。”bpNednc

借助 Exocompilation,性能工程师重新回到了驾驶座上。选择应用哪些优化、何时以及以何种顺序从编译器外部化的责任返回给性能工程师。这样,他们一方面不必浪费时间与编译器抗争,另一方面也不必手动完成所有工作。同时,Exo 负责确保所有这些优化都是正确的。因此,性能工程师可以花时间提高性能,而不是调试复杂的优化代码。bpNednc

康奈尔大学计算机科学系助理教授 Adrian Sampson 说:“Exo 语言是一种在其目标硬件上参数化的编译器;同一个编译器可以适应许多不同的硬件加速器。” “Exo 无需编写一堆杂乱的 C++ 代码来编译新的加速器,而是为您提供了一种抽象、统一的方式来写下您想要定位的硬件的‘形状’。然后您可以重用现有的 Exo 编译器来适应新的描述,而不是从头开始编写全新的东西。这样的工作的潜在影响是巨大的:如果硬件创新者可以不再担心为每个新硬件创意开发新编译器的成本,他们就可以尝试并发布更多创意.bpNednc

当今制造的最高性能计算机芯片,例如 Google 的 TPU、Apple 的神经引擎或 NVIDIA 的 Tensor Cores,通过加速称为“关键子程序”、内核或高性能计算 (HPC) 的东西来为科学计算和机器学习应用程序提供动力。 ) 子程序。bpNednc

除了笨拙的行话,这些程序是必不可少的。例如,称为基本线性代数子程序 (BLAS) 的东西是一个“库”或此类子程序的集合,专门用于线性代数计算,并支持许多机器学习任务,如神经网络、天气预报、云计算和药物发现. (BLAS 非常重要,以至于它在 2021 年为 Jack Dongarra 赢得了图灵奖。)然而,这些需要数百名工程师设计的新芯片只能在这些 HPC 软件库允许的范围内发挥作用。bpNednc

但是,目前这种性能优化仍然是手动完成的,以确保这些芯片上的每个最后一个计算周期都被使用。HPC 子程序经常以超过 90% 的峰值理论效率运行,硬件工程师不遗余力地为这些理论峰值额外增加 5% 或 10% 的速度。因此,如果软件没有进行积极的优化,那么所有的辛勤工作都会被浪费掉——这正是 Exo 帮助避免的。bpNednc

Exocompilation 的另一个关键部分是性能工程师可以描述他们想要优化的新芯片,而无需修改编译器。传统上,硬件接口的定义由编译器开发人员维护,但对于大多数这些新的加速器芯片,硬件接口是专有的。公司必须维护自己的整个传统编译器的副本(分叉),经过修改以支持他们的特定芯片。除了性能工程师之外,这还需要雇用编译器开发人员团队。bpNednc

“在 Exo 中,我们将特定于硬件的后端的定义从 exocompiler 外部化。这使我们能够更好地将 Exo(一个开源项目)和特定于硬件的代码(通常是专有的)分开。我们已经展示了“我们可以使用 Exo 快速编写与英特尔手动优化的数学内核库一样高性能的代码。我们正在积极与多家公司的工程师和研究人员合作,”加州大学伯克利分校的博士后 Gilbert Bernstein 说。bpNednc

Exo 的未来需要探索一种更高效的调度元语言,并扩展其语义以支持并行编程模型,从而将其应用于更多的加速器,包括 GPU。bpNednc

原文链接:A programming language for hardware accelerators;Demi Xia编译bpNednc

责编:Demi
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
热门推荐
广告
广告
广告
EE直播间
在线研讨会
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了