Octave 支持在函数级别对代码执行进行性能分析。启用性能分析后,在运行 Octave 代码时,会记录对每个函数(包括内置函数、运算符、oct 和 mex 文件中的函数、Octave 代码中的用户定义函数以及匿名函数)的调用。之后,这些数据可以帮助分析代码行为,特别有助于找出代码中的"热点"——那些占用大量计算时间、最值得投入优化精力的部分。
性能分析的主要命令是 profile,可用于启动或停止分析器,也可用于随后查询收集的数据。数据以 Octave 数据结构的形式返回,可以通过其他例程或工具进行检查或进一步处理。
on ¶off ¶resume ¶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’ 上,而一小部分时间用于评估列出的二元运算符。此外,还显示了该函数的调用次数,并且分析器记录了它是递归函数。
(data) ¶(data, n) ¶() ¶(n) ¶显示扁平化的逐函数分析器结果。
打印出最关键的 n 个函数的分析器数据(执行时间、调用次数)。结果按每个函数的总耗时降序排列。如果未指定 n,则默认为 20。
输入 data 是 profile ("info") 返回的结构体。如果未指定,profshow 将使用当前的分析数据集。
属性列显示 ‘R’ 表示递归函数,其他类型的函数则显示为空白。
另请参阅: profexplore, profile.
(dir) ¶(dir, data) ¶(dir, name) ¶(dir, name, data) ¶将分析器数据导出为 HTML。
将 data 中的分析数据导出到文件夹 dir 中的一系列 HTML 文件中。初始文件将是 data/index.html。
如果指定了 name,它必须是一个字符串,包含所导出分析的"名称"。该名称会包含在 HTML 中。
输入 data 是 profile ("info") 返回的结构体。如果未指定,profexport 将使用当前的分析数据集。
另请参阅: profshow, profexplore, profile.
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4