NOELLE Offers Empowering LLVM Extensions
现代和新兴的体系结构要求越来越复杂的编译器分析和转换。随着对编译器基础设施的强调超越了对窥视孔优化和指令级并行提取的支持,它们应该支持定制工具,这些工具旨在通过更广泛程序范围的更高级别的分析抽象来满足这些需求。本文介绍了NOELLE,一个强大的开源域独立编译层建立在LLVM提供这种支持。NOELLE是模块化和需求驱动的,使其易于扩展和适应定制工具的特定需求,而不会过度浪费编译时间和内存。本文展示了NOELLE的强大功能,展示了基于它构建的一组不同的10个自定义工具,与没有NOELLE的同行相比,代码大小(LoC)减少了33.2%至99.2%。
2021-02-09 cs.PL
Reasoning About LLVM Code Using Codewalker
本文报告了使用J Moore的Codewalker对编译为低级虚拟机(LLVM)中间形式的程序进行推理的初步实验。之前,我们报道了一个从LLVM到被ACL2定理证明器接受的Common Lisp的应用子集的翻译器,产生可执行的ACL2形式模型,并允许我们证明关于翻译模型的定理,以及通过测试验证这些模型。该翻译器提供了纯反编译到逻辑方法的许多好处,但有未经验证的缺点。从ACL2 7.0开始,Codewalker的可用性提供了一个重新审视这一想法的机会,并采用了一个更值得信赖的反编译逻辑工具。因此,我们采用Codewalker方法为LLVM指令集的一个子集创建解释器,并使用Codewalker分析了一些编译为LLVM形式的基于数组的简单C程序。我们讨论了基于Codewalker的方法与以前的方法相比的优点和局限性,并为未来的Codewalker开发提供了一些挑战性的问题。
2015-09-21 cs.LO cs.PL
Towards Verified Compilation of Floating-point Optimization in Scientific Computing Programs
本文利用Rocq定理证明器中的Verified LLVM框架,初步验证了LLVM IR层面快速数学浮点优化中FMA变换的正确性,并提出了扩展方案。
2025-09-10 cs.PL
CANAL: A Cache Timing Analysis Framework via LLVM Transformation
一个统一的建模框架的非功能特性的程序是必不可少的软件分析和验证的研究,因为它减少了负担,个人研究人员实施新的方法和比较现有的方法。我们提出了CANAL,一个框架,通过转换其中间表示LLVM编译器中的程序的缓存行为建模。CANAL在这些变量上插入辅助变量和指令,以允许标准验证工具处理一类新的高速缓存相关属性,例如,用于计算最坏情况下的执行时间和检测侧通道泄漏。我们使用三种验证工具:KLEE,SMACK和Crab-llvm证明了CANAL的有效性。我们确认我们的缓存模型的准确性,通过比较与CPU周期准确的模拟结果GEM 5。CANAL可以在GitHub和YouTube上找到。
2018-07-09 cs.CR cs.PL cs.SE
SafeLLVM: LLVM Without The ROP Gadgets!
本文提出 SafeLLVM,通过在 LLVM 后端实现一系列 pass 减少 x86-64 二进制文件中的 ROP gadget,并在多个真实应用上验证其可阻止 ROP 且保持功能不变。
2023-11-02 cs.CR cs.PL
Dataflow-Based Optimization for Quantum Intermediate Representation Programs
本文提出基于数据流的QIR优化方法QDFO,通过预处理QIR代码并消除量子比特及数组的重复加载构造,提升LLVM优化效果,实验与案例研究验证了其有效性。
2024-06-28 cs.PL
Modeling the Invariance of Virtual Pointers in LLVM
去虚拟化是一种编译器优化,它将间接(虚拟)函数调用替换为直接调用。它在面向对象的语言中特别有效,如Java或C++,其中虚方法通常很丰富。我们提出了一种新的抽象模型来表达C++动态对象的生命周期和LLVM中间表示中虚表指针的不变性。Clang和LLVM中的模型和相应实现在动态类型静态已知时实现虚拟调用的完全去虚拟化,并在其他情况下消除冗余的虚拟表负载。由于C++的复杂性,到目前为止,任何其他C++编译器都没有实现这一点。虽然我们的模型是为C++设计的,但它也适用于使用虚拟分派的其他语言。我们的基准测试显示,在真实的C++程序上,平均性能提高了0.8%,在某些情况下加速了30%以上。该实现已经是上游LLVM/Clang的一部分,可以使用-fstrict-vtable-pointers标志启用。
2020-02-22 cs.PF cs.PL
ComPile: A Large IR Dataset from Production Sources
本文提出 ComPile 数据集,通过接入 LLVM 编译器基础设施从 Rust、Swift、Julia 和 C/C++ 等生产级程序中提取了 182B token 的 LLVM IR 数据,用于训练基于中间表示的模型并支持编译器组件的内省分析。
2024-04-30 cs.PL
IR2Vec: LLVM IR based Scalable Program Embeddings
Indian Institute of Technology Hyderabad(印度理工学院海得拉巴分校);Indian Institute of Science(印度科学学院)
我们提出了IR 2 Vec,一个简洁和可扩展的编码基础设施来表示程序作为一个分布式嵌入在连续空间。这种分布式嵌入是通过将表示学习方法与流信息相结合来捕获输入程序的语法和语义而获得的。由于我们的基础设施是基于中间表示(IR)的源代码,所获得的嵌入是语言和机器无关的。IR的实体被建模为关系,并且它们的表示被学习以形成种子嵌入词汇表。使用这个基础设施,我们提出了两个增量编码:符号和流量感知。符号编码是从种子嵌入词汇表中获得的,而流感知编码是通过用流信息增强符号编码来获得的。我们展示了我们的方法在两个优化任务(异构设备映射和线程粗化)的有效性。我们表示程序的方式使我们能够使用非顺序模型,从而使训练时间更快。IR 2 Vec生成的两种编码在两个任务中都优于现有方法,即使使用简单的机器学习模型。特别是,我们的结果提高或匹配的最先进的加速在11/14基准套件的设备映射任务在两个平台和53/68基准线程粗化任务在四个不同的平台。与其他方法相比,我们的嵌入更具可扩展性,不需要数据,并且具有更好的词汇表外(OOV)特性。
2020-09-01 cs.LG cs.NE cs.PL
Ownership in low-level intermediate representation
针对低级程序验证中所有权信息缺失、指针无法用FOL抽象的问题,为类LLVM低级中间表示设计所有权语义,通过指针缓存减少地址映射维护,在SEABMC中实现后,C程序验证的SMT求解速度提升1.3x-5x。
2024-08-13 cs.PL cs.SE
On the Value and Limits of Multi-level Energy Consumption Static Analysis for Deeply Embedded Single and Multi-threaded Programs
降低计算能耗的兴趣越来越大。能量透明是一个概念,它使程序的能量消耗从软件到硬件通过不同的系统层可见。这样的透明性可以在每一层和层之间实现能量优化,并且帮助程序员和操作系统两者做出能量感知决策。提取程序能耗的常用方法是直接测量目标硬件。这通常涉及大多数程序员不具备的专业设备和知识。在本文中,我们将研究如何利用现有的静态资源分析和能源建模方法来执行能源消耗静态分析(ECSA)的深度嵌入式程序。为了研究这一点,我们已经开发了ECSA技术,工作在指令集的水平和更高的水平,LLVM IR,通过一种新的映射技术。我们将ECSA应用于一组全面的主要工业基准测试,包括来自两种常用并发模式(任务农场和管道)的单线程和多线程嵌入式程序。我们比较我们的ECSA结果的硬件测量和预测的基础上获得的模拟痕迹。我们讨论了一些应用场景,ECSA的结果可以提供能源透明度,并得出结论,为今后的工作提出了一系列新的研究问题。
2015-10-24 cs.PL
Nice to Meet You: Synthesizing Practical MLIR Abstract Transformers
University of California San Diego(加利福尼亚大学圣地亚哥分校);University of Utah(犹他大学)
NiceToMeetYou通过批量自动化合成准确且高效的MLIR抽象转换器,提升编译器的精度和可靠性。
2025-12-06 cs.PL
Instead of Rewriting Foreign Code for Machine Learning, Automatically Synthesize Fast Gradients
MIT CSAIL(麻省理工学院计算机科学与人工智能实验室)
将可微分编程技术和机器学习算法应用于外来程序需要开发人员在机器学习框架中重写他们的代码,或者以其他方式提供外来代码的衍生物。本文介绍了酶,一个高性能的自动微分(AD)编译器插件的LLVM编译器框架能够合成梯度的静态分析程序表示的LLVM中间表示(IR)。酶合成梯度的任何语言编写的程序,其编译器的目标LLVM IR包括C,C++,Fortran,Julia,Rust,Swift,MLIR等,从而以这些语言提供本机AD能力。与传统的源到源和操作符重载工具不同,酶在优化的IR上执行AD。在包括Microsoft ADBench在内的机器学习重点基准测试套件中,优化IR上的AD实现了比优化前IR上的AD高4.5倍的几何平均加速,使酶实现了最先进的性能。Packaging Enzyme for PyTorch和TensorFlow提供了对具有最先进性能的外来代码梯度的方便访问,使外来代码能够直接纳入现有的机器学习工作流程。
2020-10-04 cs.AI cs.LG cs.MS
Compiler Auto-tuning through Multiple Phase Learning
针对编译器优化标志自动调优中搜索空间大、运行时成本高的问题,提出结合轻量级性能预测模型与新型粒子群算法的CompTuner方法,实验证明其性能显著优于现有最优技术。
2023-04-27 cs.PL
Minotaur: A SIMD-Oriented Synthesizing Superoptimizer
Minotaur 是一个面向 LLVM 的 SIMD 超优化器,通过程序合成搜索并改进整数和浮点 SIMD 代码生成,在 GMP 和 SPEC CPU 2017 上分别取得 7.3% 和 1.5% 的平均加速,且所有优化均经形式化验证。
2024-09-02 cs.PL
goSLP: Globally Optimized Superword Level Parallelism Framework
现代微处理器配备了单指令多数据(SIMD)或向量指令集,允许编译器利用超字级并行(SLP),一种细粒度并行。当前SLP自动向量化技术使用语义学来发现高级语言代码中的向量化机会。这些矢量化策略是脆弱的、局部的,并且通常仅呈现一种被成本模型接受或拒绝的矢量化策略。我们提出了goSLP,一种新的SLP自动向量化框架,它解决了语句包装问题,在成对的最佳方式。使用整数线性规划(ILP)求解器,goSLP每次搜索整个函数的整个语句打包机会空间,同时将总编译时间限制在几分钟内。此外,goSLP使用动态规划最优地解决了向量置换选择问题。我们在LLVM编译器基础设施中实现了goSLP,与LLVM现有的SLP自动向量化器相比,在SPEC2017fp上实现了7.58%的几何平均加速比,在SPEC2006fp上实现了2.42%,在NAS基准测试中实现了4.07%。
2018-10-30 cs.DC cs.PL
Mitigating Power Side Channels during Compilation
现代编译器(如GCC和LLVM)中的代码生成模块使用有限数量的CPU寄存器来存储大量程序变量,即使在配备了最先进对策的软件中也可能引入侧通道泄漏。我们提出了一种基于程序分析和转换的方法来消除这种侧信道。我们的方法有一个基于类型的技术来检测泄漏,它利用基于数据的声明性分析和特定于域的优化来实现高效率和准确性。它还为编译器的后端(更具体地说是寄存器分配模块)提供了一种缓解技术,以确保潜在泄漏的中间计算结果始终存储在不同的CPU寄存器中或隔离溢出到内存中。我们已经实现和评估我们的方法在LLVM的x86指令集架构。我们在密码软件上的实验表明,该方法在去除边信道的同时是有效的,即,我们的减轻的代码比使用最先进技术减轻的代码更紧凑并且运行更快。
2019-02-25 cs.CR cs.PL
LLM Translation of Compiler Intermediate Representation
Barcelona Supercomputing Center, Universitat Politècnica de Catalunya(巴塞罗那超级计算中心,加泰罗尼亚理工大学);Barcelona Supercomputing Center(巴塞罗那超级计算中心)
本文提出IRIS-14B模型,通过训练实现GIMPLE到LLVM IR的翻译,展示了大型语言模型在编译器中间表示转换中的高效性与准确性。
2026-05-07 cs.AI cs.PL
Combinatorial Register Allocation and Instruction Scheduling
本文介绍一种组合优化方法来解决寄存器分配和指令调度这两个中心编译器问题。组合优化有可能最佳地解决这些问题,并很容易利用处理器特定的功能。我们的方法是第一个在实践中利用这种潜力的方法:它捕获了最先进的编译器中使用的完整的程序转换集,可扩展到多达1000条指令的中型函数,并生成可执行代码。这种实用性水平是通过使用约束编程来实现的,约束编程是一种特别适合的组合优化技术。Unison是我们方法的实现,是开源的,用于工业,并与LLVM工具链集成。一项广泛的评估证实,Unison生成的代码比LLVM更好,同时可以扩展到中等大小的函数。该评估使用了从MediaBench和SPEC CPU2006以及不同处理器架构(Hexagon、ARM、MIPS)中系统选择的基准测试。平均估计的加速范围从1.1%到10%,平均代码大小减少范围从1.3%到3.8%的不同架构。这一改进的一个重要部分是由于该方法的综合性质。在Hexagon上执行生成的代码可以确认估计的加速比会导致实际的加速比。在给定固定时间限制的情况下,Unison可以最佳地解决多达946条指令的函数,几乎比以前的方法大一个数量级。结果表明,我们的组合方法可以应用在实践中的贸易编译时间的代码质量超出通常的编译器优化水平,识别启发式算法的改进机会,并充分利用特定于处理器的功能。
2019-06-20 cs.PL
Symbolic Basic Block Profiling for Machine Learning Kernels
University of Rochester(罗切斯特大学)
针对现有基本块分析技术的运行时开销与耗时问题,提出适用于机器学习内核的符号程序分析技术,在LLVM中实现后对78个ML算子评估,73个结果与动态插桩一致,中位数提速15093倍。
2026-08-24 cs.PL
Investigating the Energy Consumption of C++ and Java Solutions Mined from a Programming Contest Site
研究从CSES挖掘的C++和Java竞赛解决方案,验证了更快的程序能耗更低,并利用最小二乘法拟合能耗与执行时间的线性关系,实现异常能耗识别和问题分类搜索空间缩减50%以上。
2024-12-19 cs.PL
RustMC: Extending the GenMC stateless model checker to Rust
本文提出 RustMC,通过扩展 GenMC 以支持 LLVM IR 上的并发 Rust 程序验证,解决了线程操作拦截、内存内建函数和未初始化访问等挑战,并在真实案例中有效发现不安全 Rust、FFI 调用及原子操作误用导致的并发缺陷。
2025-02-10 cs.CR cs.PL
LPO: Discovering Missed Peephole Optimizations with Large Language Models
Cheriton School of Computer Science, University of Waterloo(滑铁卢大学 Cheriton 计算机科学学院);Department of Software Systems & Cybersecurity, Monash University(蒙纳士大学软件系统与网络安全系)
本文提出LPO框架,结合大语言模型与形式验证技术,发现此前遗漏的窥视优化,实验显示其在LLVM中发现大量有效优化。
2026-03-16 cs.PL cs.SE
CONFLLVM: A Compiler for Enforcing Data Confidentiality in Low-Level Code
我们提出了一个仪表编译器,用于在低级别的应用程序(例如,用C编写的)中执行数据保密性的存在下,一个积极的对手。在我们的方法中,程序员通过在源代码中的顶层定义上编写轻量级注释来标记秘密数据。然后,编译器使用静态流分析,结合高效的运行时检测、自定义内存布局和自定义控制流完整性检查,即使在存在低级攻击的情况下也能防止数据泄漏。我们已经实现了我们的方案作为LLVM编译器的一部分。我们在SPEC微基准测试中评估了它的性能,并在更大的实际应用程序(包括OpenLDAP,大约300KLoC)上评估了在保护密码等敏感数据时重构应用程序所需的程序员开销。我们发现,我们的仪器引入的性能开销是适度的(平均12%的SPEC),和程序员的努力端口OpenLDAP只有约160 LoC。
2019-03-13 cs.PL
ScaffCC: Scalable Compilation and Analysis of Quantum Programs
我们提出了ScaffCC,一个可扩展的编译和分析框架的基础上LLVM,它可以用于编译量子计算应用程序在逻辑级别。借鉴成熟的编译器技术,我们讨论了经典和量子程序的编译之间的异同,并调整我们的方法来优化编译时间和输出的量子情况。我们的工作还集成了一个可逆的逻辑合成工具的编译器,以方便编码的量子线路。最后,我们提出了一些有用的量子程序分析方案,并讨论了它们的影响,特别是详细讨论了关键路径估计的时序分析。我们的工作重点是弥合高级别量子算法规范和低级别物理实现之间的差距,同时为更大和更有趣的问题提供良好的可扩展性
2015-07-07 cs.PL quant-ph
Forklift: An Extensible Neural Lifter
University of Edinburgh(爱丁堡大学);School of Informatics(信息学院)
提出首个神经 lifter Forklift,利用 Transformer 学习将汇编翻译为 LLVM IR,通过微调编码器支持新 ISA,在基准测试中翻译量远超手写工具和 GPT-4。
2024-04-01 cs.AI cs.LG cs.PL
Evaluating Compiler Optimization Impacts on zkVM Performance
ETH Zurich(苏黎世联邦理工学院);UCL Centre for Blockchain Technologies(伦敦大学学院区块链技术中心);zkSecurity(zk安全)
本文研究了编译器优化对zkVM性能的影响,通过优化LLVM传递提升了zkVM执行效率,展示了编译器优化在零知识证明系统中的应用潜力。
2026-01-22 cs.PF cs.PL
Copy-and-Patch Compilation: A fast compilation algorithm for high-level languages and bytecode
当编译发生在运行时时,快速编译是很重要的,例如现代数据库系统中的查询编译器和现代浏览器中的WebAssembly虚拟机。我们提出了复制和补丁,一个非常快速的编译技术,也产生高质量的代码。它能够将高级语言和低级字节码程序降低到二进制代码,通过将来自二进制实现变体的大型库的代码拼接在一起。我们称这些二进制实现为stendable,因为它们有漏洞,在代码生成过程中必须插入缺失值。我们展示了如何构建一个模板库,并描述了复制和补丁算法,生成优化的二进制代码。我们演示了两个使用情况下的复制和补丁:一个编译器的高级C语言的元编程和WebAssembly的编译器。我们的高级语言编译器的编译成本可以忽略不计:它从AST生成代码所用的时间比构造AST所用的时间要少。我们已经实现了一个SQL数据库查询编译器上的元编程系统,并表明,在TPC-H数据库基准测试,复制和补丁生成的代码比LLVM -O 0快两个数量级,比更高的优化水平快三个数量级。生成的代码比解释快一个数量级,比LLVM -O 0快14%。我们的WebAssembly编译器生成代码的速度比Liftoff快4.9 - 6.5倍,Liftoff是Google Chrome中的WebAssembly基线编译器。生成的代码在Coremark和PolyBenchC WebAssembly基准测试中的性能也超过了Liftoff的39%-63%。
2021-09-15 cs.PL
PIP: Making Andersen's Points-to Analysis Sound and Practical for Incomplete C Programs
Norwegian University of Science and Technology(挪威科技大学)
本文提出PIP技术,通过隐式跟踪点针提升不完整C程序点到分析的正确性与效率,减少显式点针使用,提升求解器性能。
2025-12-08 cs.PL
PAGAI: a path sensitive static analyzer
我们描述的设计和实现PAGAI,一个新的静态分析器工作在LLVM编译器基础设施,计算归纳不变量的数值变量的分析程序。PAGAI实现了各种最先进的算法,结合了抽象解释和决策过程(SMT求解),专注于控制流图内部的路径区分,同时避免系统指数枚举。它在使用的抽象域、迭代算法和决策过程中是参数化的。我们比较了分析算法和抽象域的各种组合的时间和精度,并在个人基准测试和广泛可用的GNU程序上进行了广泛的实验。
2012-07-17 cs.LO cs.PL
Probabilistic energy profiler for statically typed JVM-based programming languages
Halmstad University(哈姆斯塔德大学);Lund University(隆德大学)
本文提出了一种基于概率的能耗分析器,用于预测静态类型JVM基础编程语言的能耗,通过统计模型分析代码因素影响能耗。
2025-12-02 cs.CL cs.PL
LLOV: A Fast Static Data-Race Checker for OpenMP Programs
在Exascale计算时代,编写高效的并行程序是必不可少的,同时,编写好的并行程序是非常困难的。与诸如OpenMP之类的框架的并行性是相对容易的,但是这些程序中的数据竞争是错误的重要来源。在本文中,我们提出了LLOV,一个快速,轻量级,语言无关,静态的数据竞争检查的基础上的LLVM编译器框架的OpenMP程序。我们比较LLOV与其他国家的最先进的数据竞赛检查各种完善的基准。我们表明,精度,准确性和F1得分的LLOV是可比的其他跳棋,而数量级更快。据我们所知,LLOV是最先进的数据竞争检查器中唯一可以验证C/C++或FORTRAN程序是否无数据竞争的工具。
2020-09-01 cs.LO cs.PL cs.SE
It's Not Easy Being Green: On the Energy Efficiency of Programming Languages
针对编程语言选择与能耗的因果误解,研究构建因果模型纳入被忽视的关键影响因素,经实验验证控制这些因素后既有研究的能耗差异消失,指出语言实现对能耗无超出执行时间的显著影响。
2025-10-03 cs.PF cs.PL
ACPO: AI-Enabled Compiler Framework
Heterogeneous Compiler R&D Lab(异构编译器研发实验室);Huawei Technologies Canada(华为技术加拿大公司)
针对编译器优化遍决策难题,本文提出AI驱动的编译器框架ACPO,为LLVM提供机器学习优化工具,在循环展开、函数内联等优化上实现了优于原生O3的性能提升。
2025-01-14 cs.AI cs.LG cs.PF
Formalization of Quantum Intermediate Representations for Code Safety
量子中间表示(QIR)是微软开发的,基于LLVM的量子程序编译器中间表示。QIR旨在为量子程序编译器提供一个独立于前端语言和后端硬件的通用解决方案,从而避免中间表示和编译器的重复开发。由于QIR仍在开发中,它是用自然语言描述的,缺乏正式的定义,导致其解释模糊不清,实现量子功能时缺乏严谨性。本文给出了QIR的数据类型和指令集的形式化定义,旨在为QIR中的操作和中间代码转换提供正确性和安全性保证。为了验证我们的设计,我们展示了一些不安全的QIR代码样本,其中错误可以通过我们的正式方法检测到。
2023-03-25 cs.PL quant-ph
Deep Data Flow Analysis
Facebook AI Research(Facebook人工智能研究院);ETH Zürich(苏黎世联邦理工学院);University of Edinburgh(爱丁堡大学)
编译器架构师在为编译器优化构建算法时越来越多地关注机器学习。自动启发式设计的承诺将编译器工程师从程序、体系结构和其他优化的复杂交互中解放出来,这是诱人的。然而,大多数机器学习方法甚至不能复制对数据流分析的最简单的抽象解释,而这些解释对于做出良好的优化决策至关重要。这种情况必须改变,机器学习才能成为编译器语言学的主导技术。为此,我们提出了ProGraML -机器学习的程序图-一种独立于语言的,可移植的深度学习整体程序语义表示。为了对当前和未来的编译器分析学习技术进行基准测试,我们引入了LLVM的461 k中间表示(IR)文件的开放数据集,涵盖了五种源程序设计语言,以及15.4M相应的数据流结果。我们制定的数据流分析作为一个MPNN,并表明,使用ProGraML,标准的分析可以学习,提高下游编译器优化任务的性能。
2020-11-21 cs.LG cs.PL
Benchmarking OpenCL, OpenACC, OpenMP, and CUDA: programming productivity, performance, and energy consumption
许多现代并行计算系统在其节点级是异构的。这样的节点可以包括通用CPU和加速器(诸如GPU或Intel Xeon Phi),其提供具有合适的能耗特性的高性能。然而,利用异构体系结构的可用性能可能具有挑战性。有各种并行编程框架(例如OpenMP、OpenCL、OpenACC、CUDA),选择适合目标上下文的框架并不简单。在本文中,我们实证研究的特点,OpenMP,OpenACC,OpenCL和CUDA的编程生产力,性能和能源。为了评估编程效率,我们使用了我们自己开发的工具CodeStat,它使我们能够确定使用特定框架并行化代码所需的代码行的百分比。我们使用我们的工具x-MeterPU来评估能耗和性能。实验使用行业标准的SPEC基准测试套件和Rodinia基准测试套件进行,用于在将英特尔至强E5处理器与GPU加速器或英特尔至强融核协处理器相结合的异构系统上进行加速计算。
2017-04-18 cs.DC cs.PF cs.PL
MLIR-Smith: A Novel Random Program Generator for Evaluating Compiler Pipelines
ETH Zurich(苏黎世联邦理工学院)
MLIR-Smith是一种新型随机程序生成器,用于评估基于MLIR的编译器优化,通过差异测试发现多个编译器流水线中的错误。
2026-01-05 cs.PL cs.SE
Profile Guided Optimization without Profiles: A Machine Learning Approach
Meta, Inc.(Meta公司);Meta AI
概要文件引导优化是一种基于动态行为提高编译器优化能力的有效技术,但收集概要文件数据昂贵、繁琐,并且需要定期更新以保持新鲜。我们提出了一种新颖的统计方法来推断分支概率,可以提高在没有配置文件引导优化的情况下编译的程序的性能。我们使用从具有分支概率信息的大型二进制语料库中收集的信息执行离线训练。编译器使用学习的模型来预测常规未插装程序的分支概率,然后编译器可以使用该分支概率来通知优化决策。我们将我们的技术直接集成在LLVM中,补充现有的人工工程编译器原理。我们评估我们的技术在一套基准测试,展示了一些收益编译没有配置文件信息。在部署中,我们的技术不需要分析运行,对编译时间的影响可以忽略不计。
2022-01-04 cs.LG cs.PL
ReFuzzer: Feedback-Driven Approach to Enhance Validity of LLM-Generated Test Programs
本文提出 ReFuzzer,利用本地 LLM 反馈循环检测并修复编译与运行时违规,显著提升 LLM 生成测试程序的有效率及 LLVM/Clang 关键组件覆盖率。
2025-08-05 cs.PL cs.SE
OpenMP aware MHP Analysis for Improved Static Data-Race Detection
数据竞争是并发程序中错误的一个主要来源,它会导致人力和时间的损失以及由于系统故障而导致的数据丢失。在HPC社区中使用的事实上的共享内存并行框架OpenMP也受到数据竞争的影响。为了检测OpenMP程序中的竞争条件并提高周转时间和/或开发人员的生产力,我们在LLVM编译器框架中提出了一种基于数据流分析的快速静态数据竞争检查器。我们的工具可以检测种族的存在或不存在显式的障碍,隐式或显式同步。此外,我们的工具有效地为OpenMP目标卸载结构,也支持常用的OpenMP结构。我们形式化并提供了一个数据流分析框架来执行OpenMP程序的相位间隔分析(PIA)。相位间隔,然后用于计算MHP(及其补充NHP)集的程序,这反过来又被用来检测数据竞争静态。我们评估我们的工作使用多个OpenMP竞争检测基准和现实世界中的应用程序。我们的实验表明,该检查器在各种性能指标方面与最先进的检查器相当,准确率约为90%,几乎完美的召回率,并且运行时间和内存占用量显着降低。
2021-11-08 cs.PL cs.SE
Enabling Accuracy-Aware Quantum Compilers using Symbolic Resource Estimation
在将量子程序编译成低层门集时,必须考虑近似误差。我们提出了一种方法,自动跟踪这种错误,然后优化精度参数,以保证指定的整体精度,同时旨在最大限度地减少实施成本方面的量子门。我们的方法的核心思想是直接从量子程序的高级描述中提取指定优化问题的函数。然后,自定义编译器通过优化这些函数,将它们转换为(接近)符号表达式,用于(1)总错误和(2)实现成本(例如,总量子门计数)。量子程序的所有未指定参数都将在这些表达式中显示为变量,包括精度参数。在解决相应的优化问题之后,可以从找到的解决方案实例化电路。我们开发了两个原型实现,一个是基于Clang/LLVM的C++,另一个是使用Q#编译器基础设施。我们基准测试我们的原型典型的量子计算程序,包括量子傅里叶变换,量子相位估计,和肖尔的算法。
2021-01-05 cs.ET cs.PL quant-ph
Weak Memory Demands Model-based Compiler Testing
本文指出处理器对宽松内存模型的利用使编译后并发程序暴露新缺陷,提出需发展基于模型的编译器测试,并通过LLVM工具链缺陷案例探讨其对编译器、测试工具和并发测试生成器的广泛影响。
2024-01-12 cs.AR cs.PL cs.SE
Interval-based Resource Usage Verification by Translation into Horn Clauses and an Application to Energy Consumption
许多应用程序需要符合规范,约束资源的使用,如执行时间,能源,带宽等,我们已经提出了一个可配置的框架,静态资源使用验证规范可以包括下限和上限,数据大小相关的资源使用功能。为了静态地检查这些规范,我们的框架推断出相同类型的资源使用函数,这些函数安全地近似于程序的实际资源使用,并将它们与规范进行比较。我们回顾这个框架如何支持几种语言和编译输出格式,通过将它们翻译成基于Horn子句的中间表示,并使用该框架的可配置性来描述输入语言的资源语义。我们提供了一个更详细的形式化和扩展的框架,使资源使用规范和分析/验证输出可以包括前提条件表达区间的输入数据大小的断言是适用的,证明,或反驳。最重要的是,我们还扩展了可以检查的函数类。我们提供的Ciao/CiaoPP框架内的实施结果,并报告通过实例化这个框架的能源消耗规范的验证命令/嵌入式程序的工具。这篇论文正在考虑发表在《逻辑程序设计理论与实践》(TPLP)上。
2018-03-12 cs.LO cs.PL
Inferring Energy Bounds via Static Program Analysis and Evolutionary Modeling of Basic Blocks
不断增加的能量受限设备(例如物联网应用、智能手机和关键任务系统中使用的设备)的数量和复杂性对优化其能量消耗并验证其将在可用能量预算内执行其功能的技术提出了重要挑战。在这项工作中,我们从软件的角度来解决这一挑战,并提出了一种新的参数化方法来估计严格的边界上的能源消耗的程序执行,是实际的能源验证和优化的应用。我们的方法将程序划分为基本(无分支)块,并使用进化算法估计每个块的最大和最小能耗。然后根据程序控制流程,使用静态分析,将获得的值组合,以推断函数,该函数给出整个程序及其过程的能量消耗的上界和下界,作为关于输入数据大小的函数。我们已经测试了我们的方法(类C)嵌入式程序运行在XMOS硬件平台上。然而,我们的方法是通用的,足以适用于其他微处理器架构和程序设计语言。我们的原型实现所获得的界限可以很紧,同时在实践中保持在预算的安全侧,正如我们的实验评估所示。
2017-09-22 cs.DC cs.PL
ProGraML: Graph-based Deep Learning for Program Optimization and Analysis
University of Edinburgh(爱丁堡大学);ETH Zurich(苏黎世联邦理工学院)
计算系统的复杂性不断增加,这给优化编译器带来了巨大的负担,需要更加精确和积极的优化。机器学习为构建优化启发式提供了显著的好处,但在最先进的方法实现的效果与最优启发式的性能之间仍然存在差距。缩小这一差距需要在两个关键领域进行改进:一个能够准确捕捉程序语义的表示,以及一个具有足够表达能力的模型架构,以推理这种表示。我们介绍ProGraML -程序图机器学习-一种新的基于图形的程序表示使用低级别,语言不可知,和便携式格式;和机器学习模型能够执行复杂的下游任务,这些图。ProGraML表示是一个有向属性多重图,它捕获控制、数据和调用关系,并总结指令和操作数类型和排序。消息传递神经网络通过这种结构化表示来传播信息,从而实现整个程序或每个顶点的分类任务。ProGraML提供了一种通用的程序表示,它使可学习的模型能够执行对优化至关重要的程序分析类型。为此,我们首先对一套传统的编译器分析任务:控制流可达性,支配树,数据依赖,变量活性,常见的子表达式检测我们的方法的性能进行评估。在涵盖六种源程序设计语言的25万LLVM-IR文件的基准数据集上,ProGraML的平均F1得分为94.0,明显优于最先进的方法。然后,我们将我们的方法应用到两个高层次的任务-异构设备映射和程序分类-设置新的国家的最先进的性能。
2020-03-23 cs.LG cs.PF cs.PL
Who Wins the Race? (R Vs Python) - An Exploratory Study on Energy Consumption of Machine Learning Algorithms
Research in Intelligent Software \& Human Analytics (RISHA) Lab, Department of Computer Science \& Engineering Indian Institute of Technology Tirupati, India;Accenture Labs, India
针对机器学习(ML)能耗的环境影响研究空白,本文通过实证比较Python和R两种语言在5个回归和5个分类任务中的能耗及运行时性能,发现95%案例中能耗差异显著,语言选择对能效影响高达99.8%,旨在提升对ML语言能耗成本的认知。
2025-08-24 cs.LG cs.PF cs.PL
UBfuzz: Finding Bugs in Sanitizer Implementations
本文提出测试框架 UBfuzz,通过生成含未定义行为的程序并利用 crash-site mapping 测试预言机进行差分测试,在 GCC 和 LLVM sanitizers 中发现 31 个 bug,揭示了 sanitizer 的假阴性问题。
2024-01-09 cs.CR cs.PL cs.SE