在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间
Posted
技术标签:
【中文标题】在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间【英文标题】:Effective total time for a callee function is higher than that of caller function in intel-vtune 【发布时间】:2021-12-01 17:33:23 【问题描述】:我有一个多线程应用程序,当我在其上运行 vtune-profiler 时,在调用者/被调用者选项卡下,我看到被调用者函数的 CPU Time: Total - Effective Time
大于调用者函数的 CPU Time: Total - Effective Time
。
例如。 调用函数 - A
被调用函数 - B(没有人调用 B 但 A)
Function | CPU time: Total |
---|---|
- | Effective Time |
A | 54% |
B | 57% |
我的理解是Cpu Time: Total
是CPU time: self
+ time of all the callee's of that function
的总和。根据该定义,A
的 Cpu Time: Total
不应大于 B
?
我在这里错过了什么?
【问题讨论】:
【参考方案1】:可能是函数 B 和 A 一起被其他函数调用,所以一定有这个问题。
英特尔 VTune 分析器通过采样工作,并且数字在短期运行时不太准确。如果您的应用程序运行时间很短,您可以考虑在 VTune 中使用允许多次运行或增加运行时间。
此外,英特尔 VTune Profiler 有时会对数字进行四舍五入,因此它可能无法给出理想的结果,但差异非常小,例如 0.1%,但在您的问题中,差异为 3%,因此这不是原因。
【讨论】:
可能是因为这是一个多线程应用程序吗? (如摘要页面所示,总共创建了 131 个线程,这些调用函数 A 调用函数 B 的线程有 56 个)。我尝试使用单线程,发现我能够以预期的正确顺序获取调用者被调用者(对于这种特殊情况)。以上是关于在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间的主要内容,如果未能解决你的问题,请参考以下文章