英特尔® Parallel Amplifier 入门 - 程序在哪里耗费了时间?

生成应用程序后,即可对 <install-dir>/samples/matrix 目录中所提供代码的性能进行分析。英特尔® Parallel Amplifier 提供了多种类型的分析,可收集不同类型的性能数据。在此步骤中,您将运行热点(Hotspot)分析来收集数据、查看结果并深入观察造成某个问题的相关源代码。热点分析可帮助您理解应用程序将运行时间耗费在哪些地方,并识别出最耗时的函数。

注意: 要确保应用程序的性能表现基本保持一致,请在执行其他软件数量最少的系统上完成整个调优过程。

 

建立测试基准

为优化前的应用程序建立一个性能测试基准:

1. 在 Visual Studio* 外启动矩阵应用程序,获得最准确数字。

注意:运行和分析应用程序之前,建议您尽量关闭计算机上运行的其他软件,以获得最准确的结果。

2. 应用程序运行后,即可在输出结果中看到执行时间:

基准必须可测量且可再现,只有这样,才能作为与未来修订版相比较的基础。

 在应用程序调优阶段中,执行时间就是您的性能测试基准。

注意:可多次运行应用程序以使用平均值。此方法有助于最小化由系统瞬时活动造成的偏差。

 

查找热点

运行热点分析识别热点--耗时较大的函数/代码段。

1.在 Amplifier 工具栏中,选择 Hotspots - Where is my program spending time running?

2.单击 Profile 按钮。

Amplifier 启动计算矩阵变换的矩阵应用程序并退出。

数据收集完毕后,Hotspots:Bottom-up 窗口将打开: 

 

 

 

Function - Call Stack 是热点数据的默认分组级别。单击箭头按钮可更改分组级别。

 

单击函数名称前面的加号以查看选定函数的调用栈。此时将显示选定函数的调用者,随后是前一个调用者的调用者,依此类推。

 

CPU Time 是热点分析结果中最受关注的数据列。CPU 时间仅根据运行时间计算。对于多线程,CPU 时间是累加的结果。

 

显示选中函数的完整栈信息。黄色亮条表示栈的当前项的CPU时间相对于该热点函数 CPU 时间的比重。

 

在分析运行时汇总数据。CPU Time 是热点函数 CPU 时间的总和。Elapsed time 是应用程序自始至终执行所用的时间。

 

分析结果

Hotspots:Bottom-up 窗口中所列第一个函数,也是占用时间最多的函数 algorithm_3。重点关注此函数,看看能否找到提升性能的方法。

双击 algorithm_3 函数查看其源代码。请注意,第 222 行代码占用的 CPU 时间最多。

这是了解 Source 窗格特性的好机会。下表详述查看热点分析数据时Source 窗格中一些可用的特性。

不可编辑的应用程序源代码。如果函数符号信息有效,则此部分将打开。执行时占用 CPU 时间最多的代码行将突出显示。

特定代码行占用的处理器时间。如果热点是系统函数,则默认情况下它所占用的时间计入调用该系统函数的用户函数。

热点浏览按钮,用于在执行时间较长的代码行之间切换。

源文件编辑器按钮,用于打开和编辑代码。

 

要优化该示例代码,可尝试为应用程序添加线程,使之能够更好地在多核处理器上执行。您必须确定,应用程序中何处进行多线程化可以得到最佳的性能。

Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.