13.6 性能分析

Octave 支持在函数级别对代码执行进行性能分析。启用性能分析后,在运行 Octave 代码时,会记录对每个函数(包括内置函数、运算符、oct 和 mex 文件中的函数、Octave 代码中的用户定义函数以及匿名函数)的调用。之后,这些数据可以帮助分析代码行为,特别有助于找出代码中的"热点"——那些占用大量计算时间、最值得投入优化精力的部分。

性能分析的主要命令是 profile,可用于启动或停止分析器,也可用于随后查询收集的数据。数据以 Octave 数据结构的形式返回,可以通过其他例程或工具进行检查或进一步处理。

 
profile on
profile off
profile resume
profile clear
S = profile ("status")
T = profile ("info")

控制内置分析器。

profile on

启动分析器。之前收集的所有数据将被清除。

profile off

停止分析。收集的数据稍后可以通过 T = profile ("info") 检索和查看。

profile clear

清除所有收集的分析器数据并停止分析。

profile resume

重新启动分析而不清除旧数据。所有新收集的统计数据将添加到已有的数据中。

S = profile ("status")

返回一个包含分析器当前状态信息的结构体。目前唯一的字段是 ProfilerStatus,其值为 "on""off"

T = profile ("info")

以结构体 T 的形式返回收集的分析统计数据。扁平分析结果在 FunctionTable 字段中返回,这是一个结构体数组,每个元素对应一个被调用且存在分析统计数据的函数。此外,Hierarchical 字段包含层次化调用树。每个节点都有一个指向 FunctionTable 的索引,用于标识其对应的函数,以及该层级在调用树中的调用次数和耗时数据字段。

另请参阅: profshow, profexplore.

获取收集数据概况的一种简便方法是使用 profshow。该函数将 profile 返回的分析器数据作为输入,并输出一个扁平分析结果,例如:

 Function Attr     Time (s)        Calls
----------------------------------------
   >myfib    R        2.195        13529
binary <=             0.061        13529
 binary -             0.050        13528
 binary +             0.026         6764

这表明大部分运行时间花费在执行函数 ‘myfib’ 上,而一小部分时间用于评估列出的二元运算符。此外,还显示了该函数的调用次数,并且分析器记录了它是递归函数。

 
profshow (data)
profshow (data, n)
profshow ()
profshow (n)

显示扁平化的逐函数分析器结果。

打印出最关键的 n 个函数的分析器数据(执行时间、调用次数)。结果按每个函数的总耗时降序排列。如果未指定 n,则默认为 20。

输入 dataprofile ("info") 返回的结构体。如果未指定,profshow 将使用当前的分析数据集。

属性列显示 ‘R’ 表示递归函数,其他类型的函数则显示为空白。

另请参阅: profexplore, profile.

 
profexport (dir)
profexport (dir, data)
profexport (dir, name)
profexport (dir, name, data)

将分析器数据导出为 HTML。

data 中的分析数据导出到文件夹 dir 中的一系列 HTML 文件中。初始文件将是 data/index.html

如果指定了 name,它必须是一个字符串,包含所导出分析的"名称"。该名称会包含在 HTML 中。

输入 dataprofile ("info") 返回的结构体。如果未指定,profexport 将使用当前的分析数据集。

另请参阅: profshow, profexplore, profile.

 
profexplore ()
profexplore (data)

以交互方式浏览层次化分析器输出。

假设 data 是由 profile ("info") 返回的包含分析数据的结构体,该命令将打开一个交互式提示,可用于浏览调用树。输入 help 可获取可用命令列表。如果省略 data,则会调用 profile ("info") 并使用其返回值。

另请参阅: profile, profshow.


版权所有 © 2024-2026 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-4