漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build

找到编译时间的瓶颈
【漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build】C++BuildInsights提供了多种分析C++编译时间的方法 。 在本文中 , 我们将会讨论可用来识别编译过程中的瓶颈的两种方法:
1)使用vcperf工具进行手动分析 。
2)使用C++BuildInsightsSDK以程序化的方式进行分析 。
我们提供了一个案例研究 , 展示了如何使用这些工具来加快GitforWindows这一开源项目的编译速度 。 我们希望这些教程在分析你自己的工程编译时能派上用场 。
使用vcperf
vcperf工具可以用来捕获工程编译过程的信息并在WindowsPerformanceAnalyzer(WPA)工具中进行查看 。
具体步骤如下:
1.下载最新版本的VisualStudio2019 。
2.从最新版本的WindowsADK中获取WPA工具 。
3.按照vcperf的文档说明 , 将WPA配置为与C++BuildInsights一起使用 。 在这个阶段 , 你可以可以考虑自行编译一份vcpef作为一个可选的步骤 。
4.打开具有管理员权限的[x64NativeToolsCommandPromptforVS2019] 。
5.获取工程编译信息:
5.1执行指令:[vcperf/startMySessionName]
5.2在系统的任何位置编译你的工程 , 甚至是不需要在VisualStudio中编译(因为vcperf会在整个系统级别上收集工程编译信息) 。
5.3执行指令:[vcperf/stopMySessionNameoutputFile.etl] 。 这将会将工程编译信息拷贝到outputFile.etl文件中 。
6.在WPA工具中打开收集到的编译信息 。
在WPA中使用BuildExplorer视图
首次在WPA中打开编译信息时 , 你需要做的第一件事就是打开[BuildExplorer]视图 。 可以通过将其从[GraphExplorer]窗口拖到[Analysis]窗口中来进行操作 , 如下图所示:
漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build
文章图片
BuildExplorer视图提供了4个预设选项 , 您可以在浏览工程编译信息时选择需要的视图:
1.Timelines
2.Invocations
3.InvocationProperties
4.ActivityStatistics
可以通过点击视图顶部的下拉菜单来选择你需要的视图 , 如下图所示:
漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build
文章图片
接下来 , 我们将对这4个预设视图分别进行讲解 。
预设1:Timelines
Timelines预设显示了在工程编译过程中如何安排并行调用的时间 。 每条时间轴都代表一个虚拟线程以及有是哪项任务执行在该线程上 。 在多个线程上执行的调用将占用多条时间轴 。
需要注意的是 , 仅从VisualStudio2019版本16.4开始 , 才可以使用精确的并行代码生成功能 。 在早期版本中 , 给定的编译器或连接器调用的所有代码生成都是放在一条时间轴上 。
查看Timelines预设时 , 将鼠标悬停在彩色条上可以查看其对应的调用 。 下图显示了将鼠标悬停在第5条时间轴上的条形上方时发生的情况 。
漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build
文章图片
预设2:Invocations
Invocations预设在其自己的时间轴上显示每个调用 , 而与并行性无关 。 它更详细地介绍了调用中发生的细节 。 使用此预设 , 将鼠标悬停在彩色条上会显示调用在任何时间点正在处理的活动 。 在下面的示例中 , 我们可以看到链接器调用58中的绿色条对应于整个程序的分析活动 , 即链接时间代码生成的一个阶段 。 我们还可以
漫漫开发路@Insights找到编译过程中的瓶颈,使用C+Build
文章图片
预设3:InvocationProperties
InvocationProperties预设在视图底部的表中显示每个调用的各种属性 。 你可以从中找到感兴趣的调用 , 然后查看有关它的各种信息 , 例如: