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

profile

探查函数的执行时间

说明

使用探查器来跟踪执行时间。了解您的 MATLAB® 代码的执行时间有助于对其进行调试和优化。有关探查器用户界面的信息,请参阅探查以提升性能

示例

profile action 探查函数的执行时间。使用 action 可启动、停止和重新启动探查器,并查看或清除探查统计信息。例如,profile on 可以启动探查器。

示例

profile action option1 ... optionN 使用指定的选项启动或重新启动探查器。例如,profile resume -history 重新启动探查器,并记录函数调用的顺序。

示例

profile option1 ... optionN 设置指定的探查器选项。如果探查器已打开且您指定了任一选项,则 MATLAB 会引发一个错误。要更改选项,应先指定 profile off,然后再指定新的选项。

示例

p = profile('info') 使探查器停止并显示包含结果的结构体。要访问 profile 生成的数据,请使用此语法。

示例

s = profile('status') 返回包含探查器状态信息的结构体。

示例

全部折叠

MATLAB Online™ 不支持此示例。

打开探查器,并调用 magic 函数。

profile on
n = 100;
M = magic(n);

在“探查器”窗口中查看结果。

profile viewer

将结果保存为 HTML。默认情况下,profsave 将文件保存到当前工作文件夹中的 profile_results 子文件夹。

profsave

使用此主函数和局部函数创建文件 myFunction.m

function c = myFunction(a,b)
c = sqrt(square(a)+square(b));
end

function y = square(x)
y = x.^2;
end

打开探查器,并启用函数调用历史记录选项。探查对 myFunction 函数的调用。

profile on -history
a = rand(5);
b = rand(5);
c = myFunction(a,b);

保存探查结果。

