来源笔记

Agentic Code Optimization via Compiler-LLM Cooperation

本文提出 ACCLAIM,这是一种多智能体系统,把标准编译器 pass 与源代码、IR 和汇编层面的 LLM 重写结合起来。目标是在不牺牲编译器可靠性的前提下获得 LLM 发现的优化,报告评估显示,相比 clang -O3 的平均加速最高可达 1.25×

  • 编译器很可靠,但会错过那些需要从程序意图出发进行更高层推理的优化。
  • LLM 能找到幅度更大的重写,但常会生成错误代码;论文引用的错误代码率在 10% 到 90% 之间,另一个先前结果报告,未经增强的最佳模型有 42% 的错误重写。
  • 这很重要,因为即使很小的运行时间收益,在大规模场景下也会有影响,而现有的 LLM 优化方法通常只在单一抽象层上工作,而不是贯穿整个编译管线。
  • 论文把优化定义为跨多个抽象层的 重写下推 搜索,涵盖 C 源码LLVM IRx86 汇编 等层级。
  • 它构建了 ACCLAIM,一个多智能体系统,包含一个 guiding agent、每个抽象层各自的 level-specific optimization agents,以及一个 testing agent
  • guiding agent 决定何时调用常规编译器组件,何时调用 LLM 优化器,然后根据测试反馈保留、重试或回溯候选程序。
  • testing agent 以通过测试的比例检查 正确性,并以相对原程序的运行时间改进来衡量 性能
  • 核心思路很直接:让 LLM 在语义推理有帮助的地方重写代码,然后让编译器在这些重写之前或之后应用其常规、经过验证的 pass。
  • 主要报告结果是在一组标准 C 程序 上,相比 clang -O3平均加速为 1.25×
  • 摘要说明,在相同计算预算下,compiler-LLM cooperation 的表现优于现有编译器优化和按层级划分的 LLM 基线
  • 论文还说,这种方法在相同计算预算下也优于朴素的多层级基线
  • 在动机示例中,LLM 在源代码层把一个 population-count 计算从 O(k log k) 改成 O(log k),或者在 IR 层通过引入 @llvm.ctpop.i32 把它改成 O(k)
  • 在这次 IR 重写之后,LLVM 向量化会把每次循环迭代中的 8 次 population-count 调用排成 2 条指令,每条包含 4 个操作;论文说,在支持恒定时间 popcount 的硬件上,这可以把运行时间降到
  • 这段摘录没有提供更完整的基准表、数据集规模、方差,或除 1.25× 这个总结果之外的各基线具体数值。