Я сейчас не запускаю никакой параллельный код, но я ожидаю, что в будущем буду выполнять параллельный код, используя гибрид OpenMP и MPI. Отладчики были для меня бесценным инструментом при запуске серийных проектов.
Кто-нибудь может порекомендовать параллельный отладчик (или несколько отладчиков) использовать для отладки параллельного программного обеспечения? Свободное программное обеспечение предпочтительнее, но не стесняйтесь упоминать эффективное коммерческое программное обеспечение.
software
parallel-computing
Джефф Оксберри
источник
источник
Ответы:
Есть два основных коммерческих варианта: ДДТ от Allinea (что мы используем в TACC ) и Totalview (как упоминалось в другом комментарии). Они обладают сопоставимыми характеристиками, активно развиваются и являются прямыми конкурентами.
Eclipse имеет свою Parallel Tools Platform , которая должна включать поддержку программирования MPI и OpenMP и параллельный отладчик.
источник
Я должен дать ответ обманщику. Моя производительность никогда не была улучшена ни одним из предложений выше. Они медленные и дорогие по сравнению с моим предпочтительным вариантом параллельно: один сеанс GDB на процесс. Каждый GDB может подключаться к процессу MPI и находиться в xterm (это происходит автоматически при использовании PETSc
-start_in_debugger
). Я использовал это в течение 15 лет, к счастью. Возражения:1) я не могу смотреть на глобальные данные
Поскольку MPI является моделью с общим доступом, глобальных данных нет, только локальные данные
2) Эта стратегия не масштабируется на множество процессов
Никто не делает ошибок. Ошибки возникают в отдельных процессах, возможно, при входе от 1 или 2 соседей. Вы можете легко создавать GDB только для участвующих процессов (например, в PETSc, который вы используете
-debugger_nodes 0,5,17
). Кроме того, вышеперечисленные системы сильно сдаются при запуске каждого процесса, что делает их медленными. Метод GDB, на самом деле, гораздо более масштабируем.GDB также очень переносим. Он работает везде, понимает C ++ и Fortran, и позволяет выполнять произвольный код внутри прогона. Я написал специальные функции, чтобы легко отображать данные при работе в нем.
источник
Я использую только два отладчика для последовательных и параллельных программ:
В случае, когда (2) недостаточно масштабируемо, я ссылаюсь на (1b).
источник
Существует Intel Parallel Studio, которая включает в себя параллельный отладчик. Я никогда не работал с этим, но я видел его в нескольких демонстрациях. Вот видеоурок, который показывает некоторые функции.
Я также видел несколько оберток вокруг GDB, которые в некоторых случаях работали достаточно хорошо.
источник
Totalview . Это коммерческий отладчик. Очень легко просматривать стек на каждом процессоре. Вы можете видеть значения переменных (и изменять их) между процессорами / потоками. Вы можете построить векторы или матриц для визуализации значений переменных. Очевидно, сценарии также возможны (Tk / Tcl) для более сложного анализа точек наблюдения, хотя я сам никогда не работал с этим.
источник
Для пары простых способов отладки параллельных кодов мы собрали несколько ответов в соглашении. II Часто задаваемые вопросы в разделе об отладке: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-приложения
источник
Интересно, почему никто не упомянул Padb (Parallel Application Debugger), который с открытым исходным кодом и бесплатное программное обеспечение, как предпочитает OP, но не такой мощный, как коммерческие аналоги, например: TotalView for HPC
источник
Вот дайджест некоторых ответов, данных мне ранее:
OpenMP имеет функции синхронизации:
omp_get_wtime()
иomp_get_wtick()
- онлайн-документыУ Google есть профилировщик процессора
Есть Scalasca, которая делает OpenMP и MPI профиль и анализ
Тогда есть Тау и vtune, которые я не использовал.
Удачи!
источник