[论文解读] Finding representative sets of optimizations for adaptive multiversioning applications
本文提出了一种静态多版本化框架,通过机器学习将数据集特征映射到运行时最优代码版本,自动选择适应性多版本化应用的最小代表性优化变体集合。通过结合迭代离线编译、剪枝和基于决策树的版本选择,该方法在保持低代码大小和最小运行时开销的前提下实现了高性能,优于无需动态重新编译的单版本二进制文件。
Iterative compilation is a widely adopted technique to optimize programs for different constraints such as performance, code size and power consumption in rapidly evolving hardware and software environments. However, in case of statically compiled programs, it is often restricted to optimizations for a specific dataset and may not be applicable to applications that exhibit different run-time behavior across program phases, multiple datasets or when executed in heterogeneous, reconfigurable and virtual environments. Several frameworks have been recently introduced to tackle these problems and enable run-time optimization and adaptation for statically compiled programs based on static function multiversioning and monitoring of online program behavior. In this article, we present a novel technique to select a minimal set of representative optimization variants (function versions) for such frameworks while avoiding performance loss across available datasets and code-size explosion. We developed a novel mapping mechanism using popular decision tree or rule induction based machine learning techniques to rapidly select best code versions at run-time based on dataset features and minimize selection overhead. These techniques enable creation of self-tuning static binaries or libraries adaptable to changing behavior and environments at run-time using staged compilation that do not require complex recompilation frameworks while effectively outperforming traditional single-version non-adaptable code.
研究动机与目标
- 解决在静态二进制文件中为不同数据集生成多个优化版本时导致的代码大小爆炸和性能损失问题。
- 实现在无需复杂动态重新编译框架的前提下,对静态编译程序进行运行时自适应。
- 识别出一个最小但具有代表性的优化变体集合,以在多种数据集上保持高性能。
- 开发一种高效、低开销的运行时选择机制,利用机器学习将输入特征映射到最优代码版本。
- 在保持性能的同时最小化版本数量,避免代码膨胀,尤其适用于异构或虚拟化环境。
提出的方法
- 对多个数据集应用迭代离线编译,结合随机参数化变换(如循环分块、展开)生成大量优化函数版本。
- 采用启发式剪枝策略,迭代剔除次优版本,同时保持整体性能并控制代码大小增长。
- 提取数据集特征(如输入大小、数据访问模式)以训练监督机器学习模型,如决策树或规则归纳算法。
- 将训练好的模型转换为可执行代码,用于基于输入特征的运行时版本选择,最大限度降低选择开销。
- 将该框架集成至Open64编译器,并计划支持GCC,可处理手写、库生成或ISA特定的版本。
- 利用硬件性能计数器和分阶段编译,实现能够根据运行时工作负载变化自适应的自调优二进制文件。
实验结果
研究问题
- RQ1如何在不引发代码大小爆炸的前提下,选择一个最小但具有代表性的优化变体集合,以在多个数据集上保持高性能?
- RQ2哪些机器学习技术能有效实现将数据集特征映射到最佳性能优化函数版本的运行时映射,且开销极低?
- RQ3静态多版本化框架能否在避免复杂运行时重新编译基础设施的前提下,实现与动态重新编译相当的性能?
- RQ4迭代离线编译、剪枝与基于机器学习的选择相结合,如何提升在异构或虚拟化环境中的整体应用自适应能力?
- RQ5在使用不同分类算法进行版本映射时,性能提升、代码大小与选择开销之间的权衡关系如何?
主要发现
- 所提出的基于剪枝的方法成功减少了优化变体数量,同时在所有测试数据集上保持了性能,未造成显著性能损失。
- 决策树和规则归纳模型能有效将数据集特征映射到最优代码版本,实现快速且低开销的运行时选择。
- 该框架使静态二进制文件能够在无需动态重新编译或复杂运行时系统的情况下,实现对运行时工作负载和环境变化的自适应。
- 在使用Open64对内核进行的实验评估表明,与单版本二进制文件相比,性能有明显提升,且运行时选择开销极低。
- 该方法可扩展至其他编译器、手写版本或不同ISA,适用于虚拟化和异构计算环境中的部署。
- 该框架在创建跨多样化执行场景保持高性能的自调优静态库和二进制文件方面,展示了实际可行性。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。