LLVM 项目博客

LLVM 项目新闻和来自底层的细节

C++ 实践中的交互式编程 - LLVM 博客文章


又一个项目年即将结束,我们的 编译器研究 团队非常高兴地分享实习生贡献者的辛勤工作和成果!

编译器研究团队包括普林斯顿大学和欧洲核子研究中心的研究人员。我们的首要目标是研究基础软件工具,帮助科学家进行速度、互操作性、交互性、灵活性、可重复性编程。我们在各种科学领域工作,例如高能物理,其中研究从根本上与艾字节级软件相连。我们开发用于科学探索和发现的计算方法和研究软件。我们当前的研究集中在三个主要主题:解释性 C/C++/CUDA、自动微分工具和 C++ 语言与 Python 和 D 的互操作性。

今年,我们有六位参与者参与了七个项目,涵盖了广泛的主题,从 LLVM 的全新 JIT 链接器 (JITLink) 到 Clang-Repl,一个集成在 Clang 中用于增量编译的交互式 C++ 解释器。所有项目都朝着一个共同的、雄心勃勃的目标迈进:在 LLVM 中建立一个熟练的工作流程,在该流程中,C++ 的交互式开发 是可能的,探索性 C++ 成为更广泛受众的便捷体验。

在下面,您可以找到实习生的项目清单,以及目标和结果的概述。我们邀请您点击链接访问每个项目的更详细描述。

开发人员:Sunho Kim计算机科学,De Anza 学院,库比蒂诺,加利福尼亚州

导师:Stefan Gränitz自由职业编译器开发人员,柏林,德国)、Lang HamesApple)、Vassil Vassilev普林斯顿大学/欧洲核子研究中心

资金来源:Google Summer of Code 2022

Suhno 开发了 JITLink 特化,扩展了 JITLink 的通用链接器算法,允许 JITLink 支持 ELF/aarch64 目标并提供对所有高级 PE/COFF 对象文件功能的完全支持。通过支持 ELF/aarch64 目标,JITLink 现在可以在 Julia 中使用,而 COFF/X86_64 在 Clang-Repl 中启用了 Microsoft Visual C++ (MSCV) 目标。您可以在此处找到 Sunho 的 GSoC 最终报告

太棒了!该项目已被接受为 2022 年 LLVM 开发者大会 的教程!会议于 2022 年 11 月 7 日至 10 日在美国加利福尼亚州圣何塞举行。您可以在此处找到 Sunho 演示的 视频幻灯片

该项目还在 Compiler As a Service (CaaS) 月度会议上进行了展示。您可以在此处找到 Sunho 演示的 视频幻灯片

扩展 Clang 以重新语法化模板特化访问

开发人员:Matheus Izvekov

导师:Richard SmithGoogle)、Vassil Vassilev普林斯顿大学/欧洲核子研究中心

资金来源:Google Summer of Code 2022

Clang 的类型系统通过将模板特化的参数的类型语法糖推送到这些成员访问中得到了优化。这是通过以下方式实现的:1. 在抽象语法树 (AST) 中创建一个新的类型节点,表示模板特化中成员访问的糖;以及 2. 实现单步去语法糖逻辑,该逻辑将执行模板参数糖到相应特化参数糖的替换。结果,我们通过启用其他结构来保留类型语法糖,从而改进了 Clang 的诊断系统,从而允许在特化参数中存在时对其进行表示。您可以在此处找到 Matheus 的 GSoC 最终报告

太棒了!该项目已被接受为 2022 年 LLVM 开发者大会 的闪电演讲!会议于 2022 年 11 月 7 日至 10 日在美国加利福尼亚州圣何塞举行。您可以在此处找到 Matheus 演示的 视频幻灯片

从 Clang-Repl 和代码撤消中的错误中恢复

开发人员:Jun Zhang软件工程,安徽师范大学,芜湖,中国)和 Purva Chaudhari加州州立大学北岭分校,北岭,加州,美国

导师:Vassil Vassilev普林斯顿大学/欧洲核子研究中心

