在分析时,向呼叫者累积被叫时间的正确(或好)方法是什么?

时间:2011-05-03 00:59:47

标签: lua profile

当您使用递归函数分析代码时,决定如何累积在callees中花费的时间直到他们的调用者变得棘手。如果您分析以下代码(Lua):

function a(n)
  wait(10)
  if n > 0 then
    a(n-1)
  end
end

a(1)

并且,为了进行分析,只有行wait(10)需要花费时间,应该将哪个子时间归因于行a(n-1)

配置文件的两个不错的属性是:

  1. 函数的子时间应该是其行的子时间的总和(同样适用于自己的时间)
  2. 如果您在调用os.clock()(或等效的)
  3. 中包裹该行时,行的子时间和自身时间的总和将是您所测量的总和

    如果a(n-1)的子时间为0,则得到(1),但不得(2)。如果a(n-1)的子时间为10,则得到(2),但不得得(1)。

    我读过,但可能不理解,this paper about gprof。据我所知,他们同意这是一个棘手的问题,他们的解决方案会给a(n-1)一个0的孩子时间。我不确定它如何在a()调用{b()的情况下起作用a() 1}}调用{{1}}。

    有没有人能够了解0或10是否是更好的答案?为什么?或者,更好的是,有另一个解决方案,尊重(1)和(2)?

1 个答案:

答案 0 :(得分:0)

Graham,Kessler和McCusick的

This paper about gprof描述了

  • gprof一般
  • 循环检测和循环时的时间传播方法