高性能计算,代码量少得多

许多公司在招聘人才方面投入巨大,以创建支撑现代人工智能系统的高性能库代码,例如 NVIDIA 开发了一些最先进的高性能计算(HPC)库,形成了难以突破的竞争壁垒。

而麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员用一种名为Exo 2的新编程语言表明,几个月内几个学生可以用几百行代码与最先进的 HPC 库竞争,而不是数万行。

Exo 2 属于麻省理工学院教授 Jonathan Ragan-Kelley 所称的“用户可调度语言”(USLs)新类别。USLs 让程序员掌控全局,而非寄希望于不透明的编译器自动生成最快的代码,允许他们编写“调度”来明确控制编译器生成代码的方式,使性能工程师能将指定要计算内容的简单程序转换为与原始规格相同但快得多的复杂程序。

现有 USL(如原始 Exo)的局限性之一是其相对固定的调度操作集,难以在不同“内核”(高性能库中的单个组件)中重用调度代码。相比之下,Exo 2 允许用户在编译器外部定义新的调度操作,促进可重用调度库的创建。主要作者 Yuka Ikarashi 表示,Exo 2 可将总调度代码减少 100 倍,并在包括为许多机器学习应用提供动力的基本线性代数子程序(BLAS)等多个不同平台上提供与最先进实现竞争的性能,这使其成为 HPC 中专注于优化不同操作、数据类型和目标架构内核的工程师的一个有吸引力的选择。

Ikarashi 称这是一种自下而上的自动化方法,而非在高性能代码上进行机器学习/人工智能搜索,性能工程师和硬件实现者可以编写自己的调度库,即一组应用于硬件以达到峰值性能的优化技术。

Exo 2 的一个主要优势是通过在应用和硬件目标之间重用调度代码,减少了任何时候所需的编码工作量。研究人员在 Exo 2 中实现了一个约 2000 行代码的调度库,封装了特定于线性代数和特定于目标(AVX512、AVX2、Neon 和 Gemmini 硬件加速器)的可重用优化,该库将超过 80 个高性能内核的调度工作整合在一起,每个内核最多十几行代码,提供了可与 MKL、OpenBLAS、BLIS 和 Halide 相媲美或更好的性能。

Exo 2 包括一种称为“游标”的新颖机制,为在整个调度过程中指向目标代码提供了他们所称的“稳定参考”。Ikarashi 称稳定参考对于用户在库函数中封装调度至关重要,因为它使调度代码独立于目标代码转换。

Ikarashi 称 USLs 应设计为用户可扩展的,而非有固定的操作集,这样语言可通过实现适应不同优化要求和应用领域的库来支持大型项目。

Exo 2 的设计允许性能工程师专注于高级优化策略,同时通过使用安全原语确保底层目标代码在功能上保持等效。未来,团队希望扩展 Exo 2 对不同类型硬件加速器(如 GPU)的支持,一些正在进行的项目旨在在正确性、编译时间和表达性方面改进编译器分析本身。Ikarashi 与 Ragan-Kelley 共同撰写了该论文,作者还包括研究生 Kevin Qian 和 Samir Droubi、Adobe 的 Alex Reinking 以及前 CSAIL 博士后 Gilbert Bernstein(现为华盛顿大学教授),该研究部分由美国国防高级研究计划局(DARPA)和美国国家科学基金会资助,第一作者还得到了 Masason、Funai 和 Quad 奖学金的支持。

阅读 19
0 条评论