本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

探查以提升性能

什么是探查功能?

探查是一种方法,可衡量程序在哪些位置耗用了时间。在确定哪些函数耗用大部分时间后,您可以对它们进行评估以确定可能的性能改进。另外,您还可以将代码用作调试工具来进行探查。例如,确定 MATLAB® 不执行哪些代码行可帮助您开发执行该代码的测试用例。如果探查时在文件中遇到错误,您可以查看哪部分已运行,哪部分未运行,以帮助您挑出问题。

提示

过早优化的代码可能带来无谓的复杂性,而不会显著改善性能。第一次实施应尽可能简单。此后,如果速度成为问题,请使用探查功能来找出瓶颈所在。

您可以使用 MATLAB 探查器探查代码。探查器是一个用户界面,以 profile 函数返回的结果为依据。如果您要探查并行运行的代码,为获得最佳结果,请使用 Parallel Computing Toolbox™ 并行探查器。有关详细信息,请参阅Profiling Parallel Code (Parallel Computing Toolbox)。

探查过程及准则

您可以按照以下常规过程来改善代码性能:

  1. 对您的代码运行探查器。

  2. 在探查器摘要报告中,查找使用了大量时间或调用最频繁的函数。

  3. 查看这些函数的探查详细信息报告并查找使用最多时间或调用最频繁的代码行。

    考虑保留一份第一个详细信息报告的副本,以作为比较依据。在更改代码后,您可以再次运行探查器并比较报告。

  4. 确定是否可对这些代码行进行更改以改进性能。

    例如,如果循环中有一个 load 语句,您可以将 load 语句移到循环外以便仅调用一次。

  5. 在您的代码中实施可能的性能改进。保存文件并运行 clear all。再次运行探查器并将结果与原始报告比较。

    如果对完全相同的代码进行两次探查,每次获得的结果可能略有不同,这是与代码无关的固有时间波动所导致的。

  6. 要继续改进代码性能,请重复执行这些步骤。

如果代码用大部分时间来调用少数内置函数,则表示您可能已对代码进行了最大程度的优化。

使用探查器

要探查 MATLAB 代码文件或代码行,请执行以下操作:

  1. 使用下列方法之一打开探查器:

    • 在命令行窗口中,键入 profile viewer

    • 主页选项卡上的代码部分中,点击 运行并计时

    • 在编辑器中,在编辑器选项卡的运行部分中,点击 运行并计时。如果使用此方法,探查器会自动对当前“编辑器”选项卡中的代码进行探查。如果这是您要探查的代码,请跳至步骤 4。

  2. 运行此代码字段中,键入要运行的语句。

    例如,您可以运行随 MATLAB 一起提供的 Lotka-Volterra 示例:

    [t,y] = ode23('lotka',[0 2],[20;20])

    如果在当前 MATLAB会话中,您之前对该语句进行了探查,则请从运行此代码列表中选择该语句。MATLAB 会自动开始探查此代码,您可以跳至步骤 4。

  3. 点击开始探查

    在探查器运行时,探查时间指示器呈绿色,所报告的秒数也会增加。探查时间指示器显示在探查器窗口的右上方。

    当探查器运行完毕后,探查时间指示器将变为黑色,并显示探查器运行的时长。所探查的语句会在命令行窗口中显示为已执行的状态。

    此时间不是运行语句所用的实际时间。它是从您点击开始探查一直到探查停止所用的时间。如果报告的时间与您预期的时间差别很大(例如,一个简单语句花费数百秒),则探查时间比所需的时间长。此时间与探查摘要报告统计信息中报告的时间不匹配,默认情况下后者基于 performance 时钟时间。要查看使用不同类型时钟的探查统计信息,请使用 profile 函数而非探查器。

  4. 探查完毕后,探查摘要报告随即显示在探查器窗口中。有关详细信息,请参阅探查摘要报告

在命令行窗口中探查多个语句

