Qual software é bom para usar na depuração paralela?

24

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.

Geoff Oxberry
fonte
Não vejo como as respostas aqui diferem significativamente de stackoverflow.com/questions/329259/… . MPI é a parte mais difícil aqui, não o OpenMP. Em qualquer caso, a depuração das condições de corrida em programas encadeados é limítrofe insolúvel no momento.
23413 Jeff Jeff
O ThreadSanitizer é uma boa solução para depurar condições de corrida em programas encadeados, embora eu não conheça ninguém que tenha tentado adicionar MPI à mistura!
mabraham

Respostas:

17

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.

Bill Barth
fonte
Eu nunca ouvi falar de alguém usando o depurador paralelo PTP. Não sei ao certo o que isso significa ...
Jeff
Tenho alguns colegas que tentaram, mas nunca brinquei com isso.
Bill Barth
16

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,17por 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.

Matt Knepley
fonte
4
Ei Coward, se você não votar, deixe um comentário.
Matt Knepley
5
Não fui a favor da votação, mas discordo até certo ponto. Encontrei alguns erros em escala que não apareciam em tamanhos pequenos e o uso de um depurador paralelo era uma maneira eficiente de encontrá-los. Eu faço a maior parte da minha depuração com printf e anexação a processos individuais com o gdb, mas vi o benefício de ter um depurador paralelo.
Bill Barth
3
A única vez que encontrei um bug em escala foi um bug de desempenho devido à escolha de um algoritmo de comunicação coletiva inadequado. Por outro lado, minha visão é ainda mais extrema que a de Matt, pois a coisa mais próxima de um depurador que eu já uso é o valgrind.
precisa
1
@ BillBarth Eu sei que você está certo de que existem bugs em 1000 processos que não aparecem em problemas menores (Dinesh teve um famoso PETSc que durou meses e apareceu apenas em 82 processos). Meu ponto era mais para contrariar a sabedoria predominante. Acho que depuradores paralelos são um bom último recurso, não primeiro.
Matt Knepley
3
Eu te derrotei. Sua resposta não é o que foi perguntado.
aterrel
5

Eu uso apenas dois depuradores para programas seriais e paralelos:

  1. O depurador Kernighan, ou seja, declarações de impressão criteriosas e pensamento cuidadoso.
  2. Várias instâncias do GDB, conforme descrito em http://www.open-mpi.org/faq/?category=debugging#serial-debuggers .

No caso em que (2) não é suficientemente escalável, refiro-me a (1b).

Jeff
fonte
1
Nunca ouvi o nome "Kernighan debugger", mas eu aprovo, pois é assim que sempre depuro.
Jack Poulson
4

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.

ank
fonte
3

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.

Yann
fonte
Do lado subjetivo, quando o centro de HPC da minha universidade instalou isso, pensei que era um exagero. Então eu descobri como era fácil fazer uma depuração muito complicada. É realmente um ótimo programa.
Yann
Eu também tenho totalview. Eu usei-o em muitos casos, e é extremamente poderoso, embora muito caro ...
Blab
1

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

Hefnawi
fonte
-1

Aqui está um resumo de algumas respostas que me foram dadas anteriormente:

O OpenMP possui funções de tempo: omp_get_wtime()e omp_get_wtick()- documentos on - line

Google tem um perfilador de CPU

Scalasca que faz o perfil e análise de OpenMP e MPI

Depois, há Tau e vtune que eu não usei.

Boa sorte!

Mikhail
fonte
Não acho que a pergunta seja sobre o tempo, mas posso estar errado. Boas sugestões embora ...
Yann
Esta resposta é mais sobre criação de perfil de depuração ...
MBq
Eu descobri que as ferramentas de criação de perfil substituem os depuradores paralelos. Acho frequentemente que erros paralelos estão relacionados a problemas de desempenho, como logjam no MPI. As ferramentas de desempenho geralmente revelam isso. O perfilador de memória da TAU é bom para descobrir por que segfaults aleatórios podem ocorrer.
23412 Jeff