刚刚阅读了论文(再次),让我试着解释一下.
假设它以100Hz采样,除非因为IO或某些其他原因阻止了进程.每个样本都记录了PC,它具有某种功能.该函数中的样本计数递增.
因此,在运行结束时,如果有(例如)1000个样本,则表示总执行时间(仅CPU)为10秒.如果例程B记录了500个这样的样本,那意味着它的总执行时间是总的1/2或5秒.这是它的自我时间,因为PC在其中.这并不能说明平均执行需要多长时间.要说明这一点,你需要知道它被调用了多少次.它也不包括在被监禁者中度过的时间.
使用-pg标志编译代码时,会在每个例程的入口代码中插入一个特殊调用.这注意到输入了例程B,并且它注意到它是从例程A中的调用站点调用的.有一个表,由该调用站点索引,可以计算该调用.所以最后,gprof可以告诉B总共调用了多少次,其中有多少来自A.
为了得到B的平均自我时间,它的总自我时间除以它被调用的次数.
为了得到例程A的总累积时间(自己加上被调用者),gprof需要A的自身时间加上它调用每个从属例程B的总次数乘以B的平均累积时间.那么这个数字是除以对A的调用总数,得到A的平均累计时间.
听起来不错,直到递归进入图片,在那里它变得更加混乱.
这一切都非常聪明,正如作者所指出的那样,充满了警告.
| 归档时间: |
|
| 查看次数: |
7320 次 |
| 最近记录: |