[Paper] PerfCoder:大语言模型用于可解释的代码性能优化

发布: (2025年12月16日 GMT+8 10:30)
8 min read
原文: arXiv

Source: arXiv - 2512.14018v1

Overview

PerfCoder 是一系列全新的大型语言模型(LLM),它们的功能不仅限于编写代码——还能自动重写已有代码以提升运行速度,并解释每项修改为何有助于性能提升。通过在真实的优化案例上进行微调,并结合基于运行时的强化学习,PerfCoder 学会提出具体、易于人类阅读的性能优化技巧,这些技巧针对特定的输入程序能够实际发挥作用。

关键贡献

  • 面向优化的 LLM:引入一种模型,将性能提升视为第一目标,而非事后考虑。
  • 精心策划的优化轨迹:构建包含真实代码编辑及人工注释(描述每一步优化)的数据集。
  • 偏好对齐的 RL 微调:使用实际运行时测量作为奖励信号,教会模型偏好能够带来可测量加速的编辑。
  • 一次性代码重写:在单次传递中生成针对特定输入的性能增强代码,消除昂贵的迭代编译循环。
  • 可解释的反馈:生成所应用优化的自然语言解释,使得与更大型 LLM 的“规划者‑优化器”工作流成为可能。
  • 领先的结果:在 PIE 基准上,无论是原始加速幅度还是成功优化比例,都超越所有先前模型。

Methodology

  1. Data collection – The authors gathered a corpus of optimization trajectories: original source files, the transformed (faster) versions, and line‑by‑line human comments that describe each change (e.g., “replace std::vector with std::array to avoid heap allocation”).
    数据收集 – 作者收集了一套 优化轨迹:原始源文件、转换后的(更快的)版本,以及逐行的人类注释,描述每一次修改(例如,“将 std::vector 替换为 std::array 以避免堆分配”)。

  2. Supervised fine‑tuning – A base code‑generation LLM is first fine‑tuned on this corpus, teaching it the syntax of performance‑focused edits and the associated natural‑language rationale.
    监督微调 – 首先在该语料库上对基础代码生成大模型进行微调,使其学习面向性能的编辑语法及相应的自然语言理由。

  3. Reinforcement learning (RL) alignment – For each candidate rewrite, the model’s output is compiled and timed on a set of benchmark inputs. The measured runtime reduction serves as a reward, guiding a policy‑gradient RL step that nudges the model toward edits that actually speed up execution.
    强化学习(RL)对齐 – 对每个候选改写,模型输出会被编译并在一组基准输入上计时。测得的运行时间缩短作为奖励,引导策略梯度 RL 步骤,使模型倾向于真正加速执行的编辑。

  4. Inference pipeline – At test time, the model receives a source file and emits a single, optimized version plus a concise explanation of each modification. No iterative search or external compiler feedback loop is required.
    推理流水线 – 在测试时,模型接收源文件并输出一个优化后的版本以及每项修改的简要说明。无需迭代搜索或外部编译器反馈循环。

  5. Planner‑optimizer cooperation – The generated explanations can be fed to a larger LLM (e.g., a 32B or GPT‑5 model) that acts as a high‑level planner, further refining the optimization strategy.
    规划器‑优化器协作 – 生成的说明可以输入到更大的 LLM(例如 32B 或 GPT‑5 模型),该模型充当高层规划器,进一步细化优化策略。

结果与发现

  • 运行时加速:在 PIE 基准测试中,PerfCoder 实现了平均 23 % 的执行时间减少,超出之前最佳 LLM 大约 9 %
  • 有效优化率:78 % 的测试程序至少获得一次有益的重写,而最近的竞争者为 61 %。
  • 可扩展性与策略感知:仅仅扩大基础模型规模(例如从 7B 到 32B)缩小差距;策略感知的微调是主要因素。
  • 协同增益:当可解释反馈用于指导 32B 规划模型时,总体加速提升至 31 %,而 GPT‑5 大小的模型相较其原始版本提升 28 %
  • 可解释性:人工评估者在 84 % 的案例中将生成的解释评为“清晰且可操作”,证实模型的建议不是黑箱转换。

Practical Implications

  • 开发者生产力:将 PerfCoder 集成到 IDE 或 CI 流水线中,可自动建议性能补丁,帮助工程师节省数小时的手动分析和调优。
  • 边缘和嵌入式系统:资源预算紧张,微秒都很重要;PerfCoder 能生成低开销代码,无需开发者具备性能专家级别的知识。
  • 自动化代码审查:团队可以将 PerfCoder 的输出视为补充审查者,标记潜在瓶颈并提供具体的修复方案。
  • 模型驱动的优化服务:云服务提供商可以将 PerfCoder 以 API 形式提供,用户上传代码后即可获得优化后的版本以及可读的报告。
  • 教育工具:自然语言解释本身即为教学材料,帮助初级开发者学习常见的性能技巧(例如循环展开、缓存友好的数据布局)。

限制与未来工作

  • 数据集偏差:优化轨迹主要来自 C/C++ 项目;其他语言(Rust、Go、Python)的性能模式可能无法直接迁移。
  • 编译开销:虽然推理是一次性完成,但强化学习训练仍需编译并计时大量候选者,这限制了对新硬件架构的快速扩展。
  • 安全性与正确性:当前流水线假设转换后的代码保持功能语义;如果编译器未能捕获,细微的错误可能会漏掉。
  • 对大型代码库的泛化:实验聚焦于相对较小的基准程序;将 PerfCoder 应用于多模块、构建系统驱动的项目仍是一个未解决的挑战。
  • 未来方向:作者计划扩展数据集以覆盖更多语言,加入静态分析安全检查,并探索层次化规划——让高层 LLM 提出 优化什么,而 PerfCoder 负责 如何实现

作者

  • Jiuding Yang
  • Shengyao Lu
  • Hongxuan Liu
  • Shayan Shirahmad Gale Bagi
  • Zahra Fazel
  • Tomasz Czajkowski
  • Di Niu

论文信息

  • arXiv ID: 2512.14018v1
  • Categories: cs.SE, cs.AI
  • Published: 2025年12月16日
  • PDF: 下载 PDF
Back to Blog

相关文章

阅读更多 »