Programação Paralela em Arquiteturas Multi-Core/Programação em Pthreads: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Flores (discussão | contribs)
Flores (discussão | contribs)
Linha 530:
 
Em suma, diversas ferramentas se encontram disponíveis para facilitar a depuração de programas com múltiplas threads, que ajudam a reduzir a complexidade da construção e manutenção de aplicações paralelas.
 
===== Depurando um programa em Pthreads <ref>http://homepages.dcc.ufmg.br/~coutinho/pthreads/</ref> =====
 
Para depurar o seu programa, compile-o com -g. Use o ddd, ou outro depurador gráfigo que te dê acesso ao console do gdb.
 
Comandos úteis:
 
'''info threads''', mostra quais threads estão rodando e onde cada uma está (a thread com um * é a que vc está):
 
<pre>
(gdb) info threads
5 Thread -1234650192 (LWP 4313) 0xb7fcf199 in __lll_mutex_lock_wait () from /lib/tls/libpthread.so.0
* 4 Thread -1226261584 (LWP 4312) thread1 (ptr=0x80560d8) at bellmanford.c:42
3 Thread -1217872976 (LWP 4311) thread1 (ptr=0x80560c8) at bellmanford.c:49
2 Thread -1209484368 (LWP 4310) thread1 (ptr=0x80560b8) at bellmanford.c:42
1 Thread -1209481536 (LWP 4096) 0xb7fc97c0 in __nptl_create_event () from /lib/tls/libpthread.so.0
(gdb)
</pre>
 
O número após o LWP é o número do processo. Na pthread antiga, todas as threads apareciam no ps, mas na nova só a principal aparece:
 
<pre>
[usuario@maquina]$ ps ux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
coutinho 449 0.0 0.1 6344 1048 ? Ss 18:52 0:00 /usr/lib/WindowMaker/WindowMaker
coutinho 2057 0.0 0.4 8196 4244 ? Rs 21:19 0:00 xterm -sl 2048
coutinho 2058 0.0 0.3 6192 3576 pts/14 Ss 21:19 0:00 bash
coutinho 4090 0.0 0.8 13236 8516 pts/14 S 21:56 0:01 ddd principal
coutinho 4092 0.0 0.3 5936 4028 pts/16 Ss+ 21:56 0:00 gdb -q -fullname principal
coutinho 4096 0.0 0.0 34428 596 pts/16 Tl 21:57 0:00 /home/speed/coutinho/grad/aeds3_tp2/principal -g entrada
coutinho 4586 0.0 0.0 2248 960 pts/14 R+ 22:57 0:00 ps ux
[usuario@maquina]$
</pre>
 
 
'''thread 1''', vai para a thread número 1 mostrada no info threads
 
'''info stack''', mostra a pilha da pthread:
 
<pre>
(gdb) info stack
#0 mybarrier (barreira=0x804aa60, myself=0) at barrier.c:40
#1 0x08048fd0 in thread1 (ptr=0x80560b8) at bellmanford.c:62
#2 0xb7fcaced in start_thread () from /lib/tls/libpthread.so.0
#3 0xb7f5edee in clone () from /lib/tls/libc.so.6
(gdb)
</pre>
 
 
'''frame 1''', quando vc está no topo da pilha, vc está no frame #0, vc pode ir para outros frames para ver com quais parâmetros uma função foi chamada, o valor das variáveis locais da função que chamou, etc.
 
==== Aplicações ====