Какой самый надежный и быстрый профилировщик Windows C ++ из всех, что вы использовали? - PullRequest
8 голосов
/ 22 февраля 2010

Мне нужно профилировать приложение C ++ в реальном времени в Windows. Большинство доступных профилировщиков либо ужасно дорогие, либо излишние, либо оба. Мне не нужны никакие вещи .NET. Поскольку это приложение реального времени, мне нужно, чтобы профилировщик работал как можно быстрее. Было бы замечательно, если бы он каким-то образом интегрировался с Visual Studio 2005/2008, но это не обязательно. Если это описание напоминает вам о профилировщике, который вы использовали, я бы очень хотел узнать об этом. Я надеюсь извлечь выгоду из использования профилировщиков C ++ в Windows, чтобы точно определить, кто сделает эту работу. Благодарю.

Ответы [ 7 ]

3 голосов
/ 22 февраля 2010

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

Итак, я написал заголовочный файл несколько лет назад, в котором определены некоторые макросы и механизм сбора данных, как в виде временных интервалов функций, так и в виде временной шкалы (в момент времени T в функции X). Код использует QueryPerformanceCounter для синхронизации и записывает данные в именованную общую память через CreateFileMapping , чтобы я мог просматривать данные синхронизации из другого процесса в реальном времени.

Требуется перекомпиляция, чтобы изменить информацию о времени, которую я хочу захватить, но код настолько недорог, что практически не влияет на код.

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

2 голосов
/ 30 марта 2010

Performance Validator (из Software Verification, компании, в которой я работаю), кажется, соответствует тому, что вы ищете:

  • Режимы выборки и отсутствия выборки.
  • C, C ++, Delphi, Windows.
2 голосов
/ 22 февраля 2010

Обратите внимание на параметр без профиля .

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

Это пример настройки приложения для максимальной производительности.

Если вы беспокоитесь о накладных расходах и о том, как это сделать в приложении реального времени для DSP, вот как я это сделаю. Запустите его с реалистичным вводом и просто остановите его с помощью кнопки паузы. Захватите стек вызовов в Блокнот. Затем запустите его снова и повторите несколько раз. (Удалите все несоответствующие выборки, такие как ожидание пользовательского ввода или иное состояние в режиме ожидания.) Обратите внимание, что этот процесс добавляет в программу нулевые издержки профилирования .

Если у вас есть проблема с тем, что ваш код запускается с таймера и фактически выполняется только небольшую часть общего времени, то а) вы можете решить, что у вас на самом деле нет проблем, или б) вы можете все еще пытаюсь заставить это идти быстрее. Если (б), то оберните цикл вокруг вашего кода так, что, что бы он ни делал, он повторяется 10, 100 или 1000 раз, в результате чего это занимает достаточно большую долю времени, чтобы выборки попадали в него. Используйте эти примеры, чтобы узнать, что нужно исправить, чтобы сделать это быстрее. Когда вы закончите, удалите внешний цикл, и он будет работать как бандит.

1 голос
/ 23 февраля 2010

Я иногда использую приложение под названием Very Sleepy: http://www.codersnotes.com/sleepy

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

1 голос
/ 22 февраля 2010

Мы выполняем довольно много профилирования и используем Shark (только OSX), vTune , Glowcode и старый фаворит счетчиков / часов.

Из этих Shark, безусловно, лучшая (и бесплатная!), В той мере, в которой я стараюсь сохранить код переносимым в OSX, чтобы я мог использовать его для профилирования. К сожалению, он не соответствует вашим требованиям.

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

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

Мы в основном используем часы для нашего встроенного кода, который запускает один процесс с небольшими или нулевыми издержками системы - это означает, что мы можем точно подсчитать количество тактов, которые выполняются операциями. Лично я не рекомендовал бы «катить свой собственный» код профилирования (за исключением грубого масштаба чрезвычайно * 1014) по двум причинам:

  • Трудно объяснить, как ваш процесс запланирован и какие другие операции выполняются.
  • Профилировщики часто выделяют горячие точки, которые вы никогда не считали бы горячими точками без их вмешательства.
0 голосов
/ 22 февраля 2010

Я использовал AMD CodeAnalyst с большим эффектом, но, естественно, он должен работать на процессоре AMD. Это скорее «говорит вам больше, чем вы хотите знать», если вы копаете достаточно глубоко. http://developer.amd.com/cpu/codeanalyst/Pages/default.aspx

0 голосов
/ 22 февраля 2010

Поскольку это приложение реального времени, мне нужно, чтобы профилировщик работал как можно быстрее.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...