CPU之Profiling

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

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

Ready?

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

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

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

Go

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

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

1 启动,点击开始

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

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

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

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

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

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

2 运行一段时间后点击Stop

3 获取性能分析的结果

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

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

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

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

  1. 明确性能优化的要求
  2. 性能分析:找到热点
  3. 分析热点,并考虑扩展性等问题
  4. 在代码逻辑层面上进行优化
  5. 再此进行性能分析
  6. 采用并行,向量化,GPU等方式优化
  7. 再此进行性能分析
  8. 在更底层别进行代码优化(考虑缓存,面向数据编程等)
  9. 重复上述7-8的步骤
  10. 生成性能分析报告

原文发布于微信公众号 - LET(LET0-0)

原文发表时间:2018-09-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

云本机应用程序成熟度的模型

云本地应用程序是为了能在云基础架构上最佳地运行而构建的。云本地应用程序体系结构与为数据中心设计的传统分层应用程序非常不同。在本文中,我将讨论来自开放数据中心联盟...

2447
来自专栏PPV课数据科学社区

【学习】深度解析LinkedIn大数据平台(二):数据集成

第二部分:数据集成 请让我首先解释 一下“数据集成”是什么意思,还有为什么我觉得它很重要,之后我们再来看看它和日志有什么关系。 数据集成就是将数据组织起来,使...

3637
来自专栏软件成本造价评估

软件造价之:浅析快速功能点方法度量软件的规则及过程

快速功能点方法是一种软件规模度量方法。该方法适用于软件项目早期、中期、后期等各个阶段的规模估算或测量。   采用优化后的功能点方法——快速功能点方法进...

1290
来自专栏后端技术探索

性能优化模式(纯干货!!)

性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服...

1414
来自专栏JAVA技术zhai

千万级流量的优化策略实战

性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服...

6255
来自专栏向治洪

OtterTune来了,DBA怎么办

概述 最近几年,特别是随着云计算的发展,出现了行业向后重叠和推动的情况。数据库龙头企业Oracle最近几年重点转而向云的变革,它全力以赴在做的一件事情就是把所有...

2706
来自专栏企鹅号快讯

Hulu大数据架构与应用经验

内容来源:2017年8月12日,Hulu大数据架构部门负责人董西成在“网易博学实践日:大数据与人工智能技术大会”进行《Hulu大数据架构与应用经验》演讲分享。I...

3835
来自专栏ThoughtWorks

性能测试问题与思考 | 洞见

性能测试对于大部分测试人员都是一个神秘地带,因为在很多公司,性能测试都是由一个性能测试团队来做,所以普通测试人员没有机会接触到真实的性能测试,因而很难学习到很多...

1142
来自专栏杨建荣的学习笔记

MySQL分布式管理初步设计

中间件方案对于业务的使用相对是透明的,而且扩展性相对较好,这里说较好,是基于良好的架构设计,对于弹性伸缩的支持还是有限的。

982
来自专栏EAWorld

安全的云原生微服务架构全景图

原题:Deploying a Secure Cloud Native Microservices Platform

1994

扫码关注云+社区

领取腾讯云代金券