Какой ваш любимый инструмент профилирования (для С++)

До сих пор я использовал Rational Quantify. Я много слышал о Intel VTune, но никогда не пробовал!

Изменить: я в основном ищу программное обеспечение, которое будет обрабатывать код, поскольку я предполагаю, что о единственном способе получения очень хороших результатов.


См. также:

Какие хорошие профилировщики для родного С++ в Windows?

Ответ 1

Для разработки Linux (хотя некоторые из этих инструментов могут работать на других платформах). Это два больших имени, о которых я знаю, есть много других меньших, которые пока не видели активного развития.

Ответ 2

Для Linux:  Google Perftools

  • Быстрее, чем valgrind (еще не очень мелкозернистый)
  • Не требуется аппаратное обеспечение кода
  • Хороший графический вывод (- > kcachegrind)
  • Профилирование памяти, cpu-профилирование, проверка утечки

Ответ 3

Только мой профилирующий код С++ с AQTime от AutomatedQA (теперь SmartBear Software). Он имеет несколько типов встроенных профилировщиков (производительность, память, дескрипторы Windows, трассировка исключений, статический анализ и т.д.), А также инструмент для получения результатов.

Мне понравилось использовать его - всегда было интересно найти те места, где небольшое изменение в коде может значительно улучшить производительность.

Ответ 4

Я использовал Glowcode в прошлом и не имел ничего, кроме положительного опыта с ним. Интеграция с Visual Studio очень хорошая, и это самый эффективный/интуитивно понятный профайлер, который я когда-либо использовал (даже по сравнению с профайлерами для управляемого кода).

Очевидно, что это бесполезно, если вы не работаете в Windows, но вопрос оставляет для меня неясным, каковы ваши требования.

Ответ 5

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

Ответ 6

Профилировщик в Visual Studio 2008 очень хорош: быстрый, удобный, понятный и хорошо интегрированный в IDE.

Ответ 7

Я никогда не делал профилирования раньше. Вчера я запрограммировал класс ProfilingTimer со статическим расписанием (map < std::string, long long > ) для хранения времени.

Конструктор сохраняет начальный тик, а деструктор вычисляет прошедшее время и добавляет его к карте:

ProfilingTimer::ProfilingTimer(std::string name)
 : mLocalName(name)
{
 sNestedName += mLocalName;
 sNestedName += " > ";

 if(sTimetable.find(sNestedName) == sTimetable.end())
  sTimetable[sNestedName] = 0;

 mStartTick = Platform::GetTimerTicks();
}

ProfilingTimer::~ProfilingTimer()
{
 long long totalTicks = Platform::GetTimerTicks() - mStartTick;

 sTimetable[sNestedName] += totalTicks;

 sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}

В каждой функции (или {block}), которую я хочу профилировать, мне нужно добавить:

ProfilingTimer _ProfilingTimer("identifier");

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

(Кто-нибудь еще работает с каким-либо подобным "домашним профилированием"? Или это просто глупо? Но это весело! У кого-нибудь есть предложения по улучшению?

Есть ли какое-то автоматическое добавление строки ко всем функциям?)

Ответ 8

oprofile, без сомнения; его простой, надежный, выполняет эту работу и может давать всевозможные приятные разбивки данных.

Ответ 9

В Windows зайдите в Xperf. Он использует выборочный профиль, имеет некоторый полезный интерфейс и не требует инструментов. Весьма полезно для отслеживания проблем с производительностью. Вы можете ответить на такие вопросы, как:

  • Кто использует большинство процессоров? Перейдите к имени функции, используя стеки вызовов.
  • Кто выделяет большую часть памяти?
  • Кто выполняет большинство запросов к реестру?
  • Запись диска? и др.

Вы будете очень удивлены, когда найдете узкие места, поскольку они, вероятно, не там, где вы ожидали!

Ответ 10

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

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

Ответ 11

Поскольку вы не упоминаете платформу, над которой работаете, я скажу cachegrind под Linux. Определенно. Это часть набора инструментов Valgrind.

http://valgrind.org/info/tools.html

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

Обратите внимание, что имеется доступный доступ к KCachegrind.

Ответ 12