要探查多个语句,请执行以下操作:

  1. 在探查器中,点击开始探查。确保运行此代码字段中不显示任何代码。

  2. 在命令行窗口中,输入并运行您要探查的语句。

  3. 运行所有语句后,在探查器中点击停止探查,并查看探查摘要报告。

探查用户界面

您可以对用户界面运行探查器,例如 Signal Processing Toolbox™ 中包含的 Filter Design and Analysis 工具。您也可以探查您所创建的界面,例如使用 GUIDE 构建的界面。

要探查用户界面,请执行以下操作:

  1. 在探查器中,点击开始探查。确保运行此代码字段中不显示任何代码。

  2. 启动用户界面。

  3. 使用该界面。完成后,在探查器中点击停止探查,并查看探查器摘要报告。

注意

要在探查中排除用户界面启动过程,请颠倒步骤 1 和 2。也就是说,在点击开始探查之前启动用户界面。

探查摘要报告

探查摘要报告显示有关函数的总体执行情况的统计信息,并提供调用的每个函数的摘要统计信息。下图显示的是 Lotka-Volterra 模型的探查摘要报告。请参阅使用探查器

探查摘要报告会显示以下信息。

说明
函数名称

探查的代码所调用的所有函数列表。起初,这些函数按处理它们时所花的时间排序。

调用

被探查的代码调用函数的次数。

总时间

函数(包括访问的所有子函数)所耗费的总时间(以秒为单位)。函数所耗用的时间包括子函数所耗费的时间。探查器本身会耗用一些时间,该时间也包括在结果中。对于运行时间无足轻重的文件来说,总时间可以是零。

自用时间

函数所耗费的总时间,不包括任何子函数所耗用的时间(以秒为单位)。自用时间还包括探查过程产生的一些开销。

总时间图

以图形方式显示自用时间与总时间的对比情况。

在摘要报告中,您可以:

  • 通过点击打印按钮 打印该报告。

  • 通过点击函数名称列中特定函数的名称,可获取有关该函数的更多详细信息。有关详细信息,请参阅探查详细信息报告

  • 通过点击给定列的名称,可以按该列进行排序。要按字母顺序对这些函数进行排序,请点击函数名称链接。最初,结果会按总时间顺序显示。

探查详细信息报告

探查详细信息报告可显示在探查期间 MATLAB 调用的函数的探查结果。

要打开探查详细信息报告,请点击探查摘要报告中的函数名。要从探查详细信息报告返回到探查摘要报告,请点击探查窗口工具栏中的

探查详细信息报告标题中包含此信息。

  • 探查函数的名称

  • 父函数调用所探查的函数的次数

  • 所探查函数花费的时间

  • 在默认编辑器中打开函数的链接

  • 将报告复制到单独窗口的链接。保存报告副本有助于在您更改文件后,比较函数更改的影响。

要指定探查详细信息报告包括哪些部分,请选中报告顶部的复选框,然后点击刷新按钮。使用相应复选框从这些选项中进行选择。

显示选项详细信息
显示父函数

显示有关父函数的信息,且包含指向其详细信息报告的链接。要打开父函数的探查详细信息报告,请点击该函数的名称。

显示正在执行的代码行

列出所探查函数中耗用最长处理时间的行。

显示子函数

列出所探查函数调用的所有函数。要打开子函数的探查详细信息报告,请点击该子函数的名称。

显示代码分析器结果

显示有关所探查函数的问题以及可能的改进信息。

显示文件范围

显示有关 MATLAB 在探查时所执行的函数中的代码行的统计信息。

显示函数列表

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

对于每行代码,函数列表都包含以下列:

  • 每行代码的执行时间

  • MATLAB 执行该代码行的次数

  • 行号

  • 函数的源代码。文本颜色指示以下内容:

    • 绿色 - 注释行

    • 黑色 - 已执行的代码行

    • 灰色 - 未执行的代码行

默认情况下,探查详细信息报告高亮显示执行时间最长的代码行。高亮显示的颜色越深,执行代码行所耗用的时间越长。要更改高亮显示条件,请使用颜色高亮显示代码下拉列表。

另请参阅

相关主题