11

陆国伟- · 2021年08月23日

CPU之Profiling

之前我们介绍了CPUCache,主要在原理上理解如何充分调用CPU的性能(Why),接着又学习了SIMD技术,算是在编程层面上发挥CPU的并行计算能力(How)。今天,我们来一个不那么复杂的,谈一下如何使用性能分析工具,发现程序的Hotspot(Where),毕竟,工欲善其事必先利其器。

“Premature optimization isthe root of all evil”---Donald Knuth

Ready?

首先,不要盲目优化,一定要做好充分的准备工作,明确优化条件。

优化代码是一件非常有挑战的事情,你需要设定一个足够清晰的界定范围,比如分配的时间,优化涉及到的具体模块以及带来的维护成本。当然,最重要的,你想要达到的目标,是提高两倍,还是十倍。

aijishu_cpu1.jpg

当然,大概率事件是,没有人会跟你明确上述的各项指标,那么,作为负责人,你需要明确这些指标,这依赖于你的经验,目前的资源以及意愿,这是一个喜忧参半的情况,忧的是你需要背锅,喜的是你可以自己来设计这个锅。

Go

作为C++程序,一定要对Release版本进行优化,基于之前的学习,就不解释为何不能用Debug版本了。这里,你就需要让自己的代码具备Release版本下的“调试”能力。VS下需要做如下的设置:

aijishu_cpu2.jpg
aijishu_cpu3.jpg

 

这里,我们先用VS自带的性能分析工具,Alt+F2,不要问我按钮,我只知道快捷键,如下图,我们就可以很方便的通过VS分析工具获取性能瓶颈:

aijishu_cpu4.jpg
1 启动,点击开始

aijishu_cpu5.jpg
2 运行一段时间后,点击停止收集

aijishu_cpu6.jpg
3查看函数以及对应的CPU使用率,并点击“创建详细的报告”

aijishu_cpu7.jpg
4 点击Hotspot发现的函数,这里是Tick()

aijishu_cpu8.jpg
5 获取详细的函数分析,找到对应的瓶颈

VS的性能分析工具是需要收费的,当然,这句话当我没说吧。同时,还有一款免费开源的软件:Very Sleepy,也可以很方便的做到该统计:
aijishu_cpu9.jpg

1 选择对应的应用程序以及路径,点击运行(注意启动32位或64位)
aijishu_cpu10.jpg

2 运行一段时间后点击Stop
aijishu_cpu11.jpg

3 获取性能分析的结果

可见,分析的过程和VS的性能分析工具大概相同,适合只能使用免费VS的用户。在性能分析的过程中,我们可以怀疑性能瓶颈,但不能相信自己的直觉,特别是当你有很丰富的性能分析经验时,更不能大意。大胆假设,小心验证。这里不知道你是否发现了一个问题,嗯,我们发布的Release版本一定把要Debug调试信息选项去掉,否则,理论上是可以看到源码,这句话拿走不谢。

通过工具,我们可以很详细的获取时间,但这并不是万能的。首先,工具不会告诉我们为什么这些地方会成为Hotspot,我们也需要根据大量不同的数据集来验证可扩展性,还有一点很重要,该分析不能做到实时的,每一帧级别的统计,这也是为什么,我们在使用工具的基础上,我们需要结合自己的需求,采用一些自定义的性能分析。
aijishu_cpu12.jpg

Cesium Inspector就是一个很好的性能分析工具,可以很方便的获取一些信息,方便我们更精确的分析当前的性能情况。如下是星际2中的自定义性能分析效果,如果感兴趣可以观看原视频,里面谈到了自定义性能分析的小技巧,个人觉得收获不算大:https://www.gdcvault.com/play/1012369/Designing-for-Performance-Scalability-Reliability

aijishu_cpu13.jpg

最后给出性能分析的步骤:

  1. 明确性能优化的要求
  2. 性能分析:找到热点
  3. 分析热点,并考虑扩展性等问题
  4. 在代码逻辑层面上进行优化
  5. 再此进行性能分析
  6. 采用并行,向量化,GPU等方式优化
  7. 再此进行性能分析
  8. 在更底层别进行代码优化(考虑缓存,面向数据编程等)
  9. 重复上述7-8的步骤
  10. 生成性能分析报告
作者:Peter6
原文链接:https://mp.weixin.qq.com/s/j9BeHzw7D1kONG29ST87Sw
微信公众号:
LET.jpg

推荐阅读

更多GPU及渲染技术干货请关注Arm Mali GPU技术专栏。
11 阅读 804
推荐阅读
0 条评论
关注数
26
内容数
10
Arm Mali GPU系列相关技术干货
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息