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