Não estou executando nenhum código paralelo agora, mas prevejo a execução de código paralelo no futuro usando um híbrido de OpenMP e MPI. Depuradores foram ferramentas inestimáveis para mim ao executar projetos em série.
Alguém pode recomendar um depurador paralelo (ou vários depuradores) para usar na depuração de software paralelo? O software livre seria preferível, mas não hesite em mencionar um software comercial eficaz.
software
parallel-computing
Geoff Oxberry
fonte
fonte
Respostas:
Existem basicamente duas opções comerciais principais: DDT da Allinea (que é o que usamos no TACC ) e Totalview (conforme mencionado no outro comentário). Eles têm características comparáveis, são desenvolvidos ativamente e são concorrentes diretos.
O Eclipse possui sua Parallel Tools Platform , que deve incluir suporte à programação MPI e OpenMP e um depurador paralelo.
fonte
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.
fonte
Eu uso apenas dois depuradores para programas seriais e paralelos:
No caso em que (2) não é suficientemente escalável, refiro-me a (1b).
fonte
Há o Intel Parallel Studio, que inclui um depurador paralelo. Eu nunca trabalhei com ele, mas já o vi usado em algumas demos. Aqui está um tutorial em vídeo que mostra alguns dos recursos.
Também vi alguns wrappers em torno do gdb que funcionavam razoavelmente bem em certos casos.
fonte
Totalview . É um depurador comercial. É muito fácil visualizar a pilha em cada processador. Você pode ver valores de variáveis (e alterá-los) entre processadores / threads. Você pode plotar vetores ou matrizes para visualizar valores variáveis. Aparentemente, o script também é possível (Tk / Tcl), para uma análise sofisticada do ponto de controle, embora eu nunca tenha trabalhado com isso.
fonte
Para algumas maneiras simples de depurar códigos paralelos, coletamos algumas respostas no acordo.II FAQs na seção sobre depuração: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-applications
fonte
Eu me pergunto por que ninguém mencionou o Padb (Parallel Application Debugger), que é de código aberto e software livre como o OP prefere, mas não tão poderoso quanto os comerciais, por exemplo: TotalView for HPC
fonte
Aqui está um resumo de algumas respostas que me foram dadas anteriormente:
O OpenMP possui funções de tempo:
omp_get_wtime()
eomp_get_wtick()
- documentos on - lineGoogle tem um perfilador de CPU
Há Scalasca que faz o perfil e análise de OpenMP e MPI
Depois, há Tau e vtune que eu não usei.
Boa sorte!
fonte