Эффективное общее время для функции вызываемого абонента выше, чем для функции вызывающего абонента в intel-vtune

# #intel #intel-vtune

Вопрос:

У меня есть многопоточное приложение, и когда я запускаю в нем vtune-профилировщик на вкладке вызывающий абонент/вызываемый абонент, я вижу, что функция CPU Time: Total - Effective Time вызываемого абонента больше, чем функция вызывающего абонента CPU Time: Total - Effective Time .

например, функция вызывающего абонента — A

функция вызываемого абонента — B (никто не вызывает B, кроме A)

Функция Процессорное время: Всего
Эффективное Время
A 54%
B 57%

Насколько я понимаю, Cpu Time: Total это сумма CPU time: self time of all the callee's of that function . По этому определению не должно Cpu Time: Total A быть больше, чем B ?

Что я здесь упускаю?

Ответ №1:

  1. Возможно, случилось так, что функция B вызывается какой-то другой функцией вместе с A, поэтому должна быть эта проблема.
  2. Профилировщик Intel VTune работает путем выборки, и числа менее точны в течение короткого времени выполнения. Если ваше приложение работает очень недолго, вы можете рассмотреть возможность использования разрешения на несколько запусков в VTune или увеличения времени выполнения.
  3. Кроме того, профилировщик Intel VTune иногда округляет цифры, поэтому это может не дать идеального результата, но разница очень мала, например, 0,1%, но в вашем вопросе разница составляет 3%, так что это не будет причиной этого.

Комментарии:

1. Может ли быть причиной то, что это многопоточное приложение? (Всего создано 131 поток, как показано на странице сводки, 56 потоков из них вызывают функцию A, которая вызывает функцию B). Я попробовал с одним потоком и обнаружил, что могу получить вызывающего абонента в правильном порядке, который ожидается (для данного конкретного случая).