Arquitetura e Organização de Computadores Capítulo 7 Multicores, Multiprocessadores e Clusters
Material adaptado de: Patterson e Henessy, Computer Organization and Design 4 th Edition 2
Objetivo: conectar vários computadores para alcançar um desempenho maior: Multiprocessadores; Escalabilidade, disponibilidade, eficiência energética; Job-level (process-level) parallelism: Alto throughput para tarefas independentes; Parallel processing program: Um programa que executa em vários processadores; Microprocessadores multicore: Chips com vários processadores (cores). Introdução 3
Hardware: Serial: ex. Pentium 4; Paralelo: ex. quad-core Xeon e5345; Software: Sequencial: ex. multiplicação de matrizes; Concorrente: ex. sistema operacional; Software sequencial/concorrente pode rodar em hardware serial/paralelo: Desafio: fazer o uso efetivo do hardware paralelo. Hardware e Software 4
2.11: Paralelismo e instruções: Sincronização; 4.10: Paralelismo e paralelismo avançado a nível de instrução; 5.8: Paralelismo e hierarquia de memória: Coerência de cache; 6.9: Paralelismo e I/O: Redundant Arrays of Inexpensive Disks. O que nós já vimos durante o semestre 5
Software paralelo é o problema; Necessita alcançar um ganho significativo de desempenho: Caso contrário, use apenas um uniprocessador rápido, dado que é mais fácil! Dificuldades: Particionamento; Coordenação; Custo da comunicação. Programação paralela 6
Parte sequencial pode limitar o speedup; Exempli: 100 processadores com 90x de speedup? Tnew = Tparallelizabls/100 + Tsequential T new T Speedup Solving : F parallelizable 1 /100 parallelizable T 1 F paralleliz F able 0.999 sequential parallelizable /100 90 É necessário que apenas 0,1% do tempo total seja sequencial. Lei de Amdahl s 7
Carga: soma de 10 escaleres e soma matrizes de 10x10: Speedup de 10 para 100 processaores; Uniprocessador: Tempo = (10 + 100) x t add ; 10 processadores: Tempo = 10 x t add + 100/10 x t add = 20 x t add ; Speedup = 110/20 = 5.5; 100 processadores: Tempo = 10 x t add + 100/100 x t add = 11 x t add ; Speedup = 110/11 = 10; OBS: Assuma que a carga pode ser balanceada entre os processadores. Exemplo: Aumentando a escala 8
SMP: shared memory multiprocessor: Hardware provê um único espaço de endereço a todos os processaodres; Sincroniza as variáveis compartilhadas usando locks; Tempo de acesso à memória: UMA (uniforme) vs. NUMA (não uniforme). Memória compartilhada 9
Soma de 100.000 números em 100 processadores UMA: Cada processador tem ID: 0 Pn 99; Partição 1000 números por processador; Simulação inicial em cada processador: sum[pn] = 0; for (i = 1000*Pn; i < 1000*(Pn+1); i=i+1) sum[pn] = sum[pn] + A[i]; Agora é necessário somar essas somas parciais: Redução: dividir para conquistar; Metade dos processadores somas pares, depois quadras,... Necessita sincronizar entre os passos da redução. Exemplo: Soma com redução 10
half = 100; repeat synch(); if (half%2!= 0 && Pn == 0) sum[0] = sum[0] + sum[half-1]; /* Conditional sum needed when half is odd; Processor0 gets missing element */ half = half/2; /* dividing line on who sums */ if (Pn < half) sum[pn] = sum[pn] + sum[pn+half]; until (half == 1); Exemplo: Soma com redução 11
Cada processador tem o seu espaço de endereços privados; Hardware envia/recebe mensagem entre processadores. Passagem de mensagem 12
Rede de computadores independentes: Cada um tem sua memória privada e SO; Conectados através de um sistema de I/O: Ex. Ethernet/switch, internet; Adequados para aplicações de tarefas independentes: Web servers, databases, simulações,... Alta disponibilidade, escalável, acessível; Problemas: Custo de administração (melhor usar máquina virtuais); Baixa largura de banda da interconexão: Diferente largura de banda do processador/memória de um SMP. Clusters fracamente acoplados 13
Soma de 100.000 em 100 processaores; Primeiro distribui 100 números para cada: As somas parciais: sum = 0; for (i = 0; i<1000; i = i + 1) sum = sum + AN[i]; Redução? Metade dos processadores enviam, outra metade recebe e realiza a soma; etc. Soma com redução (novamente!) 14
Dados as funções de send() e receive(): limit = 100; half = 100;/* 100 processors */ repeat half = (half+1)/2; /* send vs. receive dividing line */ if (Pn >= half && Pn < limit) send(pn - half, sum); if (Pn < (limit/2)) sum = sum + receive(); limit = half; /* upper limit of senders */ until (half == 1); /* exit with final sum */ Enviar/receber também provê sincronização; Assuma que enviar/receber tenha o mesmo tempo da adição. Soma com redução (novamente!) 15
Computadores separados interconectados por redes distantes: Ex. conexões de internet; As unidade de trabalho são terceirizadas, resultados são enviados de volta; Pode usar o tempo não utilizado pelos PCs: Ex. SETI@home, World Community Grid Grid Computing 16
Executa várias threads em paralelo: Replica registradores, PC, etc; Troca rápida entre threads; Multithread de ajuste fino: Troca as threads depois de cada ciclo; Executa as instruções de forma intercalada; Se uma thread entra em stall, outras serão executadas; Multithread de ajuste grosseiro: Só troca de thread quando o stall é longo (ex. L2 miss); Simplifica o hardware, mas não esconde stalls curtos (ex. hazard de dados). Multithreading 17
Em processadores múltiplas requisições dinamicamente escalonados: Escalona instruções de várias threads; Instruções de threads independentes executam quando a unidade funcional está disponível; Nas threads, a gestão dependências é feita por escalonamento e renomeação de registradores; Exemplo: Intel Pentium-4 HT Duas threads: registradores duplicados, unidades funcionais e caches compartilhadas. Simultaneous Multithreading - SMT 18
Exemplo Multithreading 19
Classificação alternativa: Data Streams Single Multiple Instruction Streams Single SISD: Intel Pentium 4 SIMD: SSE instructions of x86 Multiple MISD: No examples today MIMD: Intel Xeon e5345 SPMD: Single Program Multiple Data: Um programa paralelo em um computador MIMD; Código condicional para processadores diferentes. Stream de dados e instruções 20
Operam elemento a elemento em vetores de dados: Ex. Instruções MMX e SSE do x86 Vários dados em registradores de 128 bits; Todos os processadores executam a mesma instrução ao mesmo tempo: Cada um com um endereço diferente do dado; Simplifica a sincronização; Hardware de controle das instruções reduzido; Funciona melhor com aplicações com alto grau de paralelismo de dados. SIMD 21
Unidades funcionais com um alto grau de pipeline; Stream de dados de/para registradores vetoriais para as unidades: Dados coletados da memória nos registradores; Resultados armazenados nos registradores para a memória; Exemplo: Extensão vetorial do MIPS: 32x64 registradores de elementos (elementos de 64 bits); Instruções vetoriais: lv, sv: load/store vector; addv.d: add vectors of double Addvs.d: add scalar to each element of vector of double; Reduz significativamente a largura de banda de busca de instruções. Processadores vetoriais 22
Compiladores e arquiteturas vetoriais: Simplifica a programação de aplicações com paralelismo de dados; Declaração explícita de ausência de dependência no loop: Verificação reduzida no hardaware; Acesso a padrões regulares se beneficiam de memórias intercaladas e rajadas; Evita hazards de controle, pois evita o uso de loops; Mais gerais que extensões de mídia ad-hoc (como MMX, SSE): Se ajusta melhor a tecnologia dos compiladores. Vetor vs. escalar 23
Placas de vídeo originais: Buffer de memória para armazenar os quadros com geração de endereços para a saída de vídeo. Processamento de gráficos 3D: Originalmente em computadores de alto desempenho (ex. SGI); Lei de Moore => menor custo, maior densidade; Placas gráficas 3D para PCs e consoles de games; Graphics Processing Units: Processadores orientados para tarefas 3D; Processamento de vértices/pixel, sombras, mapeamento de texturas, etc... História das GPUs 24
Gráficos no sistema 25
Processamento de aplicações com bastante paralelismo de dados: GPUs são altamente mutlithread; Usa a troca de thread para esconder a latência de memória; Menos dependente de caches multinível; Memória gráfica é grande com alta largura de banda; Tendências das GPUs de uso geral: Sistemas de CPU/GPU hereterogêneas; CPU para código sequencial, CPU para código paralelo; Linguagens de programação/apis: DirectX, OpenGL; C for Graphics (Cg), High Level Shader Language (HLSL); Compute Unified Device Architecture (CUDA) Arquiteturas das GPUs 26
Streaming multiprocessor 8 Streaming processors Exemplo: NVIDIA Tesla 27
Stream Processors (SP): Unidades de inteiros e FP de precisão simples; Cada SP é um multithread de ajuste fino; Warp: grupo de 32 threads: Executadas em parelalo, estilo SIMD: 8 SPs x 4 ciclos de clock; Contexto de hardware para 24 warps: Registradores, PCs, etc... Exemplo: NVIDIA Tesla 28
Não casam precisamente no modelo SIMD/MIMD: Execução condicional de uma thread permite a ilusão de um MIMD: Entretanto com degradação de desempenho; Instruction-Level Parallelism Data-Level Parallelism Static: Discovered at Compile Time VLIW SIMD or Vector Dynamic: Discovered at Runtime Superscalar Tesla Multiprocessor Classificando GPUs 29
Topologias de rede: Arranjos de processadores, switches e links. Bus Ring 2D Mesh N-cube (N = 3) Fully connected Redes de interconexão 30
Redes multiestágio 31
Desempenho: Latência por mensagem (rede sem carga); Throughput: Largura de banda do link; Largura de banda da rede; Largura de banda da bisseção; Atrasos de congestionamento (depende do tráfego); Custo; Energia; Roteabilidade em silício. Características das redes 32
Linpack: algebra linear com matrizes; SPECrate: execução paralela de programas SPEC CPU: Paralelismo de tarefas; SPLASH: Starnford Parallel Applications for Shared Memory: Mix de kernels e aplicações, altamente escalável; NAS (NASA Adavanced Supercomputing): Kernels de computação de fluídos dinâmicos; PARSEC (Princeton Application Repository for Shared Memory Computers): Aplicações multithread usando Pthreads e OpenMP. Benchmarks paralelos 33
Lei de Amdahl não se aplica a computadores paralelos: Uma vez que podemos alcançar um speedup linear; Entretanto só para aplicações com escalabilidade ruim; Pico de desempenho define o desempenho observado: Vendedores adoram essa abordagem! Necessário ter cuidado com os gargalos. Falácias 34
Não desenvolver o software levando em conta a arquitetura multiprocessador: Ex. usar um único lock para um recurso composto compartilhado; Serializa o acesso, mesmo se eles pudessem ser feitos em paralelo; Use um lock de granularidade fina. Armadilhas 35
Objetivo: alto desempenho usando vários processadores; Dificuldades: Desenvolver software paralelo; Construir arquiteturas apropriadas; Muitas razões para otimismo: Mudanças no ambiente de software e aplicações; Chip-level Multiprocessors (CMP) com menor latência, maior largura de banda de interconexão; Um desafio constante para arquitetos de computador! Conclusões 36
Arquitetura e Organização de Computadores Capítulo 6 Armazenamento e outros tópicos de E/S