Который был самым надежным, самым быстрым профилировщиком Windows C ++, которого Вы использовали?

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

8
задан Carl 21 February 2010 в 23:59
поделиться

7 ответов

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

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

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

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

3
ответ дан 5 December 2019 в 18:59
поделиться

Рассмотрите вариант no-profiler.

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

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

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

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

2
ответ дан 5 December 2019 в 18:59
поделиться

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

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

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

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

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

  • Трудно учесть, как планируется ваш процесс и какие другие операции выполняются.
  • Профилировщики часто выявляют "горячие точки", которые без их вмешательства вы бы никогда не посчитали "горячими точками".
1
ответ дан 5 December 2019 в 18:59
поделиться

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

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

1
ответ дан 5 December 2019 в 18:59
поделиться

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

0
ответ дан 5 December 2019 в 18:59
поделиться

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

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

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

0
ответ дан 5 December 2019 в 18:59
поделиться

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

  • Выборка и не- режимы выборки.
  • C, C ++, Delphi, Windows.
2
ответ дан 5 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: