【问题标题】:Why are deterministic profilers called 'deterministic'?为什么确定性分析器被称为“确定性”?
【发布时间】:2016-06-28 14:23:46
【问题描述】:

我目前正在使用 cProfile(以及其他)在 Python 中执行一些分析任务。在documentation 中它说:

cProfile 和 profile 提供 Python 程序的确定性分析

在分析过程中,对于整个程序以及单个函数,我使用 cProfile 得到的结果略有不同。这很好,我想我至少理解其中的一些原因——例如,一些操作系统任务可能在后台运行并减慢我的程序。毕竟,cProfile 确实是实时运行的,而不是 CPU 时间。

但是,它仍然提出了一个问题:如果不是每次都产生相同的结果,为什么称为确定性分析?

【问题讨论】:

标签: python profiling profiler deterministic


【解决方案1】:

问题在documentation

27.4.5。什么是确定性分析?

确定性分析旨在反映这样一个事实:所有函数调用、函数返回和异常事件都受到监控,并为这些事件之间的间隔(在此期间用户的代码正在执行)进行精确计时。相比之下,统计分析(不是由这个模块完成的)随机采样有效指令指针,并推断出时间花费在哪里。后一种技术传统上涉及较少的开销(因为不需要检测代码),但仅提供时间花费的相对指示。

在 Python 中,由于在执行期间有一个解释器处于活动状态,因此执行确定性分析不需要存在已检测代码。 Python 自动为每个事件提供一个钩子(可选回调)。此外,Python 的解释特性往往会增加大量执行开销,以至于确定性分析往往只会在典型应用程序中增加少量处理开销。结果是确定性分析并不那么昂贵,但提供了有关 Python 程序执行的大量运行时统计信息。

调用计数统计可用于识别代码中的错误(令人惊讶的计数),并识别可能的内联扩展点(高调用计数)。内部时间统计可用于识别应仔细优化的“热循环”。累积时间统计应用于识别算法选择中的高级错误。请注意,此分析器中对累积时间的异常处理允许将算法的递归实现的统计数据直接与迭代实现进行比较。

这意味着它不依赖于某些采样,并且应该在相同的条件下重现数据。

【讨论】:

  • 啊,所以术语“确定性”只是用来将其与统计分析器区分开来?我想这只是一个语义问题,但是“确定性”分析器可以为相同的输入返回不同的结果这一事实只会让我误会了。如果 cProfile 实际测量 CPU 时间而不是实时,那将更有意义。哦,好吧.....但是还是感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多