Devo dar a resposta do malandro. Minha produtividade nunca foi aprimorada por nenhuma das sugestões acima. Eles são lentos e caros em comparação com a minha opção preferida em paralelo: uma sessão de gdb por processo. Cada gdb pode se conectar a um processo MPI e ficar em um xterm (isso acontece automaticamente no PETSc -start_in_debugger
). Eu uso isso há 15 anos, felizmente. Objeções:
1) Não consigo ver dados globais
Como o MPI é um modelo sem compartilhamento, não há dados globais, apenas dados locais
2) Essa estratégia não se ajusta a muitos processos
Nem os erros. Os erros ocorrem em processos individuais, talvez com a entrada de 1 ou 2 vizinhos. Você pode gerar gdb facilmente apenas nos processos participantes (no PETSc, -debugger_nodes 0,5,17
por exemplo). Além disso, os sistemas acima desistem muito quando executados em todos os processos, o que os torna lentos. O método gdb é, de fato, muito mais escalável.
O gdb também é muito portátil. Ele roda em qualquer lugar, entende C ++ e Fortran e permite executar código arbitrário dentro da execução. Eu escrevi funções especiais para exibir facilmente os dados ao executá-lo.