Я использовал valgrind для профилирования кодовой базы C ++ и, насколько я понимаю, выполняет выборку отдельных вызовов для создания данных своего профиля. В результате я могу дважды профилировать одно и то же приложение, используя что-то вроде этого:
valgrind --tool=callgrind myprogram.exe
, и каждый раз получать разные результаты. Например, мои последние два прогона дали мне следующий результат внизу:
==70741==
==70741== Events : Ir
==70741== Collected : 196823780
==70741==
==70741== I refs: 196,823,780
и
==70758==
==70758== Events : Ir
==70758== Collected : 195728098
==70758==
==70758== I refs: 195,728,098
, все это имеет для меня полный смысл. Однако в настоящее время я оптимизирую свою кодовую базу и хочу внести изменения и определить, действительно ли они улучшают производительность. Из-за выборки кажется, что одного запуска callgrind будет недостаточно, поскольку я могу получать разные числа при каждом запуске. В результате было бы трудно определить, был ли мой последний прогон быстрее просто из-за случайной выборки, или же мои изменения действительно имели существенное значение (в статистическом смысле, почему бы и нет?).
Мой вопрос is: Есть ли способ заставить callgrind быть последовательным в его выборке? Или есть более подходящий инструмент более высокого уровня, который позволил бы мне понять, как рефакторинг влияет на производительность? В настоящее время я разрабатываю Ma c OSX Sierra.