Сведения о вопросе

Pytdev

00:49, 16th August, 2020

Теги

c++   performance   profiling    

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

Просмотров: 504   Ответов: 21

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

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


Смотреть также:

Каковы некоторые хорошие профилировщики для native C++ на Windows?



  Сведения об ответе

dump

11:34, 25th August, 2020

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


  Сведения об ответе

qwerty101

21:53, 2nd August, 2020

Для Linux: Google Perftools

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


  Сведения об ответе

nYU

12:21, 19th August, 2020

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


  Сведения об ответе

$DOLLAR

23:01, 27th August, 2020

Мой единственный опыт профилирования кода C++ связан с AQTime by AutomatedQA (теперь это программное обеспечение SmartBear). Он имеет несколько типов встроенных профилировщиков (производительность, память, дескрипторы Windows, трассировка исключений, статический анализ и т. д.), и инструменты кода, чтобы получить результаты.

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


  Сведения об ответе

lourence

10:12, 17th August, 2020

Я никогда раньше не занимался профилированием. Вчера я запрограммировал класс 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");

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

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

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


  Сведения об ответе

ITSME

03:17, 17th August, 2020

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


  Сведения об ответе

$DOLLAR

09:47, 5th August, 2020

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

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


  Сведения об ответе

appple

23:00, 15th August, 2020

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


  Сведения об ответе

dump

08:03, 26th August, 2020

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

  • Кто использует больше всего CPU? Детализация до имени функции с помощью стеков вызовов.
  • Кто выделяет больше всего памяти?
  • Кто делает больше всего запросов реестра?
  • Диск пишет? и т.д.

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


  Сведения об ответе

padenie

09:55, 18th August, 2020

Существуют различные требования к профилированию. Инструментальный код в порядке, или вам нужно профилировать оптимизированный код (или даже уже скомпилированный код)? Вам нужна информация профиля line-by-line? Какой из OS вы запускаете? Нужно ли вам также профилировать общие библиотеки? А как насчет trace в системные вызовы?

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


  Сведения об ответе

JUST___

16:21, 22nd August, 2020

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


  Сведения об ответе

fo_I_K

18:05, 4th August, 2020

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

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

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

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

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


  Сведения об ответе

$DOLLAR

22:53, 22nd August, 2020

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


  Сведения об ответе

PHPH

04:12, 29th August, 2020

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

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

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

Обратите внимание, что имеется интерфейс KCachegrind.


  Сведения об ответе

DO__IT

16:38, 15th August, 2020

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


  Сведения об ответе

SKY

22:24, 12th August, 2020

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


  Сведения об ответе

9090

12:17, 14th August, 2020

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

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


  Сведения об ответе

прога

08:02, 22nd August, 2020

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


  Сведения об ответе

ITSME

19:27, 17th August, 2020

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


  Сведения об ответе

lool

20:23, 14th August, 2020

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

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


  Сведения об ответе

SKY

17:50, 26th August, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться