Профилирование многопоточных приложений C ++ - PullRequest
8 голосов
/ 12 марта 2009

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

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

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

Ответы [ 7 ]

8 голосов
/ 12 марта 2009

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

  1. Средство проверки работоспособности во время выполнения
  2. Инструменты проверки целостности памяти (использование памяти, утечки памяти) - Валидатор памяти, здесь
  3. Анализ производительности. (Использование процессора) - AQTime, здесь

РЕДАКТИРОВАТЬ : средство проверки потоков Intel можно использовать для диагностики гонок данных, взаимных блокировок, остановленных потоков, оставленных блокировок и т. Д. Пожалуйста, имейте большое терпение при анализе результатов, так как легко запутаться.

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

  1. Отключить ненужные функции. (В случае выявления взаимоблокировок гонку данных можно отключить и наоборот.)
  2. Используйте уровень Инструментовки в зависимости от ваших потребностей. Уровни, такие как «Все функции» и «Полное изображение», используются для гонок данных, где «Импорт API» может использоваться для обнаружения тупиков)
  3. часто используйте контекстно-зависимое меню «Справка по диагностике».
5 голосов
/ 12 марта 2009

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

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

Коллега недавно попробовал Intel Parallel Studio (бета) и оценил его положительно (он обнаружил некоторые интересные проблемы с параллелизмом в некотором коде).

3 голосов
/ 12 марта 2009

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

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

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

веселит, Мартин.

2 голосов
/ 30 апреля 2014

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

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

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

2 голосов
/ 12 марта 2009

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

1 голос
/ 16 марта 2009

Для простого профилирования gprof довольно хорошо ..

1 голос
/ 12 марта 2009

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

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

...