210 likes | 325 Views
Capítulo 9 Multi-processadores. Introdução (9.1). Processamento paralelo: programa sendo executado por múltiplos processadores simultaneamente Questões básicas no projeto de sistemas multiprocessados: Compartilhamento de dados Coordenação entre os processadores Quantidade de processadores
E N D
Introdução (9.1) • Processamento paralelo: • programa sendo executado por múltiplos processadores simultaneamente • Questões básicas no projeto de sistemas multiprocessados: • Compartilhamento de dados • Coordenação entre os processadores • Quantidade de processadores • Compartilhamento de dados • Processadores com um único espaço de endereçamento = Processadores de memória compartilhada (comunicação via variável comum) • UMA – uniform memory access ou SMP – symmetric multiprocessors • NUMA – nonuniform memory access • Processadores de memória não compartilhada (private) • Comunicação entre processos via troca de mensagens • send e receive
Processadores em rede • Modelo de paralelismo mais recente • clusters • computadores ligados por uma rede
Aceleração com multiplrocessamento e lei de Amdhal (9.2) • Exemplo (p.715): • Achar o speedup linear com 100 processadores. Que fração da computação original pode ser seqüencial ? • Tempo de execução após melhora = (tempo de execução afetado pela melhora / quantidade de melhora) + tempo de execução não afetado • se buscamos aceleração linear • Tempo de execução após melhora / 100 = (tempo de execução afetado pela melhora / 100) + tempo de execução não afetado • Tempo de execução não afetado = zero • conclusão: • para alcançar aceleração (speedup) linear com 100 processadores nenhuma operação original pode ser sequencial • ou para alcançar aceleração de 99 em 100 processadores, qtd de operações lineares < 0,01%
Aceleração via execução paralela • Exemplo (p. 716) • Fazer duas somas: • duas variáveis escalares • duas matrizes 1000 X 1000. Qual o speedup para 1000 processadores ? • Assumindo tempo para uma soma = t • 1 soma não afetada pelo paralelismo e 1.000.000 afetadas • tempo antes = 1.000.001 t • Tempo de execução depois do paralelismo = (tempo de execução afetado pela melhora / quantidade de melhora) + tempo de execução não afetado • Tempo de execução depois melhora = (1.000.000/1000)t + 1t = 1.001t • Aceleração = 1.000.001/1.001 = 999
Programa paralelo • Exemplo (p.718): Somar 100.000 números em um computador com 10 processadores ligados em um único barramento Pn é o processador n (de 0 a 9) 1. Somar 10.000 números em cada processador (definir faixas de endereços de memória) sum[Pn] = 0; for (i = 10000*Pn; i < 10000*(pn+1); i = i + 1;) sum[Pn] = sum[pn] + A[i] ; /* soma as regiões alocadas ao processador*/ 2. Somar as 10 sub-somas; metade dos processadores somam pares de somas parciais, um quarto somam pares das novas somas parciais ,etc., etc., etc.. half = 10; repeat synch(); /* primitiva de sincronização; espera a soma do bloco anterior*/ if (half%2 != 0 && Pn ==0) sum[0] = sum[0] + sum[half –1]; half = half/2; if (Pn < half) sum[Pn] = sum[Pn] + sum[Pn+half]; until (half ==1);
P r o c e s s o r P r o c e s s o r P r o c e s s o r S n o o p C a c h e t a g S n o o p C a c h e t a g S n o o p C a c h e t a g t a g a n d d a t a t a g a n d d a t a t a g a n d d a t a S i n g l e b u s M e m o r y I / O Coerência de caches (snooping) • Snoop: controlador monitora o barramento para determinar se existe ou não uma cópia de um bloco compartilhado • Manutenção da coerência: problema só na escrita • Processador tem que ter acesso exclusivo na escrita • Todos os processadores tem que ter a cópia mais recente após uma escrita
I n v a l i d P r o c e s s o r r e a d m i s s R e a d O n l y ( n o t v a l i d ( c l e a n ) c a c h e b l o c k ) ) t i ) h y r f o i m e P r o c e s s o r w r i t e m i s s t e a P r o c e s s o r w r i t e m d i l o a t v ( h i t o r m i s s ) n k i c d o l n P r o c e s s o r b e y S t ( r m i s s r e a d i d k c a b e t i r W ( R e a d / W r i t e ( d i r t y ) P r o c e s s o r w r i t e a . C a c h e s t a t e t r a n s i t i o n s u s i n g s i g n a l s f r o m t h e p r o c e s s o r I n v a l i d R e a d O n l y t e m i s s ( n o t v a l i d ( c l e a n ) f o r t h i s b l o c k I n v a l i d a t e o r c a c h e b l o c k ) A n o t h e r p r o c e s s o r h a s a r e a d ( s e e n o n b u s ) a n o t h e r p r o c e s s o r m i s s o r a w r i t e m i s s f o r h a s a w r i t h i s b l o c k ( s e e n o n b u s ) ; w r i t e b a c k o l d b l o c k R e a d / W r i t e ( d i r t y ) b . C a c h e s t a t e t r a n s i t i o n s u s i n g s i g n a l s f r o m t h e b u s Protocolo snooping • write-invalidate • escrita todas as cópias em outras caches tornem-se inválidas até a atualização • O processador que irá escrever manda um sinal de inválido no barramento e todas as caches verificam para ver se tem uma cópia • se sim, tornam o bloco que contem a palavra inválido • write-update (write-broadcast) • processador que escreve propaga o novo dado no barramento e todas as caches com cópia são atualizadas
L o a d l o c k v a r i a b l e N o U n l o c k e d ? ( = 0 ? ) Y e s T r y t o l o c k v a r i a b l e u s i n g s w a p : r e a d l o c k v a r i a b l e a n d t h e n s e t v a r i a b l e t o l o c k e d v a l u e ( 1 ) N o S u c c e e d ? ( = 0 ? ) Y e s B e g i n u p d a t e o f s h a r e d d a t a F i n i s h u p d a t e o f s h a r e d d a t a U n l o c k : s e t l o c k v a r i a b l e t o 0 Sincronização usando coerência
Programa paralelo em rede • Exemplo (p.729) – Programação paralela e troca de mensagens: • somar 100.000 números em um computador com 100 processadores (com espaços de endereçamento privados) ligados a uma rede • distribuir os 100 conjuntos de dados nas memórias locais e somar sum = 0; for (i = 0; i < 1000; i = i + 1;) sum = sum + A[i] ; /* soma arrays locais*/ Somar as 100 sub-somas send (x,y) onde x = processador Pn e y o valor half = 100; repeat half = (half+1)/2; if (Pn >= half && Pn < limit) send (pn – half, sum) if (Pn < limit/2 -1) sum = sum + receive(); limit = half; until (half ==1);
P r o c e s s o r P r o c e s s o r P r o c e s s o r P r o c e s s o r C a c h e C a c h e C a c h e C a c h e M e m o r y M e m o r y M e m o r y M e m o r y D i r e c t o r y D i r e c t o r y D i r e c t o r y D i r e c t o r y N e t w o r k N e t w o r k a . b . Addressing in large-scale parallel processors Coerência no nível de cache usando diretórios; dados originais na memória e cópias replicadas apenas nas caches Coerência no nível de memória usando diretórios; cópias replicadas em memória remota (cor) e nas caches
N e t w o r k B u s C o s t 2 4 8 1 6 3 2 N u m b e r o f p r o c e s s o r s N e t w o r k B u s P e r f o r m a n c e 2 4 8 1 6 3 2 N u m b e r o f p r o c e s s o r s B u s N e t w o r k P e r f o r m a n c e p e r u n i t c o s t 2 4 8 1 6 3 2 N u m b e r o f p r o c e s s o r s Desempenho de sistemas Custo, desempenho e custo/desempenho em processadores conectados via barramento ou rede
Clusters N máquinas têm N memórias independentes e N cópias do SO
Topologia de redes • Dois extremos: • single bus totalmente conectado • Rede: grafo, links são bidirecionais, podem existir chaves (switches) • Exemplo: Anel, mais de umatransação simultânea
Medidas de desempenho de rede: • Total Network Bandwidth = soma dos bandwidths de todos links • single bus = 1 • anel = N • fully connected = N (N - 1) / 2 • Bisection Bandwidth; dividir a rede em duas sub-redes com N/2 nós (da maneira mais pessimista); Medida = BW entre as sub-redes • single bus = 1 • anel = 2 • fully connected = (N/2)2
3 a . 2 D g r i d o r m e s h o f 1 6 n o d e s b . n - c u b e t r e e o f 8 n o d e s ( 8 = 2 s o n = 3 ) Duas formas: Mesh e Cubo
P 0 P 1 P 2 P 0 P 3 P 1 P 4 P 2 P 5 P 3 P 6 P 4 P 7 P 5 P 6 P 7 a . C r o s s b a r b . O m e g a n e t w o r k A C B D c . O m e g a n e t w o r k s w i t c h b o x Topologia multi-estágio
Classificação de Michael Flynn • SISD: Single Instruction (stream) Single Data (stream) • processador único • single = o que? • soma paralela? pipeline? • referência para Flynn: single hoje = MIPS dos capítulos 5 e 6 • SIMD:Single Instruction Multiple Data • operam sobre vetores de dados • MISD: Multiple Instruction Single Data • difícil de relacionar com sistemas práticos (ver “elaboration” p. 752) • MIMD: Multiple Instruction Multiple Data • multiprocessadores conectados via barramento ou rede: