---
title: 如何通过DevKit性能分析工具识别程序Topdown特征并进行模式优化提升应用性能-官方技术文章-鲲鹏社区
description: 如何通过鲲鹏微架构分析功能，找到代码性能瓶颈点，分析并进行修改优化，从而实现性能提升
keywords: DevKit,Topdown,如何通过,性能分析工具,识别程序,特征并进行模,式优化提升应,用性能
url: https://www.hikunpeng.com/developer/techArticles/20231206-4?envFlag=1
section: (其他)
---

# 如何通过DevKit性能分析工具识别程序Topdown特征并进行模式优化提升应用性能-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20231206-4?envFlag=1
描述: 如何通过鲲鹏微架构分析功能，找到代码性能瓶颈点，分析并进行修改优化，从而实现性能提升
关键词: DevKit,Topdown,如何通过,性能分析工具,识别程序,特征并进行模,式优化提升应,用性能

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

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

如何通过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
```

运行命令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% |

本页内容
