Профилирование многопоточных приложений C++

вы использовали какой-либо инструмент профилирования, такой как Intel VTune analyzer?

каковы ваши рекомендации для многопоточного приложения C++ в Linux и windows? Меня в первую очередь интересуют пропуски кэша, использование памяти, утечки памяти и использование процессора.

Я использую valgrind (только в UNIX), но в основном для поиска ошибок и утечек памяти.

7 ответов


Ниже приведены хорошие инструменты для многопоточных приложений. Вы можете попробовать пробную версию.

  1. инструмент проверки работоспособности во время выполнения
    • Thread Checker -- Intel Thread checker / VTune, здесь
  2. согласованность памяти-инструменты проверки (использование памяти, утечки памяти) - Валидатор Памяти,здесь
  3. Анализ Производительности. (использование процессора) - AQTime , здесь

редактировать: Intel thread checker может использоваться для диагностики гонок данных, тупиков, остановленных потоков, заброшенных замков и т. д. Пожалуйста, имейте много терпения в анализе результатов, как это легко запутаться.

несколько советов:

  1. отключить функции, которые не требуются.(В случае выявления тупиков гонка данных может быть отключена и наоборот.)
  2. используйте уровень измерительного оборудования основанный на вашем необходимость. Такие уровни, как" все функции "и" полное изображение", используются для гонок данных, где в качестве" импорта API " можно использовать для обнаружения взаимоблокировки)
  3. часто используйте контекстное меню "диагностическая помощь".

в Linux попробуйте oprofile. Он поддерживает различные счетчики производительности.

в Windows, AMD CodeAnalyst (бесплатно, в отличие от VTune) стоит посмотреть. Он поддерживает только профилирование событий на оборудовании AMD, хотя (на процессорах Intel это просто удобный профилировщик на основе таймера).

коллега недавно попытался Intel Параллельная Студия (бета) и оценил его благоприятно (он нашел некоторые интересные проблемы, связанные с параллелизмом, в некотором коде).


VTune дает вам много деталей о том, что делает процессор, и иногда мне трудно увидеть лес для деревьев. VTune не будет сообщать об утечках памяти. Для этого вам понадобится purify plus, или если вы можете работать на Linux box, valgrind хорош для утечек памяти по отличной цене.

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

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

ура, Мартин.


Я поставлю другой ответ для отчет, особенно часть callgrind с пользовательским интерфейсом. Он может обрабатывать несколько потоков, профилируя каждый поток для пропусков кэша и т. д. У них также есть многопоточная проверка ошибок helgrind, но я никогда не использовал ее и не знаю, насколько она хороша.


вы можете попробовать профилировщик процессора AMD CodeXL. Это бесплатный и доступен как для Windows, так и Linux.

профилировщик процессора AMD CodeXL заменяет больше не поддерживаемый инструмент CodeAnalyst (который был упомянут в ответе выше, данном timday).

для получения дополнительной информации и ссылок для скачивания посетите:веб-страница AMD CodeXL.


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

PurifyPlus доступен как на различных Unices и Windows, так что он должен покрывать ваши требования, но, к сожалению, в отличие от Valgrind, это не бесплатно.


для простого профилирования gprof - это очень хорошо..