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.


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.


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.


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).


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.


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.


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


-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!


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.