高性能计算,代码少得多
快速阅读: 据《麻省理工学院》称,MIT研发新编程语言Exo 2,简化高性能计算库代码,仅数百行即可匹敌传统数十万行代码的库。Exo 2通过用户可调度语言让用户控制代码生成,提升性能且易于复用。该语言减少编码工作量,提供稳定引用机制,未来将扩展对更多硬件加速器支持。此研究获多方资助。
许多公司投入大量资金招募人才,以构建支撑现代人工智能系统的高性能库代码。例如,英伟达开发了一些最先进的高性能计算(HPC)库,形成了一个难以被他人超越的竞争优势。然而,如果有一两名学生仅用数百行代码便能在短短几个月内与这些顶级HPC库竞争,而非需要数十万甚至上百万行代码呢?这就是麻省理工学院计算机科学与人工智能实验室(CSAIL)的研究人员通过一种名为“Exo 2”的新编程语言所展现的成果。
“Exo 2”属于麻省理工学院教授乔纳森·拉甘-凯利所称的“用户可调度语言”(USLs)这一全新类别。与依赖不透明编译器自动生成最快代码的方式不同,USLs将程序员置于主导地位,允许他们编写“调度”,明确控制编译器如何生成代码。这种方法使得性能工程师能够将描述所需计算任务的简单程序转化为复杂程序,这些程序不仅能完成与原始规格相同的工作,而且运行速度更快。
现有的USLs(如最初的Exo)存在一个局限性,即其调度操作集相对固定,这使得在不同的“内核”(高性能库中的个体组件)间重用调度代码变得困难。相比之下,Exo 2允许用户在编译器外部定义新的调度操作,从而促进可重用调度库的创建。主要作者、麻省理工学院电气工程与计算机科学博士生兼CSAIL附属成员今川由香指出,Exo 2能够将总调度代码缩减至原来的百分之一,并在多个不同平台上提供与最先进实现相竞争的性能,包括支持众多机器学习应用的基础线性代数子程序(BLAS)。这对专注于优化不同操作、数据类型及目标架构内核的高性能计算工程师而言是一项极具吸引力的选择。“这是一种自下而上的自动化方法,而非依赖机器学习/人工智能搜索,”今川由香说道,“这意味着性能工程师和硬件实现者可以编写自己的调度库,这是一组应用于硬件以达到峰值性能的优化技术。”
Exo 2的一大优势在于,通过在应用程序与硬件目标间重用调度代码,减少了任何特定时刻所需的编码工作量。研究人员在Exo 2中实现了一个约含2,000行代码的调度库,封装了特定于线性代数和目标特定(如AVX512、AVX2、Neon和Gemmini硬件加速器)的可重用优化。该库整合了超过80个高性能内核的调度工作,每个内核最多只需十几行代码,其性能与MKL、OpenBLAS、BLIS和Halide相当或更优。
Exo 2还引入了一种名为“游标”的新颖机制,提供了他们所谓的“稳定引用”,在整个调度过程中始终指向目标代码。今川由香表示,稳定引用对于用户在库函数中封装调度至关重要,因为它使调度代码独立于目标代码变换。“我们认为USLs应设计为可扩展的,而非拥有固定的操作集,”今川由香说,“这样,语言可通过实现适应多样化优化需求和应用领域的库来支持大型项目。”
Exo 2的设计允许性能工程师专注于高层次的优化方法,同时确保底层目标代码在采用安全原语时仍保持功能一致性。未来,团队希望扩展Exo 2对不同类型硬件加速器的支持,如GPU。一些正在进行的项目旨在从正确性、编译时间和表达能力等方面改进编译器分析。今川由香和拉甘-凯利与研究生凯文·钱、萨米尔·德鲁比、Adobe的亚历克斯·雷金金以及前CSAIL博士后吉尔伯特·伯恩斯坦(现任华盛顿大学教授)共同撰写了这篇论文。这项研究的部分经费来自美国国防高级研究计划局(DARPA)和美国国家科学基金会,第一作者还获得了Masason、Funai和Quad奖学金的资助。
(以上内容均由Ai生成)