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