如何通过DevKit性能分析工具识别程序Topdown特征并进行模式优化提升应用性能
发表于 2023/12/06
0
本章将通过鲲鹏微架构分析功能,找到一段代码性能瓶颈点,分析代码并进行修改优化,从而实现demo性能的提升。实操过程需要使用鲲鹏平台环境,开发者请继续阅读本章节。
环境部署
如果开发者选择使用自备的鲲鹏平台环境完成课程学习,则需要确保平台环境与如下环境要求保持一致。
硬件要求:
项目 | 说明 |
---|---|
CPU | Kunpeng 920 |
操作系统要求:
项目 | 版本 | 下载地址 |
---|---|---|
OpenEuler | 20.03 | https://repo.openeuler.org/openEuler-20.03-LTS-SP3/ |
软件下载地址:
项目 | 版本 | 下载地址 |
---|---|---|
DevKit性能分析工具 | 23.0.T20 | https://www.hikunpeng.com/developer/devkit-new-download |
测试demo下载地址:
项目 | 分支 | 下载地址 |
---|---|---|
devkitdemo | main | https://github.com/kunpengcompute/devkitdemo/archive/refs/heads/main.zip |
工具部署地址:
项目 | 版本 | 文档地址 |
---|---|---|
DevKit部署指南 | 23.0.T20 | https://www.hikunpeng.com/document/detail/zh/kunpengdevps/userguide/usermanual/KunpengDevKit_0001.html |
参照部署指导完成工具部署即可。
TMA性能分析方法论
TMA(Top-down Microarchitecture Analysis) 可以快速准确地反映出具体的性能瓶颈,并且通过层级图和相应的百分比,让用户只需关注核心的性能瓶颈,清楚当前瓶颈对CPU性能的影响程度。DevKit提供的微架构分析功能基于鲲鹏920 PMU(Performance Monitor Unit)事件,获得指令在CPU流水线上的运行情况,帮助用户快速定位当前应用在CPU上的性能瓶颈点。该分析方法基于指令架构分析实现,在分析应用程序性能特征、性能瓶颈点初期较为有效,通过使用该方法即可较为通用的将程序瓶颈点的类型确定,分析使用度十分广泛。
使用DevKit性能分析工具进行TopDown分析
1. 编译demo及更改权限
进入“devkitdemo-main/Hyper_tuner/testdemo/CPU分支预测/” 目录,该目录下放置本节实践优化前后的demo。通过如下命令编译完成待测试的两个二进制文件
g++ -g cpu_branch_prediction_before.cpp -o cpu_branch_prediction_before
g++ -g cpu_branch_prediction_after.cpp -o cpu_branch_prediction_after
运行命令chmod -R 777 devkitdemo-main更改权限
2. 创建Launch Application的微架构Bad Speculation分析
先使用cpu_branch_prediction_before进行分析。
3. 查看微架构分析的结果
4. 性能瓶颈分析
在微架构分析的结果中,查看发现Bad Speculation下面的branchMispredict占比很高,说明是CPU乱序执行的时候预测错误导致的流水线停顿,存在瓶颈。查看代码,发现在代码中的for循环中的if判断存在大量的分支预测失败。
5. 性能瓶颈优化
修改代码,在进行for循环前,对数据先进行排序处理,使得CPU的分支预测更加准确,优化后的代码文件为cpu_branch_prediction_after.cpp。
6. 再次进行微架构Bad Speculation分析
7. 调优结果
查看发现Bad Speculation的占比极低,CPU分支预测错误占比很小。
8. 调优总结
本文通过微架构的采集分析,逐渐找到代码中CPU分支预测错误导致的性能瓶颈,通过优化提高性能。
类型 | 应用执行时间 | branchMispredict |
---|---|---|
无排序 | 31.1秒 | 54% |
排序 | 10.6秒 | 0% |