CppPerf-DB
收藏arXiv2026-05-12 更新2026-05-13 收录
下载链接:
https://doi.org/10.5281/zenodo.20097425
下载链接
链接失效反馈官方服务:
资源简介:
CppPerf-DB是由苏黎世联邦理工学院创建的C++性能修复基准数据集,旨在为自动化程序修复领域提供真实、可执行的性能改进补丁。该数据集包含347个经过手动验证的补丁,源自42个成熟的开源C++仓库,覆盖了6年的开发历史,其中39%为多文件修改,代码变更行数中位数为28行。数据通过CppPerf-Mine管道从GitHub仓库中挖掘,结合结构过滤、LLM分类和容器化测试流程构建而成。该数据集主要应用于评估自动化性能修复工具,特别是针对C++程序的执行时间优化问题,为解决真实场景中性能缺陷修复的挑战提供了标准化测试基准。
CppPerf-DB is a C++ performance repair benchmark dataset created by ETH Zurich, which aims to provide realistic and executable performance improvement patches for the field of automated program repair. This dataset contains 347 manually verified patches sourced from 42 mature open-source C++ repositories, covering a 6-year development history. Of these patches, 39% involve multi-file modifications, with a median of 28 lines of code changed. The dataset is constructed through the CppPerf-Mine pipeline, which mines data from GitHub repositories, and integrates structural filtering, LLM classification, and containerized testing workflows. It is primarily applied to evaluate automated performance repair tools, especially those focused on execution time optimization for C++ programs, providing a standardized test benchmark for addressing the challenges of performance defect repair in real-world scenarios.
提供机构:
苏黎世联邦理工学院
创建时间:
2026-05-12
搜集汇总
数据集介绍

构建方式
CppPerf-DB的构建依托于CppPerf-Mine管道,该管道从GitHub上精选的C++仓库中挖掘可复现的执行时间优化补丁。流程始于仓库筛选,要求项目至少具备用户指定的星标数、以C++为主要语言、根目录包含CMakeLists.txt且定义了可执行测试。随后,管道通过结构过滤(如限定提交时间窗口、修改文件数量及类型)筛选候选提交,并采用两阶段大语言模型分类:第一阶段双模型基于提交消息与关联问题描述进行初步判定,若意见分歧则进入第二阶段,由单一模型结合代码差异进行二次确认。最终,分类为执行时间优化的提交会在Docker容器中构建并反复运行测试,仅在统计显著改善(Mann-Whitney检验p<0.05且提升≥5%)且构建通过时,方被封装为包含编译器、代码及日志的Docker镜像,作为CppPerf-DB的一条补丁。
特点
CppPerf-DB收录了347个经人工验证的真实世界C++性能优化补丁,源自42个成熟仓库(星标数中位数1,849,提交数中位数3,468),覆盖六年开发历史。其独特优势在于39%的补丁涉及多文件修改,适合评估仓库级别的修复工具,且补丁修改代码行数范围从1到6,069行(中位数28),展现了规模与复杂度的多样性。每个补丁均以Docker镜像形式提供,确保完全可复现性,其中35个补丁附有现成测试用例,可自动客观评估修复效果。CppPerf-DB填补了现有多为竞赛级程序或针对Python/.NET的基准的空白,成为首个大规模、真实世界、容器化的C++性能修复基准。
使用方法
CppPerf-DB通过命令行接口使用,用户可先拉取所选补丁的Docker镜像,再调用main.py脚本并传入补丁ID及自行生成的补丁,脚本将自动构建、运行测试并以JSON格式保存结果。该基准与CppPerf-Mine管道无缝集成,用户可通过调整配置参数(如星标数阈值、时间范围、文件修改数上限)扩展数据集,纳入更新或自定义的补丁。此外,CppPerf-DB预置的测试用例(35个补丁)支持统计检验,确保对修复效果进行严谨量化评估,而多文件补丁则为仓库级工具(如OpenHands)提供了真实挑战。所有数据和代码均开源托管于Zenodo与GitHub,便于研究社区复现与改进。
背景与挑战
背景概述
在自动程序修复(APR)领域,近年来的研究重心已从功能性缺陷转向性能缺陷的自动修复,而这一转变催生了对真实、可执行性能补丁基准的迫切需求。现有C++性能基准大多源于竞赛编程提交,缺乏真实世界项目的代表性,而近期出现的性能基准主要面向Python和.NET生态。为填补这一空白,来自苏黎世联邦理工学院(ETH Zurich)的Tommy Ho、Khashayar Etemadi与Zhendong Su教授于2026年提出了CppPerf-Mine这一可配置流水线,并基于其构建了CppPerf-DB数据集。该数据集合集347个经人工验证的真实C++执行时间优化补丁,源自42个成熟的开源仓库,其中39%为多文件修改,为评估仓库级修复工具提供了坚实支撑。其构建过程融合了结构化提交筛选、基于大语言模型的提交分类器与容器化构建测试流程,确保了补丁的可复现性。CppPerf-DB的发布标志着C++性能修复基准从玩具级程序向真实世界软件的重要迈进。
当前挑战
CppPerf-DB所直面并试图攻克的领域问题在于:真实世界中C++性能缺陷的自动修复仍是一项开放且棘手的挑战。当前先进代理工具OpenHands在该数据集上仅能正确修复13.5%的补丁,且多文件补丁的成功率低至7.4%,揭示了现有方法在定位与修复跨文件性能逻辑上的显著不足。在基准构建过程中,挑战同样严峻:其一,从超过六万五千次提交中精准识别出真正聚焦于执行时间优化的提交,需依赖高精度的LLM分类器(最终精度为86.67%,但召回率仅41.94%);其二,自动化构建过程中面临缺失依赖、编译环境不一等问题,需借助启发式规则与LLM回退机制反复调试;其三,仅35个补丁拥有可显著检测执行时间提升的现有测试用例,表明多数性能优化路径未被现有测试覆盖,这给补丁效果的客观评估带来了根本性制约。
常用场景
经典使用场景
CppPerf-DB作为一个精心构建的C++性能优化提交基准数据集,最经典的使用场景是评估和比较自动化程序修复(APR)工具在修复真实世界C++性能缺陷方面的能力。研究者可以利用该数据集中347个来自42个成熟开源仓库的可执行性能修复补丁,通过Docker容器化环境对各类APR工具进行标准化测试,尤其适用于衡量工具在单文件与多文件修改场景下的修复效果。
解决学术问题
该数据集有效填补了C++语言在真实世界性能缺陷基准测试方面的空白,解决了长期以来学术界缺乏高质量、可复现的C++性能修复评估基准这一关键问题。通过提供来自成熟仓库的多样化性能修复补丁(39%为多文件修改),CppPerf-DB使得研究者能够系统性地评估APR工具在复杂代码库上的表现,揭示了当前最优工具仅能修复13.5%缺陷的严峻现状,为后续研究指明了方向。
衍生相关工作
CppPerf-DB的发布激发了一系列相关研究工作,包括基于该数据集改进的LLM驱动的性能缺陷定位与修复方法、针对多文件修改场景的仓库级补丁生成工具,以及结合静态分析与执行时间采样的混合优化策略。数据集附带的CppPerf-Mine管道亦被社区用于构建针对其他语言(如Python和Java)的性能修复基准,推动了跨语言性能优化研究的发展。
以上内容由遇见数据集搜集并总结生成



