Learning to Parallelize with OpenMP by Augmented Heterogeneous AST Representation
本文提出了 Graph2Par,一种利用增强型异构 AST 表示和新创建的 OMP_Serial 数据集的创新图学习方法,旨在实现 85% 的 OpenMP 可并行循环检测准确率,其性能优于现有的基于 Token 的先进方法。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
现代计算机已经变得像是由无数微小工人组成的庞大城市,每个工人都能在极短的时间内完成一项任务。为了让这些机器运行得更快,程序员必须教会它们同时派出许多工人去执行任务,而不是让他们排队一个接一个地工作。这种被称为“并行化”的做法,对于充分发挥当今强大硬件的性能至关重要。然而,告诉计算机如何拆分其工作是一件困难的事情。这需要对程序中不同部分如何相互依赖有着深刻的理解。如果程序员判断失误,程序可能会崩溃或产生错误答案。几十年来,专家们一直在构建能够自动寻找这些协作机会的工具,但这些工具往往过于保守,错失了许多加速的机会,或者会被复杂的代码结构所迷惑。
在最近的一项研究中,研究人员尝试利用一种受机器理解语言方式启发的方法,教计算机学会识别这些机会。由爱荷华州立大学和英特尔实验室的 Le Chen 及其同事领导的团队,专注于 C 编程语言中一种特定的指令,称为 OpenMP。这些指令就像路标,告诉计算机在何处可以安全地同时启动多个工人。挑战在于,现有的工具依赖于僵化的数学规则,往往会因为“只见树木,不见森林”而失败。它们可能会仅仅因为一个循环包含了一个函数调用或是一个看起来很复杂的嵌套结构,就判定该循环无法并行化,从而错过了一个完美的并行化机会。研究人员意识到,要解决这个问题,他们需要一种新的方式来向计算机展示代码的真实面貌——不仅是将其作为一串文字,而是将其作为一个结构和意义的地图。
为了应对这一挑战,团队首先必须建立一个庞大的示例库,他们将这个数据集命名为 OMP Serial。他们收集了近 18,600 个已经被标记为并行的循环示例,以及大约 14,000 个非并行循环示例。这些示例取自互联网上数以千计的真实软件项目,以及旨在测试特定模式的精心设计的合成示例。这个集合为他们提供了丰富的“地面真值”(ground truth)进行学习。但拥有数据仅仅是成功的一半;他们还需要一种方法,能将数据输入到能够真正理解代码的机器学习模型中。他们没有将代码视为书中的句子(其中单词的顺序最为重要),而是决定将其视为一张复杂的地图。他们创建了一种名为“增强异构抽象语法树”的表示形式。通俗地说,这是一个连接了代码中每一个部分的详细图谱。它不仅展示了程序的层级结构——例如父命令及其子命令——还展示了代码如何在步骤间流动,以及代码中的单词在文本中是如何相邻排列的。这张地图捕捉到了程序的结构骨架,同时也保留了不同部分之间微妙的关系,而简单的单词列表会丢失这些关系。
有了这张新地图,研究人员训练了一个被称为“异构图变换器”的高级学习模型。可以将这个模型想象成一名学生,他看到了成千上万张这样的地图,并且每张地图都附带了正确答案:即该循环是否可以安全地并行化,或者是否不能。该模型通过观察这些地图,学习识别指示安全性的隐藏模式。它会关注地图中不同类型的连接,理解函数调用与变量之间的链接,与两个数学运算之间的链接所代表的意义是不同的。一旦训练完成,该模型会被用来测试其预测哪些循环可以被并行化,以及更关键的是,应该使用哪种特定类型的指令来进行并行化的能力。结果令人瞩目。该模型在检测可并行区域方面的准确率达到了 85%,显著优于依赖传统静态分析的最佳现有工具。
这项研究还揭示了旧工具究竟在何处失效。研究人员发现,传统软件最常出错的地方在于包含函数调用的循环、将大量数据归约为单个值的循环,以及嵌套在其他循环内部的循环。这些是代码在僵化分析器看来显得杂乱无章,但实际上却可以安全进行并行工作的棘手情况。相比之下,这种新的机器学习方法在处理这些复杂结构时取得了更大的成功。它不仅仅是在猜测,而是学习了代码形状背后的逻辑。研究人员证明,通过将丰富的代码结构视角与强大的学习算法相结合,实现一项长期需要人类直觉的任务是可能的。这项工作表明,编写快速软件的未来可能不在于为计算机制定更好的规则手册,而在于教会它们像熟练的人类程序员那样看待代码:将其视为一个活生生的、相互关联的系统,而非一段静态的命令序列。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。