Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da luz Redução do tamanho dos transistores => efeitos quânticos Paralelismo: Nível de instrução => pipeline, estrutura superescalar => fator de 10 Nível de CPUs => fator acima de 100 8.1 Características de Computadores Paralelos Natureza, tamanho e quantidade de elementos de processamento? Simples ULA ou CPU completa Pequena porção de um chip ou grande quantidade de circuitos por elemento de processamento Quanto menor o elemento de processamento, maior a quantidade de elementos que podem ser colocados em paralelo. Natureza, tamanho e quantidade de módulos de memória? Memória geralmente dividida em módulos, independentes, em paralelo. KB a MB Integradas próximas às CPUs ou em uma placa distinta Memória geralmente mais lenta do que a CPU => até quatro níveis de cache Como os elementos e processamento e memória são conectados? Principal diferença dos computadores paralelos Dois modelos principais: Estático: Os elementos são conectados de maneira fixa: estrela, anel, malha Dinâmico: elementos conectados por um chaveador de rede que faz o roteamento dinâmico das mensagens entre os componentes. Como ocorre a execução em paralelo? Computadores paralelos projetados para executar independentemente vários programas, simultaneamente => programas não conectados e sem comunicação entre eles => vários usuários. Computadores paralelos projetados para executar um único programa composto por vários processos => único usuário. Computadores com pipeline muito profunda ou com várias ULAs operando com a mesma instrução ao mesmo tempo => processamento vetorial. 147
Granulosidade: Refere se aos algoritmos e software => analogia direta com o hardware Paralelismo de grãos grandes: execução de grandes partes de software com pouca ou nenhuma conexão entre elas. Paralelismo de grãos pequenos: extremo oposto, tal como no processamento vetorial. Sistemas com poucas CPUs independentes e grandes que possuem conexões de baixa velocidade entre as CPUs => sistemas pouco acoplado. Sistemas cujos componentes são pequenos, próximos um dos outros e com interação constante, com redes de comunicação de alta velocidade => sistemas altamente acoplados. 8.1.1 Modelos de Comunicação Multiprocessadores Sistema de memória compartilhada As CPUs compartilham uma memória comum Todos os processos executados em um multiprocessador podem compartilhar um único espaço de memória virtual mapeado na memória comum. Troca de dados entre processos => leitura e escrita na memória comum. Multicomputadores 148
Sistema de memória distribuída Cada CPU possui sua própria memória, não acessível às outras CPUs. Geralmente pouco acoplados. Possuem um único espaço físico de memória para cada CPU. Troca de informação entre processos => envio de mensagens usando uma rede de conexão. Software mais complicado do que em um multiprocessador Necessária a divisão dos dados e envio para as unidades de processamento Multicomputadores grandes são muito mais fáceis e baratos de serem construídos. 149
Multiprocessadores: difíceis de serem construídos mas fáceis de serem programados Multicomputadores: fáceis de serem construídos mas difíceis de serem programados => Sistemas híbridos: Projetos escalonáveis => adição de CPUs com a manutenção da performance. Memória compartilhada implementada em hardware: multiprocessador Memória compartilhada implementada pelo sistema operacional: busca de páginas em memória remota e não do disco Memória compartilhada implementada pelo compilador e sistema de tempo real: abstração de memória compartilhada 8.1.2 Redes de Conexão 150
Redes de conexão podem conter até cinco componentes: CPUs Módulos de memória Interfaces Links Switches Interfaces: elementos da que "pegam" as mensagens de e para as CPUs e memória. Geralmente um CI ou placa conectada a cada barramento local de cada CPU. Links: canais físicos nos quais os bits são movimentados Podem ser simplex, half duplex ou full duplex. Switches: dispositivos com várias portas de entrada e várias portas de saída: utilizado para fazer o roteamento de pacotes. Topologia Descreve como os links e switches estão conectados Fanout: número de links conectados a um dado nó. Diâmetro: Maior distância entre dois nós dada pelo número de links que devem ser utilizados para a conexão. Largura de faixa de duas seções: menor largura de faixa dos links removidos para se formar duas seções com mesmo número de nós. Dimensão: determinada pelo número de escolhas que existem para sair de uma fonte e chegar a um dado destino => dimensão zero: apenas um caminho. 151
152
Chaveamento Aceita pacotes de qualquer porta de entrada, enviando o para a porta de saída adequada. Chaveamento de circuito: Antes do envio do pacote todo o caminho da fonte para o destino é reservado. Chaveamento de pacotes por armazenamento e envio: A fonte envia todo o pacote para a switch, onde ele é armazenado. Depois de armazenado a switch o envia para outra switch e assim sucessivamente. Necessidade de buffers: Buffer de entrada: Associados com a porta de entrada. Implementado como FIFO. Pode gerar um bloqueio de cabeça de linha (head of line blocking) Buffer de saída: Associados com a porta de saída. Buffer comum: única fila de buffers alocados dinamicamente para cada porta. 153
Algoritmos de Roteamento Redes com dimensão um ou mais: escolha do caminho a ser percorrido. Deadlock: vários pacotes transitando no mesmo tempo solicitam recursos de tal forma que nenhum deles é atendido, permanecendo bloqueados. Roteamento pela fonte: a fonte determina toda a rota a ser percorrida. Roteamento distribuído: cada switch determina para qual porta o pacote de chegada deve ir. Estático: mesma escolha para um dado destino Adaptativo 8.1.3 Performance Medições de Hardware Velocidade da CPU e I/O: iguais a um único processador Performance da rede de conexão: Latência: tempo de uma CPU enviar um pacote e receber a resposta Largura de faixa: Largura de faixa de duas seções Largura de faixa agregada: soma de todas as capacidades de todos os links Largura de faixa média de saída de cada CPU Medições de Software Velocidade: Quanto mais rápido um programa é executado em um sistema com n processadores do que em um com um único processador. 154
Alcançando Grandes Performances Adição de mais CPUs evitando gargalos Sistema escalonável: possibilidade de adicionar CPUs aumentando o poder de computação. Manutenção da largura de faixa média por CPU Manutenção do tempo de latência Técnicas para "esconder" o tempo de latência: Cópia de blocos de dados Prefetching Multithreading Instruções não bloqueantes 8.1.4 Software Arquitetura paralela => software paralelo Inclusão de bibliotecas numéricas especiais => apenas algumas funções utilizarão os recursos da computação paralela Inclusão de bibliotecas de comunicação e controle => responsabilidade do programador em criar e gerenciar o paralelismo dos processos. Inclusão de construções especiais em linguagens de programação já existentes Criação de uma nova linguagem especial para processamento paralelo. Modelos de Controle Uma linha de controle: Existe um único programa e um único PC, mas vários conjuntos de dados Múltiplas linhas de controle: Existem vários programas, cada um com o seu próprio PC e seu próprio conjunto de dados. 155
Granulosidade do Paralelismo Nível mais baixo: Instruções de máquina em paralelo Superescalar: Programador sem consciência do paralelismo Paralelismo a nível de bloco: Programador controla quais comandos devem ser executados seqüencialmente e quais devem ser executados em paralelo. Threads ou Processos Leves: Executados dentro do espaço de endereçamento do processo principal. Cada thread possui seu próprio PC, registradores e pilha, mas compartilham o resto do espaço de endereçamento. Múltiplos processos: Vários processos para resolver um mesmo problema. Paradigmas Computacionais SPMD: Single Program Multiple Data: Uma linha de controle para vários conjuntos de dados Pipeline: Um processo utiliza o dado do processo antecessor. Computação por fases: Vários processos em paralelo, antes de passar para a próxima fase o processo espera até que todos os demais tenham terminado Dividir e Conquistar: Um processo inicia o trabalho e cria outros processos a medida que ele puder passar algum trabalho para eles Replicated Worker ou Task farm: Existência de uma fila de trabalhos a serem executados. Cada processo retira um trabalho da fila e o executa. Métodos de Comunicação Comunicação por variáveis compartilhadas: todos os processos possuem acesso a uma determinada área de memória lógica Comunicação por mensagens: utilização de primitivas para o envio e recebimento de mensagens. Mensagem ponto a ponto: um emissor e um receptor Broadcasting: um emissor e vários receptores (todos os processos) Multicasting: um emissor e vários receptores (alguns processos) 156
Primitivas de Sincronização Exclusão mútua: Necessária para impedir que algum processo tente ler um dado enquanto outro processo escreve o dado. Semáforos, travas, mutexes, seções críticas Barreira: Capacidade do processo se bloquear até que uma determinada fase do trabalho esteja completa. 8.1.5 Taxinomia de Computadores Paralelos Categorização de arquiteturas paralelas: Proposta de Flynn Multiprocessadores UMA: Uniform Memory Acess: Cada CPU possui o mesmo tempo de acesso a cada módulo de memória. NUMA: NonUniform Memory Acess: O tempo de acesso de cada CPU varia em função do módulo de memória acessado. COMA: Cache Only Memory Acess: Memória principal de cada CPU utilizada como cache. Multicomputadores (ou NORMA NO Remote Memory Acess) 157
MPP: Massively Parallel Processors: Várias CPUs muito acopladas por uma rede proprietária de alta velocidade. COW Cluster of Workstations ou NOW Network of Workstations: Vários PCs ou workstations conectados em rede padrão, comercial. 8.2.1 Computadores SIMD Uma única unidade de controle que executa a mesma instrução em múltiplos dados. 8.2.1 Processador matricial Uma única unidade de controle fornece os sinais que comandam vários elementos de processamento. Características: Tipo do elemento de processamento Maneira como os elementos de processamento são conectados Qual a autonomia dos elementos de processamento 8.2.2 Processadores Vetoriais 158
Funções: ULA vetorial: Combinação de processamento vetorial com pipeline: Ausência de saltos quando se opera com vetores => não existem "buracos" na pipeline. 159