主要内容

分析代码以提高性能

什么是侧写?

分析是一种测量运行代码所需时间的方法,并确定MATLAB®花的时间最多。在确定哪些功能消耗了最多的时间之后,您可以评估它们以获得可能的性能改进。您还可以对代码进行概要分析,以确定哪些代码行不能运行。在为代码开发测试时,确定哪些代码行不能运行,或将其作为帮助隔离代码中的问题的调试工具,是非常有用的。

您可以使用MATLAB分析器或编程方式使用配置文件函数。有关以编程方式分析代码的详细信息,请参见配置文件。如果您正在分析并行运行的代码,为获得最佳结果,请使用parallel Computing Toolbox™并行分析器。详细信息请参见并行代码分析(并行计算工具箱)

提示

过早优化的代码可能会变得不必要地复杂,而不会带来显著的性能提升。使您的第一个实现尽可能简单。然后,如果速度是个问题,可以使用概要来识别瓶颈。

分析你的代码

为了分析你的代码并提高它的性能,使用这个通用的过程:

  1. 在代码上运行分析器。

  2. 检查概要概要结果。

  3. 研究函数和单独的代码行。

    例如,您可能希望调查使用大量时间或调用最频繁的函数和代码行。

  4. 保存分析结果。

  5. 在代码中实现潜在的性能改进。

    例如,如果你有一个负载语句,则可以在循环中移动负载语句,以便只调用一次。

  6. 保存文件并运行清除所有。再次运行分析器并将结果与原始结果进行比较。

  7. 重复上述步骤以继续改进代码的性能。当您的代码将大部分时间花费在调用几个内置函数上时,您可能已经尽可能地优化了代码。

在代码上运行分析器

在一行代码上运行分析器:

  1. 方法打开剖析器应用程序Tab,然后在下面MATLAB,单击Profiler应用程序图标。你也可以打字概要文件查看器在命令窗口。

  2. 分析器Tab,在配置文件节中,在编辑框中输入要分析的代码。

    例如,创建一个函数solvelotka.m为MATLAB提供的Lotka-Volterra示例找到猎物和捕食者种群峰值:

    函数[preypeaks, orpeaks] = solvelotka(t0, tfinal, y0) [~,y] = ode23(@lotka,[t0 tfinal],y0);Preypeaks = calculatepeaks(y(:,1));calculatepeaks(y(:,2));[TF,P] = islocalmax(A);峰值= P(TF);结束
    在编辑框中输入此语句以分析solvelotka功能:
    [preypeaks, predatory peaks] = solvelotka(0,15,[20;20])

    如果您以前在当前MATLAB会话中分析了语句,您也可以从编辑框下拉列表中选择它。

  3. 点击运行与时间

    分析完成后,分析器将在概要摘要中显示结果。您分析的语句还显示为已在命令窗口中运行。

要分析在“编辑器”中打开的代码文件,请在编辑器选项卡,在运行部分中,选择运行>运行与时间。分析器对当前Editor选项卡中打开的代码文件进行概要分析,并在概要摘要中显示结果。

检查概要概要结果

在代码上运行分析器之后,概要文件摘要将显示关于代码总体执行的统计信息,并为每个调用的函数提供汇总统计信息。例如,下面的图像显示了solvelotka函数。

在概要文件摘要结果的顶部,火焰图显示MATLAB运行代码所花费的时间的可视化表示。在火焰图中,运行的每个函数都用一个柱形表示。用户定义函数显示为蓝色,MathWorks®函数显示为灰色。

图中的函数按层次顺序显示,父函数在图中的位置较低,子函数在图中的位置较高。横跨所标记图形的整个底部的条形概要总结表示运行的所有代码。图上条形图的宽度表示函数运行所花费的时间占总运行时间的百分比。

要查看实际的百分比和时间值以及完整的函数名称,请将鼠标悬停在图中的条形图上。若要显示关于某个函数的详细信息,包括关于各个代码行的信息,请单击表示该函数的栏。

火焰框架下面的功能表显示了与火焰图相似的信息。最初,函数是按照处理所需时间的顺序出现的。该表描述了各列的信息。

描述
函数名

被分析代码调用的函数的名称。

调用

被分析的代码调用函数的次数。

总时间

在函数中花费的总时间,以秒为单位。函数的时间包括花在子函数上的时间。分析器本身需要一些时间,这包括在结果中。对于运行时间无关紧要的文件,总时间可以为零。

自我的时间

在一个函数中花费的总时间(以秒为单位),不包括在任何子函数中花费的时间。Self time还包括分析过程中产生的一些开销。

