在激烈的全球 AI 技术竞赛中,科技巨头正不断加码对基础技术研发的投资力度,以期开发出能够支撑现代 AI 系统运行的核心算法库,从而在竞争中占据有利地位。

为了达到这一目标,工程师们往往需要编写数万乃至数十万行代码来最大限度地挖掘硬件的性能潜力。这种长期的技术积累不仅能够提升产品的竞争力,还能形成难以被竞争对手逾越的技术“护城河”。

例如,英伟达推出的 cuBLAS、cuDNN、CUTLASS 等高性能计算库,就是通过深度优化 GPU 运算来实现的。这些高效能的“技术黑箱”不仅支持了像 ChatGPT 等大量 AI 应用的运行,还构筑起了其他企业难以复制的技术壁垒。

然而,一项由麻省理工学院计算机科学与人工智能实验室(CSAIL)最新发布的研究成果似乎正在挑战这一传统观念。

研究人员展示了一种名为“Exo 2”的新型编程语言,几名在校学生耗时三个月的时间,仅仅用了数百行代码就能够在特定的计算任务上实现与国际前沿高性能计算(HPC)库相媲美的运算效率。

要知道,同类商业级算法库往往需要数万或数十万行经过精密优化的代码,以及大量硬件工程师的深度参与。这项研究预示着或许未来会有更加简洁高效的途径来实现复杂的计算任务。


(来源:MIT News)

麻省理工学院教授 Jonathan Ragan-Kelley 将 Exo 2 这类新的编程语言称为“用户可调度语言(USLs)”,并认为这一概念或将重新定义代码优化的方式。

传统上,编译器根据预设规则自动生成所谓的“尽可能快”的代码,但这种方法往往受限于特定架构的瓶颈,难以实现进一步的性能突破。

而“用户可调度语言”则赋予开发者更多的控制权,通过编写具体的“调度”指令,开发者能够直接指导编译器如何生成代码,从而突破这些限制。

打个比方,传统编译器像是一辆自动驾驶汽车,提供有限的优化选项,开发者只能被动接受其自动优化结果;“用户可调度语言”则更像是一辆专业赛车,将性能优化调校的“方向盘”交回到开发者的手中,让他们可以根据需要进行更多的精细调整。

借助这种新的编程范式,开发者可以将相对简单的程序转化为执行速度更快、更加复杂的版本,同时确保其核心功能不受影响。例如,在处理高性能计算任务时,开发者能够通过精确控制代码生成过程来提升效率。

然而,早期版本的用户可调度语言(比如最初的 Exo)也存在一定局限性,它们提供的调度操作集是相对固定的,这意味着在不同的高性能库组件(即“内核”)之间复用调度代码较为困难。

相比之下,Exo 2 则提供了更大的灵活性,可以让用户在编译器外部定义新的调度操作。这种方式不仅简化了跨不同内核间调度代码的复用问题,还促进了构建一个包含多种调度策略的共享库的可能性。

“总体来说,Exo 2 能够将总的调度代码量减少到原来的百分之一,同时在各种不同的平台上实现与目前最先进的技术相当的性能,包括驱动众多机器学习应用的基础线性代数子程序(BLAS),这意味着开发者可以用更少的代码达到同样的高效运行效果。”这项研究的主导者、麻省理工学院电气工程和计算机科学博士生及 CSAIL 成员 Yuka Ikarashi 表示。

“对于那些致力于在不同操作、数据类型和目标架构上优化内核的高性能计算工程师而言,这是一个极具吸引力的选择。”她补充说。

毕竟,这些工程师们通常需要处理复杂的硬件和软件挑战,以确保计算任务能够在不同的环境中高效运行,而 Exo 2 提供了一种更加灵活且高效的解决方案,让他们能够更专注于核心问题,而不是陷入繁琐的代码编写工作中。

而 Exo 2 的一个优势是能够在应用程序和硬件目标之间复用调度代码,从而大幅减少了所需的编码工作量。通过这种方法,开发者可以在不同的项目中重复利用已有的优化代码,显著提高了开发效率。

此外,Yuka Ikarashi 还强调了 Exo 2 的独特方法:“我们采用了一种自底向上的自动化策略,而非依赖于机器学习或人工智能来搜索高性能代码。这意味着工程师和硬件部署人员可以根据自己的需求编写定制化的调度库,即一套专门针对其硬件平台的优化技术,从而达到最佳性能。”

在研究过程中,团队在 Exo 2 中实现了一个包含约 2,000 行代码的调度库,该库封装了针对线性代数运算以及特定硬件加速器(如 AVX512、AVX2、Neon 和 Gemmini 等)的可重复使用优化。

这个库整合超 80 个高性能内核的调度策略,每个内核仅需十几行代码即可实现,并且能够提供与 MKL、OpenBLAS、BLIS 和 Halide 等高性能计算库相当甚至更优的性能表现。

从技术角度来看,Exo 2 引入了一种名为“Cursors”的新机制,这一机制在整个调度过程中为对象代码提供了所谓的“稳定引用”。

这种“稳定引用”对于将调度逻辑封装进库函数至关重要,因为它确保了调度代码可以独立于对象代码的转换过程,从而增强了代码的可维护性和灵活性。

Yuka Ikarashi 解释道:“‘稳定引用’是用户将调度逻辑封装到库函数中的关键,因为它使调度代码不依赖于对象代码的具体转换方式。”

她进一步补充说:“我们认为,用户可调度语言的设计应当是用户可扩展的,而不是局限于一套固定的操作。通过这种方式,一种语言可以通过实现适应不同优化需求和应用领域的库来支持大型项目的持续发展。”

Exo 2 的创新设计让工程师能够专注于高层次的优化策略,同时通过使用安全的基本单元确保底层的对象代码保持功能等效。

未来,团队计划扩展 Exo 2 对不同类型硬件加速器的支持,尤其是 GPU,并进一步于改进编译器在正确性、编译时间和表达能力等方面的分析能力。

除了 Jonathan Ragan-Kelley 和 Yuka Ikarashi,这项研究的合作者还包括 Kevin Qian、Samir Droubi、Alex Reinking 等多位成员。另外,这项研究还得到了美国国防高级研究计划局(DARPA)和美国国家科学基金会等的资助。

https://news.mit.edu/2025/high-performance-computing-with-much-less-code-0313

ad1 webp
ad2 webp
ad1 webp
ad2 webp