Clang-Repl 是一个集成在 Clang 中的交互式 C++ 解释器,它支持增量编译。它支持以读取-求值-打印循环 (REPL) 样式的 C++ 交互式编程,使用 JIT 方法即时编译代码,减少了编译-运行周期。我们为 Clang-REPL 添加了“撤消”功能,并通过添加恢复底层执行基础设施的可能性改进了错误恢复。结果,Clang-REPL 现在以自动且方便的方式支持用户代表的逆向执行和恢复操作。

太棒了!该项目已被接受为 2022 年 LLVM 开发者大会 的闪电演讲!会议于 2022 年 11 月 7 日至 10 日在美国加利福尼亚州圣何塞举行。您可以在此处找到 Purva 和 Jun 演示的 视频幻灯片

开发人员:Anubhab Ghosh计算机科学与工程,印度信息技术学院,卡利亚尼,印度

导师:Stefan Gränitz自由职业编译器开发人员,柏林,德国)、Lang HamesApple)、Vassil Vassilev普林斯顿大学/欧洲核子研究中心

资金来源:Google Summer of Code 2022

Anubhab 引入了一个新的 JITLinkMemoryManager,它基于一个 MemoryMapper 抽象,该抽象能够使用共享内存分配 JIT 代码(和数据)。从实施的策略中应该产生以下优点:1. 在同一台机器上运行 JIT 代码的单独进程时,更快的代码和数据传输(和访问),以及 2. 保证所有分配在内存中彼此靠近,并且满足默认代码模型的约束,允许使用来自常规编译器的输出。您可以在此处找到 Anubhab 的 GSoC 最终报告

太棒了!该项目已被接受为 2022 年 LLVM 开发者大会 的闪电演讲!会议于 2022 年 11 月 7 日至 10 日在美国加利福尼亚州圣何塞举行。您可以在此处找到 Anubhab 演示的 视频幻灯片

优化 ROOT 对大型代码库的模块使用

开发人员:Jun Zhang软件工程,安徽师范大学,芜湖,中国

导师:David Lange普林斯顿大学)、Alexander Penev帕伊西·希伦达尔斯基普罗夫迪夫大学,保加利亚)、Vassil Vassilev普林斯顿大学/欧洲核子研究中心

资金来源:Google Summer of Code 2022

评估了 ROOT 中模块使用的当前性能,并制定了优化内存占用的策略。该策略包括减少不必要的符号查找和模块加载,对于非常大的代码库(如 CMSSW)特别有用,Jun 在此减少了一半的内存量(从 1.1GB 到 600MB)用于 hsimple.C 之类的简单工作流,并且加载的数量从 180 个减少到 52 个。您可以在此处找到 Jun 的 GSoC 最终报告

添加 Clad 与 Enzyme 的初始集成

开发人员:Manish Kausik H计算机科学与工程(双学位),印度理工学院布巴内斯瓦尔

导师:David Lange普林斯顿大学)、William Moses麻省理工学院)、Vassil Vassilev普林斯顿大学/欧洲核子研究中心

资金来源:Google Summer of Code 2022

Clad 是 Clang 编译器的开源插件,它支持 C++ 的 自动微分。Clad 从底层
编译器平台(Clang)接收抽象语法树 (AST),决定是否请求导数并生成它,并修改 AST 以插入生成的代码。Enzyme AD 是基于 LLVM 的 AD 插件。它通过将现有代码作为 LLVM IR 并计算该函数的导数(和梯度)来工作。在这个项目中,Manish 将 Enzyme 集成到 Clad 中,让 Clad 用户可以选择按需使用 Enzyme 进行自动微分。Clad 和 Enzyme 的集成产生了新的工具,该工具提供了经过优化且灵活的自动微分实现。您可以在此处找到 Manish 的 GSoC 最终报告

感谢开发人员!

我们希望我们的实习生贡献者喜欢我们的社区。我们最大的回报是知道我们支持了您踏入开源软件开发和编译器构建世界的早期步伐。我们希望这段经历激励您继续参与广泛的 LLVM 生态系统。我们向 Google Summer of Code 项目和高能物理软件研究与创新研究所 (IRIS-HEP) 表示感谢,感谢他们支持我们的研究并为六位年轻开发人员提供了这个宝贵的机会。特别感谢 LLVM 社区提供支持并分享他们的知识,并将我们的社区介绍给新的贡献者。非常感谢!感谢您选择编译器研究作为您的实习!我们很幸运有您!