Для разработки Windows я использовал проверку программного обеспечения Performance Validator - это быстро, разумно точно и по разумной цене. Лучше всего, он может управлять запущенным процессом и позволяет включать и отключать сбор данных во время выполнения, как вручную, так и на основе callstack - отлично подходит для профилирования небольшого раздела более крупной программы.

Ответ 13

Я использую devpartner для платформы pc.

Ответ 14

Я попробовал Quantify AQTime, а Quantify выиграл из-за его неоцененных возможностей "сосредоточиться на поддереве" и "удалить вспомогательные деревья".

Ответ 15

Единственным чувствительным ответом является PTU от Intel. Конечно, лучше всего использовать его на процессоре Intel и получить еще более ценные результаты, по крайней мере, на C2D-машине, поскольку самой архитектуре легче вернуть осмысленные профили.

Ответ 16

Я использовал VTune под Windows и Linux в течение многих лет с очень хорошими результатами. Более поздние версии ухудшились, когда они передали этот продукт качеству и производительности своих российских разработчиков, а также снизились (увеличение числа сбоев VTune, часто 15 + минут, чтобы открыть файл анализа).

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

Ответ 17

В Windows я пробовал AMD Codeanalyst, Intel VTune и профилировщик Visual Studio Team Edition.

Codeanalyst работает с ошибкой (часто происходит сбой), а в моем коде результаты часто неточны. Его пользовательский интерфейс неинтуитивный. Например, чтобы достичь отображения стека вызовов в результатах профиля, вам нужно щелкнуть вкладку "Процессы", затем щелкнуть имя файла EXE вашей программы, а затем нажать кнопку на панели инструментов с помощью крошечных букв "CSS". Но это бесплатная программа, поэтому вы можете попробовать и работать (с меньшим количеством функций) без процессора AMD.

VTune ($ 700) имеет ужасный пользовательский интерфейс IMO; в большой программе трудно найти нужное дерево вызовов, и вы можете смотреть только на один "node" в программе за раз (функция со своими непосредственными вызывающими и вызываемыми абонентами) - вы не можете смотреть на полное дерево вызовов. Существует представление графика вызовов, но я не мог найти способ сделать относительное время выполнения отображаемым на графике. Другими словами, функции на графике выглядят одинаково независимо от того, сколько времени было потрачено на них - как будто они полностью пропустили точку профилирования.

Профилировщик Visual Studio имеет лучший графический интерфейс для трех, но по какой-то причине он не может собирать образцы из большинства моего кода (образцы собираются только для нескольких функций во всей моей программе на С++). Кроме того, я не мог найти цену или способ купить ее напрямую; но он поставляется с моей подписью MSDN. Visual Studio поддерживает управляемый, родной и смешанный код; Я не уверен в двух других профилировщиках в этом отношении.

В заключение я пока не знаю хорошего профилировщика! Я обязательно рассмотрю другие предложения здесь.

Ответ 18

ElectricFence отлично работает для отладки malloc

Ответ 19

Моим любимым инструментом является Easy Profiler: http://code.google.com/p/easyprofiler/

Это профайлер времени компиляции: исходный код должен быть ручным инструментом, используя набор подпрограмм, чтобы описать целевые регионы. Однако, как только приложение запускается и автоматически записывается в файл XML, это только вопрос открытия приложения Observer и несколько щелчков по инструментам анализа/сравнения, прежде чем вы сможете увидеть результат в качественной диаграмме.

Ответ 20

Профайлер Visual Studio 2010 под Windows. У VTune был отличный инструмент графика звонков, но он был сломан как Windows Vista/7. Я не знаю, исправили ли они это.

Ответ 21

Позвольте мне дать вилку для EQATEC... только то, что я искал... просто узнать и использовать, и дает мне информацию, необходимую для быстрого поиска горячих точек. Я очень предпочитаю его встроенной в Visual Studio (хотя я еще не пробовал VS 2010, если честно).

Возможность делать снимки ОГРОМНЫ. Я часто получаю дополнительный анализ и оптимизацию, ожидая выполнения реального целевого анализа... люблю его.

О, и его базовая версия бесплатна!
http://www.eqatec.com/Profiler/