鲲鹏社区首页
中文
注册
如何通过DevKit性能分析工具识别程序Topdown特征并进行模式优化提升应用性能

如何通过DevKit性能分析工具识别程序Topdown特征并进行模式优化提升应用性能

DevKit

发表于 2023/12/06

0

本章将通过鲲鹏微架构分析功能,找到一段代码性能瓶颈点,分析代码并进行修改优化,从而实现demo性能的提升。实操过程需要使用鲲鹏平台环境,开发者请继续阅读本章节。

环境部署

如果开发者选择使用自备的鲲鹏平台环境完成课程学习,则需要确保平台环境与如下环境要求保持一致。

硬件要求:

项目

说明

CPU

Kunpeng 920

操作系统要求:

项目版本下载地址
OpenEuler20.03https://repo.openeuler.org/openEuler-20.03-LTS-SP3/

软件下载地址:

项目版本下载地址
DevKit性能分析工具23.0.T20https://www.hikunpeng.com/developer/devkit-new-download

测试demo下载地址:

项目分支下载地址
devkitdemomainhttps://github.com/kunpengcompute/devkitdemo/archive/refs/heads/main.zip

工具部署地址:

项目版本文档地址
DevKit部署指南23.0.T20https://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_beforeg++ -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%

本页内容