调优过程
前提条件
- 服务器和操作系统正常运行。
- PC端已经安装SSH远程登录工具。
- 目标环境上鲲鹏DevKit系统性能分析工具已经安装完成,并正常运行。
操作步骤
- 创建Launch Application的微架构Bad Speculation分析。
先使用cpu_branch_prediction_before.cpp进行分析。
表1 任务配置参数说明 参数
说明
分析类型
微架构分析
分析对象
应用
模式
Launch application
应用路径
/opt/testdemo/cpu_branch_prediction_before
采样时长
60秒
TopDown类型
其他level
分析指标
Bad Speculation
- 查看微架构分析的结果。图1 微架构分析结果
- 性能瓶颈分析。
在微架构分析结果显示CPU乱序执行的时候预测错误导致的流水线停顿,存在瓶颈。查看代码,发现在代码中的for循环中的if判断存在大量的分支预测失败。
- 性能瓶颈优化。
修改代码,在进行for循环前,对数据先进行排序处理,使得CPU的分支预测更加准确。优化后demo为cpu_branch_prediction_after.cpp。
- 再次进行微架构Bad Speculation分析。
表2 任务配置参数说明 参数
说明
分析类型
微架构分析
分析对象
应用
模式
Launch application
应用路径
/opt/testdemo/cpu_branch_prediction_after
采样时长
60秒
TopDown类型
其他level
分析指标
Bad Speculation
图2 第二次微架构Bad Speculation分析结果
调优结果
查看发现Bad Speculation的占比极低,CPU分支预测错误占比很小。
本实践中,通过微架构的采集分析,逐渐找到代码中CPU分支预测错误导致的性能瓶颈,通过优化提高性能。
总结
类型 |
应用执行时间 |
branchMispredict |
---|---|---|
无排序 |
31.1秒 |
54% |
排序 |
10.6秒 |
0% |
通过微架构对CPU的指令操作进行分析,调整代码后可提升性能。
父主题: 实践5:CPU分支预测调优实践