在 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: TotalCPU time: self + time of all the callee's of that function 的总和。根据该定义,ACpu Time: Total 不应大于 B

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

    可能是函数 B 和 A 一起被其他函数调用,所以一定有这个问题。

    英特尔 VTune 分析器通过采样工作,并且数字在短期运行时不太准确。如果您的应用程序运行时间很短,您可以考虑在 VTune 中使用允许多次运行或增加运行时间。

    此外,英特尔 VTune Profiler 有时会对数字进行四舍五入,因此它可能无法给出理想的结果,但差异非常小,例如 0.1%,但在您的问题中,差异为 3%,因此这不是原因。

【讨论】:

可能是因为这是一个多线程应用程序吗? (如摘要页面所示,总共创建了 131 个线程,这些调用函数 A 调用函数 B 的线程有 56 个)。我尝试使用单线程,发现我能够以预期的正确顺序获取调用者被调用者(对于这种特殊情况)。

以上是关于在 intel-vtune 中,被调用函数的有效总时间高于调用函数的总时间的主要内容,如果未能解决你的问题,请参考以下文章

用keil软件编辑时,总提示函数重复定义是怎么回事

形参和实参

C语言中,其他文件可否调用文件中的static函数?

C语言中总是从main函数开始执行,那执行好main函数后,是按照从上到下的顺序执行吗

NodeJS - 对承诺函数的无限调用

减少功能有效,但需要太长时间,vue