总时间图

图形显示显示自我时间与总时间的比较。

若要按特定列对函数表进行排序,请单击列标题中的箭头。的箭头函数名列按字母顺序对函数排序。最初的结果是按顺序显示的总时间。若要显示有关函数的详细信息,包括有关个别代码行的信息,请单击函数名称。

研究函数和个别代码行

要在代码中找到潜在的改进,请在火焰图或函数表中寻找使用大量时间或调用最频繁的函数。单击函数名可显示关于该函数的详细信息,包括关于各个代码行的信息。例如,单击solvelotka > calculatepeaks函数。分析器显示函数的详细信息。

在页面顶部,在当前函数的名称旁边,Profiler显示父函数调用该函数的次数以及在该函数中花费的总时间。使用火焰图下面显示的链接在默认编辑器中打开函数,或将显示的结果复制到单独的窗口。

要返回配置文件摘要,请使用分析器选项卡,单击概要总结按钮。您也可以单击概要总结在火焰图底部的条。

一旦你单击了一个单独的函数,分析器将在以下部分显示额外的信息:

部分 细节
火焰图像

火焰图显示MATLAB花在运行轮廓函数上的时间的可视化表示。该图显示了被分析函数的层次结构,包括子函数(显示在当前函数上方)和父函数(显示在当前函数下方)。用户定义函数显示为蓝色(), MathWorks函数以灰色显示().

将鼠标悬停在图形中的条形图上,可以看到实际的百分比和时间值以及完整的函数名称。单击某功能栏,显示该功能的详细信息。

父母

调用被分析函数的函数列表,包括父函数调用被分析函数的次数。

单击列表中的函数名,可显示该函数的详细信息。

花时间最多的台词

所分析函数中使用最多处理时间的代码行列表。

单击代码行可在功能清单节,在其余函数代码的上下文中。

孩子们

被分析函数调用的所有函数的列表。

单击列表中的函数名,可显示该函数的详细信息。

代码分析器结果

所分析功能的问题和潜在改进的列表。

覆盖率结果

关于MATLAB在分析时执行的函数中代码行的代码覆盖率统计信息。

要为代码执行其他代码覆盖率分析,请参见收集语句和函数覆盖率指标的MATLAB源代码

功能清单

函数的源代码,如果是MATLAB代码文件。

对于每一行代码,功能清单包括这些列:

  • 每行代码的执行时间

  • MATLAB执行这行代码的次数

  • 行号。

    中的行号功能清单在默认编辑器中打开该函数。

  • 函数的源代码。文字的颜色表示如下:

    • 绿色-注释行

    • 黑色-执行的代码行

    • 灰色——未执行的代码行

默认情况下,分析器突出显示执行时间最长的代码行。高亮显示的颜色越深,执行的代码行就越长。要更改突出显示标准,请转到分析器Tab,在视图部分中,点击突出。从可用的高亮显示选项中选择。例如,要突出显示未运行的代码行,请选择非覆盖选择。

保存结果

若要在对代码进行改进后比较更改的影响,请保存分析结果。若要保存结果,请使用火焰图下方显示的链接将显示的结果复制到单独的窗口。

方法,还可以从分析器打印结果分析器选项卡,然后单击打印按钮。

在命令窗口中配置多条语句

在命令窗口中分析多条语句:

  1. 进入命令窗口并输入剖面上

  2. 输入并运行要分析的语句。

  3. 运行完所有语句后,键入配置文件了

  4. 通过键入打开分析器概要文件查看器。你也可以去应用程序Tab,然后在下面MATLAB,单击Profiler应用程序图标。

  5. 检查概要摘要结果。

配置应用

你可以配置你在App Designer中创建的应用。您还可以配置MathWorks产品附带的应用程序,例如信号处理工具箱™中包含的滤波器设计和分析工具。下载188bet金宝搏

配置应用:

  1. 方法打开剖析器应用程序Tab,然后在下面MATLAB,单击Profiler应用程序图标。你也可以打字概要文件查看器在命令窗口。

  2. 配置文件部分的分析器工具条,单击开始分析。确保在按钮右侧的编辑框中没有代码。

  3. 启动应用程序。

  4. 使用这款应用。

  5. 完成后,单击停止剖析在分析器工具条中。

  6. 检查概要摘要结果。

请注意

要在配置文件中排除应用程序启动过程,请反转步骤2和步骤3。换句话说,在点击之前启动应用程序开始分析

另请参阅

应用程序

功能

相关的话题