Все ли профилировщики значительно замедляют выполнение? - PullRequest
6 голосов
/ 15 сентября 2010

Профилировщики, с которыми у меня есть опыт (в основном, профилировщик Digital Mars D, поставляемый с компилятором), похоже, сильно замедляют выполнение профилируемой программы. Это сильно влияет на мою готовность использовать профилировщик, поскольку делает профилирование «реального» запуска многих моих программ в отличие от тестирования на очень небольших входах нецелесообразным. Я не знаю много о том, как реализованы профилировщики. Является ли значительное (> 2x) замедление при профилировании в значительной степени фактом жизни, или существуют профилировщики, которые этого избегают? Если этого можно избежать, есть ли быстрые профилировщики, доступные для D, предпочтительно для D2 и предпочтительно бесплатно?

Ответы [ 4 ]

16 голосов
/ 15 сентября 2010

Я не знаю, как работают профилировщики D, но в общем случае профилировщик может собирать информацию о профилировании двумя способами.

Во-первых, с помощью контрольно-измерительных приборов, вводя журналы вызовов повсюду. Это замедляет приложение более или менее. Обычно больше.

Вторая выборка. Затем профилировщик регулярно прерывает приложение и проверяет стек вызовов. Это не сильно замедляет работу приложения.

Недостатком профилировщика выборки является то, что результат не такой подробный, как с профилировщиком инструментов.

Проверьте документацию для вашего профилировщика, если вы можете работать с выборкой вместо инструментов. В противном случае у вас появятся новые термины Google в «отбор проб» и «приборостроение».

2 голосов
/ 15 сентября 2010

Мой любимый метод профилирования замедляет программу в сторону вниз, и это нормально. Я запускаю программу под отладчиком с реалистичной загрузкой, а затем вручную прерываю ее. Затем я копирую стек вызовов где-то, как в Блокнот. Таким образом, требуется порядка минут, чтобы собрать один образец . Затем я могу либо возобновить выполнение, либо можно начинать все сначала, чтобы получить другой образец.

Я делаю это 10 или 20 раз, достаточно долго, чтобы увидеть, что на самом деле делает программа с точки зрения настенных часов. Когда я вижу что-то, что часто появляется, я беру больше образцов, пока оно не появится снова. Затем я останавливаюсь и действительно изучаю, что происходит и почему, что может занять 10 минут или больше. Вот как я узнаю, можно ли заменить это действие более эффективным кодом, т. Е. Оно не было абсолютно необходимым.

Видите ли, мне не интересно измерять, насколько быстро или медленно он идет. Я могу сделать это отдельно, возможно, только с часами. Мне интересно выяснить, какие действия занимают большой процент времени (не сумма , процент ), и если что-то занимает большой процент времени, это вероятность того, что каждый стопка увидит это.

Под «активностью» я не обязательно подразумеваю, где компьютер зависает. В реалистичном программном обеспечении ПК почти всегда выключен в какой-либо системе или библиотеке. Как правило, более важным является вызов сайтов в нашем коде. Например, если я вижу строку из 3 вызовов, отображающуюся на половине выборок стека, это представляет собой очень хороший поиск, потому что, если какой-либо из них не является действительно необходимым и с ним можно покончить, время выполнения уменьшится на половина.

Если вам нужен улыбающийся менеджер, просто сделайте это один или два раза.

Даже в том, что, по вашему мнению, были бы математически сложными научными приложениями, где вы думаете, что низкоуровневая оптимизация и горячие точки будут управлять днем, вы знаете, что я часто нахожу? Подпрограммы математической библиотеки проверяют аргументы , а не работают. Часто код не делает то, что вы думаете, он делает, и вам не нужно запускать его на максимальной скорости, чтобы это выяснить.

1 голос
/ 15 сентября 2010

Вы можете попробовать h3r3tic xfProf , который является профилировщиком выборки. Сам не пробовал, но этот парень всегда делает классные вещи:)

Из описания:

Если в программе выбрано всего несколько сотен (или тысяч) раз в секунду производительность не будет заметна.

1 голос
/ 15 сентября 2010

Я бы сказал, что да, и выборочные, и инструментальные формы профилирования облагают вашу программу большими налогами - независимо от того, какой профилировщик вы используете и на каком языке.

...