OpenHarmony性能分析工具:https://developer.huawei.com/consumer/cn/agconnect/huawei-smartperf/
论文《ArkAnalyzer: The Static Analysis Framework for OpenHarmony》 项目地址: https://gitee.com/openharmony-sig/arkanalyzer
论文《Identifying Compiler and Optimization Level in Binary Code From Multiple Architectures》
OpenHarmony LLVM-PGO工具链文档: https://gitee.com/openharmony/third_party_llvm-project
鸿蒙OS部分开源应用项目地址:https://gitee.com/explore/harmonyos-app?order=recommend
赛题题目:基于PGO的OpenHarmony动态库(.so)优化自动化检测与验证系统
赛题说明:
OpenHarmony生态应用性能优化是提升用户体验的关键环节。其中,动态库(.so文件)作为核心计算模块,其执行效率直接影响应用响应速度、电池续航和设备发热。PGO(Profile-Guided Optimization)是一种强大的编译优化技术,通过收集程序实际运行数据来指导编译器优化,可为适合的动态库带来10%-15%的性能提升。 然而,在OpenHarmony生态中,PGO技术应用面临三大挑战: 收益评估困难:并非所有动态库都能从PGO中获得显著收益。计算密集型、分支逻辑复杂的库(如物理引擎、渲染器)通常收益显著,而IO绑定型或线性执行路径的库收益有限。开发者难以预先判断哪些库值得投入PGO优化成本; 测试用例构建复杂:有效的PGO优化依赖高质量的profile数据,需要测试用例覆盖关键执行路径。手动构建这些测试集耗时且往往不全面,导致次优的优化效果; 工程成本与收益平衡:PGO引入额外的构建步骤(插桩编译→收集profile→优化编译),增加了构建时间和CI/CD复杂度。对于收益有限的库,这种额外成本可能不值得。 本赛题要求参赛者开发一套自动化工具链,能够: 分析OpenHarmony应用中的动态库特征,预测PGO优化潜在收益; 自动识别高收益库并生成针对性测试用例,覆盖关键执行路径; 量化优化效果,提供性能提升报告和工程成本评估。 参赛者需在RK3568开发板上实际验证工具链效果,通过至少3个真实应用案例,证明工具能准确识别高收益库并带来≥10%的性能提升(以IPC提升、缓存命中率提高或功耗降低等指标衡量)。
赛题要求:
核心任务
开发自动化工具链实现以下功能中的一项或多项: PGO收益预测
测试用例管理
优化策略推荐
效果验证
技术要求
二进制分析:提取动态库的特征(可使用任何适合的工具) 动态追踪:采集性能数据,如热点函数、分支预测、缓存命中率等 预测模型:训练模型预测PGO收益,输入特征可包括: 二进制特征:分支密度、函数大小分布等 运行时特征:热点函数占比、分支预测失败率等 交付物 技术报告:详细说明技术方案、算法设计、实验结果和性能提升分析 可运行的技术原型:提供完整源代码和使用说明,确保评委可复现结果 输出内容: 优化分析报告:包含库收益预测和优先级排序 验证结果:通过实际编译参数调整验证优化建议,高收益库性能提升≥10%
评分标准:
评估维度 权重 评分细则 验证方法 收益预测准确性 35% - 预测与实际收益偏差<5%得25分
赛题联系人:
范刚 fan.gang@huawei.com
参考资料:
参赛资源支持:
赛题交流讨论链接:
https://www.chaspark.com/#/races/competitions/1136109649061687296
AutoGain-PGO
AutoGain-PGO 框架设计
AutoGain-PGO 框架由四个主要模块组成,分别为 收益预测模块(GainPredictor)、静态特征建模模块(StaticFeatureAnalyzer)、性能可视化模块(ProfileVisualizer) 和 共享库全局优化模块(HotLD)。
1. 收益预测模块(GainPredictor)
该模块的主要目标是预测在指定二进制(.so)上应用 PGO(Profile-Guided Optimization)后可能带来的收益,从而为后续优化提供指导。更多细节请见 详细说明。
2. 静态特征建模模块(StaticFeatureAnalyzer)
该模块对二进制文件的静态特征进行建模,包括:
在此基础上,根据函数在优化前后是否获得性能收益设置标签,分别在函数级别和基本块级别训练了两个神经网络模型,用于判断哪些代码片段更有可能从 PGO 中获益。 更多细节请见 详细说明。
3. 性能可视化模块(ProfileVisualizer)
该模块从三类关键硬件事件(TLB、Cache、BTB)出发,在函数级别对其 misses 情况进行可视化分析。
其目标是帮助开发人员识别性能瓶颈,直观地理解优化空间,从而辅助优化决策。
4. 动态库优化模块(HotLD)
在已识别到具有优化潜力的动态库情况下,该模块针对不同的典型应用工作负载生成专用的 PGO 优化代码副本。
随后,HotLD 会监控目标程序的运行时工作负载,并在运行时动态选择并链接最合适的代码副本,以实现全局代码布局优化。 更多细节请见 详细说明