编译
再执行性能探测器时可能会报PRF0002: Instrumentation failed with these options: /u "my program" /excludesmallfuns. Please check the output window for additional details.
错误。
这是由于编译时未打开profiling for executable。
处理方法见:
- stackoverflow PRF0002:
- Microsoft /PROFILE。
我用的是cmake项目,最后的解决办法是在CMakelists.txt中加入一句
SET_TARGET_PROPERTIES(test_PoseClassifier PROPERTIES LINK_FLAGS "/PROFILE")
运行性能探查器
点击调试 -> 性能探查器,进行可执行文件添加。
选择检查后开始。
Note:
- 如果选择了cpu使用率,则无法选择检查
- 如果选择了事件查看器,则无法选择检查
结果报告分析
报告重点关注三个模块:
- 调用树
- 函数
- 函数详细信息
建议从调用数开始,找到热力函数后可以直接跳转到函数详细信息。
调用树见下图:
调用树中的关键信息: - 热路径: 占用时间较大的调用路径
- 调用数: 函数被调用的次数
- 非独占时间:函数本身及该函数所调用的函数总共消耗的时间(此概念下,调用数越外层肯定消耗时间越大,从图中可看出)
- 独占时间:抛出掉所调用函数,函数本身所消耗的时间
问题
探测器所生成的vsp报告文件某些情况下非常大,会达到十几G,并且生成后vs由于报告文件过大无法打开。目前我的处理方法时,修改源代码,只执行一部分代码以减小文件大小。还不确定是否有更好的办法。或者可以使用检查中的设置,忽略某些函数的检测。