分析代码以提高性能
分析是什么?
分析是一种测量运行代码所需时间的方法,并确定MATLAB®花的时间最多。在确定哪些函数消耗的时间最多之后,可以对它们进行评估,以获得可能的性能改进。您还可以对代码进行概要分析,以确定哪些代码行不能运行。在为代码开发测试或作为调试工具帮助隔离代码中的问题时,确定哪些代码行不能运行是很有用的。
您可以使用MATLAB Profiler交互地分析代码,也可以编程地使用配置文件
函数。有关以编程方式分析代码的更多信息,请参见配置文件
.如果您正在分析并行运行的代码,为了获得最佳结果,请使用并行计算工具箱™并行分析器。有关详细信息,请参见分析并行代码(并行计算工具箱).
提示
过早优化的代码可能会变得不必要地复杂,而不会带来显著的性能提升。使您的第一个实现尽可能简单。然后,如果速度是一个问题,使用分析来识别瓶颈。
概要文件代码
要分析你的代码并提高它的性能,使用以下通用过程:
在代码上运行剖析器。
检查概要总结结果。
研究函数和个别代码行。
例如,您可能想要调查使用大量时间或最频繁调用的函数和代码行。
保存分析结果。
在代码中实现潜在的性能改进。
例如,如果你有一个
负载
语句中,您可能能够移动负载
语句,以便只调用一次。保存文件并运行
清除所有
.再次运行剖析器,并将结果与原始结果进行比较。重复上述步骤以继续改进代码的性能。当您的代码花费大部分时间调用几个内置函数时,您可能已经尽可能地优化了代码。
在代码上运行分析器
在一行代码上运行Profiler:
打开剖析器应用程序选项卡,在MATLAB点击Profiler应用图标。你也可以打字
概要文件查看器
在命令窗口中。去分析器选项卡,并在配置文件部分,在编辑框中输入要概要分析的代码。
例如,创建一个函数
solvelotka.m
为MATLAB提供的Lotka-Volterra示例找到了猎物和捕食者的数量峰值:函数[preypeaks, prerorpeaks] = solvelotka(t0, tfinal, y0) [~,y] = ode23(@lotka,[t0 tfinal],y0);preypeaks = calculatepeaks (y (: 1));predatorpeaks = calculatepeaks (y (:, 2));end function peaks = calculatepeaks(A) [TF,P] = islocalmax(A);山峰= P (TF);结束
solvelotka
功能:[preypeaks, predatorpeaks] = solvelotka(0, 15日[20;20])
如果您之前分析了当前MATLAB会话中的语句,您也可以从编辑框下拉列表中选择它。
点击运行时间和.
当分析完成时,分析器将在概要摘要中显示结果。您分析的语句还显示为已在命令窗口中运行。
要对在编辑器中打开的代码文件进行概要分析,请在编辑器选项卡,运行部分中,选择运行>运行时间和.剖析器剖析当前编辑器选项卡中打开的代码文件,并在剖析摘要中显示结果。
检查概要文件总结结果
在代码上运行Profiler之后,Profile Summary会显示关于代码总体执行的统计信息,并为每个调用的函数提供汇总统计信息。例如,下图显示了的概要摘要solvelotka
函数。
在概要摘要结果的顶部,火焰图显示了MATLAB运行代码所花费的时间的可视化表示。运行的每个函数都用火焰图中的条表示。用户定义函数显示为蓝色,MathWorks®函数显示为灰色。
图中的函数按层次顺序显示,父函数在图中位置较低,子函数在图中位置较高。横越整个图表底部的条形概要总结表示运行的所有代码。图中竖条的宽度表示函数运行所用的时间占总运行时间的百分比。
要查看实际的百分比和时间值以及完整的函数名,请将鼠标悬停在图中的工具条上。若要显示有关函数的详细信息,包括有关个别代码行的信息,请单击表示该函数的栏。
火焰帧下面的函数表显示了与火焰图类似的信息。最初,函数按处理时间的顺序出现。该表描述了每列的信息。
列 | 描述 |
---|---|
函数名 | 被分析代码调用的函数的名称。 |
调用 | 被分析的代码调用函数的次数。 |
总时间 | 在函数中花费的总时间,以秒为单位。函数的时间包括花在子函数上的时间。Profiler本身需要一些时间,这包含在结果中。对于运行时间无关紧要的文件,总时间可以为零。 |
自我的时间 | 在函数中花费的总时间(以秒为单位),不包括在任何子函数中花费的时间。自我时间还包括分析过程产生的一些开销。 |
总时间的情节 | 显示自我时间与总时间比较的图形显示。 |
要按特定列对函数表进行排序,请单击列标题中的箭头。例如,单击中的箭头函数名列按字母顺序对函数进行排序。最初的结果是按顺序显示的总时间.若要显示有关函数的详细信息,包括有关个别代码行的信息,请单击函数名。
研究函数和单个代码行
要在代码中发现潜在的改进,请在火焰图或函数表中查找使用大量时间或最频繁调用的函数。单击函数名可显示关于该函数的详细信息,包括关于各个代码行的信息。例如,单击solvelotka > calculatepeaks
函数。Profiler显示函数的详细信息。
在页面顶部,在当前函数的名称旁边,Profiler显示父函数调用函数的次数和在函数中花费的总时间。使用火焰图下方显示的链接在默认编辑器中打开函数,或将显示的结果复制到单独的窗口中。
要返回配置文件摘要,请在分析器选项卡上,单击概要总结按钮。您也可以单击概要总结条底部的火焰图。
一旦你点击了一个单独的函数,Profiler会在以下部分显示额外的信息:
部分 | 细节 |
---|---|
火焰图像 | 火焰图形显示可视化表示的时间用MATLAB运行的轮廓函数。该图显示了被分析函数的层次结构,包括子函数(显示在当前函数的上方)和父函数(显示在当前函数的下方)。用户定义函数以蓝色显示(), MathWorks函数显示为灰色(). 将鼠标悬停在图中的工具条上,可以看到实际的百分比和时间值以及完整的函数名。单击表示功能的栏,可显示该功能的详细信息。 |
父母 | 调用分析函数的函数列表,包括父函数调用分析函数的次数。 单击列表中的函数名称,可显示该函数的详细信息。 |
花时间最多的台词 | 分析函数中使用最多处理时间的代码行列表。 单击代码行可以在功能清单部分,在其余函数代码的上下文中。 |
孩子们 | 被分析函数调用的所有函数的列表。 单击列表中的函数名称,可显示该函数的详细信息。 |
代码分析器的结果 | 分析函数的问题和潜在改进的列表。 |
覆盖率结果 | 关于MATLAB在分析时执行的函数中代码行的代码覆盖率统计信息。 要打开分析器覆盖率报告,在“当前文件夹”浏览器中,导航到包含分析代码的文件夹。右键单击留白,然后选择报告>覆盖率报告. 要为代码执行额外的代码覆盖分析,请参见生成HTML格式的代码覆盖率报告. |
功能清单 | 函数的源代码,如果它是一个MATLAB代码文件。 对于每一行代码,功能清单包括这些列:
默认情况下,Profiler突出显示执行时间最长的代码行。高亮显示的颜色越深,代码行执行的时间越长。要更改高亮显示标准,请转到分析器选项卡,并在视图部分中,点击突出.从可用的高亮显示选项中选择。例如,要突出显示未运行的代码行,请选择 |
保存您的结果
在对代码进行改进之后,要比较更改的影响,请保存分析结果。要保存结果,请使用火焰图下方的显示链接将显示的结果复制到单独的窗口。
还可以从分析器打印结果分析器选项卡,并单击打印按钮。
在命令窗口中配置多条语句
要在命令窗口中分析多个语句:
转到命令窗口并键入
剖面上
.输入并运行您想要分析的语句。
运行所有语句后,键入
配置文件了
.通过键入打开Profiler
概要文件查看器
.你也可以去应用程序选项卡,在MATLAB,单击Profiler应用程序图标。检查概要摘要结果。
概要文件应用程序
你可以配置你在App Designer中创建的应用。您还可以分析MathWorks产品附带的应用程序,例如信号处理工具箱™中包含的滤波器设计和分析工具。2022世界杯八强谁会赢?
配置一个应用程序。
打开剖析器应用程序选项卡,在MATLAB点击Profiler应用图标。你也可以打字
概要文件查看器
在命令窗口中。在配置文件部分,单击开始分析.确保按钮右侧的编辑框中没有代码。
启动应用程序。
使用这个应用程序。
完成后,单击停止剖析在分析器工具条中。
检查概要摘要结果。
请注意
要在配置文件中排除应用程序启动过程,请逆转步骤2和步骤3。换句话说,在点击之前启动应用程序开始分析.