# #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:
- Возможно, случилось так, что функция B вызывается какой-то другой функцией вместе с A, поэтому должна быть эта проблема.
- Профилировщик Intel VTune работает путем выборки, и числа менее точны в течение короткого времени выполнения. Если ваше приложение работает очень недолго, вы можете рассмотреть возможность использования разрешения на несколько запусков в VTune или увеличения времени выполнения.
- Кроме того, профилировщик Intel VTune иногда округляет цифры, поэтому это может не дать идеального результата, но разница очень мала, например, 0,1%, но в вашем вопросе разница составляет 3%, так что это не будет причиной этого.
Комментарии:
1. Может ли быть причиной то, что это многопоточное приложение? (Всего создано 131 поток, как показано на странице сводки, 56 потоков из них вызывают функцию A, которая вызывает функцию B). Я попробовал с одним потоком и обнаружил, что могу получить вызывающего абонента в правильном порядке, который ожидается (для данного конкретного случая).