p = profile('info')
p = 

      FunctionTable: [2x1 struct]
    FunctionHistory: [2x6 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

显示函数调用历史记录。

p.FunctionHistory
ans =

     0     0     1     0     1     1
     1     2     2     2     2     1

通过迭代器调用历史记录来显示函数进入和退出的信息。

numEvents = size(p.FunctionHistory,2);
for n = 1:numEvents
    name = p.FunctionTable(p.FunctionHistory(2,n)).FunctionName;
    
    if p.FunctionHistory(1,n) == 0
        disp(['Entered ' name]);
    else
        disp(['Exited ' name]);
    end
end
Entered myFunction
Entered myFunction>square
Exited myFunction>square
Entered myFunction>square
Exited myFunction>square
Exited myFunction

将函数调用历史记录设置为默认值。

profile -nohistory

打开探查器,并调用 magic 函数。

profile on
n = 100;
M = magic(n);

将结果保存到 MAT 文件

p = profile('info')
save myprofiledata p
p = 

      FunctionTable: [1x1 struct]
    FunctionHistory: [2x2 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'off'
        HistorySize: 1000000

输入参数

全部折叠

探查器的管制选项,指定为以下选项之一。

选项结果
on

启动探查器,并清除以前记录的探查统计信息。

off

停止探查器。

resume

重新启动探查器,而不清除以前记录的统计信息。

clear

清除记录的统计信息。

viewer

停止探查器并在“探查器”窗口中显示结果。有关详细信息,请参阅探查以提升性能。探查器用户界面在 MATLAB Online 中不可用。

info

停止探查器并返回包含结果的结构体。

status

返回包含探查器状态信息的结构体。

一个或多个探查选项,指定为字符向量,这些字符向量对应于历史记录和时钟选项表中的有效设置。您可以使用以下语法之一指定这些选项中的一个或多个:

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

如果您更改探查器设置,则当停止探查器或清除统计信息时,这些设置会保留。要恢复到默认探查器行为,请手动将选项设置为默认设置或启动一个新的 MATLAB 会话。

历史记录选项

选项结果
-history

记录函数调用的确切顺序,包括函数进入和退出事件。默认情况下,-history 选项未启用。

-historysize integer

指定要记录的函数进入和退出事件的数目。默认情况下,historysize 为 1,000,000。如果函数调用的次数超出指定的 historysize,则 profile 函数除了记录调用顺序,还会继续记录探查统计信息。

-nohistory

默认设置。禁用记录函数调用的确切顺序。profile 函数收集所有其他探查统计信息。

时钟选项

选项结果
-timer 'performance'

默认设置。使用操作系统提供的时钟挂钟时间来测量性能。

-timer 'processor'

直接使用来自处理器的挂钟时间。有时您的省电设置或多处理器的使用会影响该测量。

-timer 'real'

使用操作系统报告的系统时间。此选项是计算成本最高的测量,对被探查代码的性能影响最大。更改操作系统上的时钟时间会影响此测量。

-timer 'cpu'

使用计算机时间并跨所有线程汇总时间。此测量与挂钟时间不同。例如,pause 函数的计算机时间通常较小,但挂钟时间会考虑实际暂停时间,后者较大。

输出参数

全部折叠

探查器统计信息,以包含以下字段的结构体形式返回。

字段

说明

FunctionTable

函数统计信息,以结构体数组形式返回。数组中的每个结构体都包含有关探查期间所调用的一个函数或局部函数的信息。每个结构体包含以下字段:

  • CompleteName - FunctionName 的完整路径。

  • FunctionName - 函数的名称。如果函数是局部函数,FunctionName 包括主函数。

  • FileName - FunctionName 的完整路径(包含文件扩展名)。如果函数是局部函数,FileName 是主函数的完整路径。

  • Type - 函数的类型。例如,MATLAB 函数、MEX 函数、局部函数或嵌套函数。

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

  • TotalTime - 函数及其子函数花费的总时间。

  • TotalRecursiveTime - MATLAB 不再使用此字段。

  • Children - 有关该函数调用的函数的信息。数组中的每个条目包含一个子函数的相关信息。结构体包含以下字段:

    • Index - FunctionTable 中子函数信息结构体的索引。

    • NumCalls - 被探查代码调用子函数的次数。

    • TotalTime - 子函数花费的总时间。

  • Parents - 有关 FunctionName 的父函数的信息。数组中的每个结构体包含一个父函数的相关信息。结构体包含以下字段:

    • Index - FunctionTable 中父函数信息结构体的索引。

    • NumCalls - 父函数调用此函数的次数。

  • ExecutedLines - 包含被探查函数的逐行详细信息的数组。

    • 第 1 列 - 执行的代码行在 FileName 中的行号。

    • 第 2 列 - 被探查代码执行该代码行的次数。

    • 第 3 列 - 该代码行花费的总时间。第 3 列条目的总和不一定等于 TotalTime

  • IsRecursive - 指示函数是否递归的指示符。如果值为 1 (true),则函数是递归的。如果值为 0 (false),则函数是非递归的。

  • PartialData - 指示探查统计信息是否不完全的指示符。如果值为逻辑值 1 (true),则在探查期间曾修改函数。例如,如果您编辑了函数或从内存中将其清除。在这种情况下,探查器仅收集在函数修改之前的数据。

FunctionHistory

函数调用历史记录,以数组形式返回。

  • 第 1 行 - 指示函数进入或退出的指示符。探查器用 0 记录函数进入,用 1 记录函数退出。

  • 第 2 行 - FunctionTable 中函数信息结构体的索引。

ClockPrecision

profile 函数的时间测量精度,以 double 形式返回。

ClockSpeed

估计的 CPU 时钟速度,以 double 形式返回。

Name

探查器的名称,以字符数组形式返回。

Overhead

保留供将来使用。

探查器状态,以包含以下字段的结构体形式返回。

字段

默认值

ProfilerStatus

'on''off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

'performance''processor''cpu''real'

'performance'

HistoryTracking

'on''off'

'off'

HistorySize

整数

1000000

局限性

  • 如果被探查代码使用间接(或相互)递归,则 MATLAB 探查器可能会返回不准确的结果。如果递归是直接递归(单一函数调用自身),则探查器返回对该函数的各次非递归调用的总时间。要确定被探查代码中的函数是否为递归(直接或间接),请检查 FunctionTable 条目中 IsRecursive 字段的值。

提示

  • 要打开探查器用户界面,请使用 profile viewer 语法或参阅探查以提升性能。探查器用户界面在 MATLAB Online 中不可用。

  • 自 MATLAB R2015b 起,默认计时器是 'performance'。在早期版本的 MATLAB 中,默认探查器计时器为 'cpu',它测量计算时间而非挂钟时间。

在 R2006a 之前推出