Я должен дать ответ обманщику. Моя производительность никогда не была улучшена ни одним из предложений выше. Они медленные и дорогие по сравнению с моим предпочтительным вариантом параллельно: один сеанс 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, и позволяет выполнять произвольный код внутри прогона. Я написал специальные функции, чтобы легко отображать данные при работе в нем.