CAP 2
• Arquitetura convencional: processador, memória e caminho de dados
• Processadores atuais usam múltiplas unidades funcionais e executa múltiplas instruções no mesmo ciclo o Pipeline
Limitações
• Tempo: estágio mais lento • Predição deve ser boa Solução: múltiplos pipelines
Agendamento de instruções
• Dependência verdadeira de dados: resultado de uma operação é entrada para a próxima • Dependência de recursos: Duas operações usam o mesmo recurso
• Dependência de ramo: Instruções depois de uma condicional não podem ser preditas deterministicamente anteriormente
Mecanismos
• In-order issue: instruções são requisitadas em ordem
• Dynamic issue: instruções podem ser requisitadas fora de ordem (geralmente melhor performance)
Considerações de eficiência
• As unidades funcionais podem não ficar ocupadas o tempo todo • Vertical waste: Nenhuma unidade funcional é usada durante um ciclo
• Horizontal waste: somente algumas unidades funcionais são usadas durante um ciclo • Performance geramlente limitada
o Paralelismo limitado em instruções comuns o Dependências
o Incapacidade do programador em gerar o paralelismo • Processadores Very Long Instruction Word (VLIW)
o Maior preocupação na construção de um processador: custo de hardware e complexidade de programação o Análise em tempo de execução e empacotamento das instruções que podem ser executadas juntas
o Hardware mais simples
o Predições são mais complicadas nesse caso
o Performance altamente dependente do compilador Desenrolamento de loops
Execução especulativa Predição de ramos
o Limitados a paralelismos de 4 ramos ou 8 ramos • O gargalo geralmente é o sistema de memória
o Latência: Tempo entre o pedido de um dado e a disponibilidade do mesmo
o Largura de Banda: Taxa em que os dados são mandados da memória para o processador • Solução da latência: Caches
o Pequena
o Baixa latência e alta largura de banda o Cache hit
Porcentagem de pedidos de dados satisfeitos pelo cache Geralmente determina a performance de um programa Localidades espacial e temporal
• Solução da largura de banda: aumento do tamanho dos blocos de memória • Meios alternativos de esconder a latência
o Prefetching:
Cache miss causa paradas no programa
É necessária memória extra para guardar resultados dos prefetches Requer mais recursos de hardware de memória
o multithreading
Uso de execução concorrente para buscar dados enquanto outras threads estão processando ou buscando outros dados
Nesse caso assumimos que a memória é capaz de responder a vários pedidos e o processador muda de thread a cada ciclo
A velocidade passa de limitado por latência para limitado por largura de banda Requer mais recursos de hardware de memória
FORMULA AQUI o Localidade espacial
• Estrutura de controle de programas paralelos
o Granularidade: de nível de instrução a nível de processos
o SIMD -> uma unidade de controle central que despacha uma só instrução para todos os processadores Nem todas aplicações funcionam dessa maneira
o MIMD -> cada processador tem sua própria unidade de controle Mais hardware
• Modelos de comunicação em plataformas paralelas
o Acesso a memória compartilhada (multiprocessadores) Memória acessível por todos os processadores
UMA: Uniform Memory Access -> tempo uniforme para acessar qualquer parte da memória NUMA: Non-uniform Memory Access
Pode similar passage de mensagem o Troca de mensagens (multicomputadores)
Cada processador tem sua própria memória Pouco hardware além da rede de comunicação • Arquitetura de um computador paralelo ideal
o PRAM -> extensão de RAM
p processadores e uma memória global uniformemente acessível Clock em comum
EREW: Exclusive read, Exclusive Write CREW: Concurrent read, Exclusive Write ERCW: Exclusive read, Concurrent Write
• Concurrent write
o Common: Escreve somente se todos os valores são idênticos
o Arbitrary: Escreve o dado de um processador aleatoriamente escolhido o Priority: Segue uma ordem de prioridade pré-determinada
o Sum: Escreve a soma de todos os dados CRCW: Concurrent read, Concurrent Write
• Complexidade física de um computador paralelo ideal
o Processadores e memórias são conectados via switches
o O tempo a nível de palavras de um sistema de p processadores e m palavras tem complexidade O(pm) • Redes de interconexões em computadores paralelos
o Transmite dados entre processadores e para a memória o Interconexões são feitas de switches e links
Estáticas (direct networks)
• Links de comunicação ponto a ponto Dinâmicas (indirect networks)
• Links de comunicação e switches o Processos falam com a rede pelas interfaces de rede • Topologias de rede
o Buses
Primeiras e mais simples máquinas
Todos processadores acessam o mesmo bus Distância: O(1)
Broadcast
o Crossbars
Grid de switches
Custo: O(p²)
Problema: espaço e custo o Rede de múltiplos estágios
Compromisso entre performance e custo
Rede de múltiplos estágios Omega
• Log p estágios, p -> número de inputs/outputs • Input i é conectado com output j, então:
o Redes completamente conectadas
Cada processador é conectado com todos os outros Número de links: O(p²)
Hardware inconcebível para altos valores de p Estática
o Star connected
Todos nós conectados a um nó comum Distância: O(1)
Gargalo: nó central Estática
o Matrizes
D dimensões: 2D vizinhos Caso especial: hipercubo
• O(log p), p -> número de nós Vizinhos: log p
o Redes baseadas em árvores
Distância: O(2 log p)
Links próximos da raiz tem maior tráfego • Desenvolvendo redes de interconexão estáticas
o Diâmetro: distância entre os dois pontos mais distantes de uma rede Array linear: p-1
Matriz 2D: 2(sqrt(p) – 1) Hipercubo: log p
Árvore: log p
Completamente conectada: 1
o Largura de bissecção: mínima quantidade de links que deve ser cortados para dividir a rede em duas iguais Array linear: 1
Matriz 2D: sqrt(p) Hipercubo: p/2
Completamente conectada: p²/4 o Custo: Número de links e switches
• Coerência de cache em sistemas multiprocessadores
o Invalidação ou Atualização
Protocolo de atualização pode gerar significante overhead Overhead de falsos compartilhamentos
A maioria das máquinas atualmente usam protocolo de invalidação • Estados
o Compartilhado: Várias cópias válidas distribuídas o Inválido: O dado é inválido, necessária nova leitura o Sujo: Só existe essa cópia. Invalidação não é necessária
Sistema de cache Snoopy: Broadcast de invalidações
• Se um dado é marcado como sujo o processador pode trabalhar com ele dentro do cache sem gerar tráfego
Sistemas baseados em diretórios
• Envio de notificações somente aos processadores necessários
• Diretório mantém essas informações e informações de tag para cada dado em um cache
• Custo de comunicação em máquinas paralelas
o Junto com ociosidade e contenção, é o maior overhead de programas paralelos o Depende de várias características
Semântica do programa Topologia da rede
Manipulação e roteamento de dados Protocolos de softwares associados o Tempo total de transferência
Startup time (ts): Tempo de preparação
Per-hop time (th): Função do número de trocas. Fatores como latência de troca, delas da rede, etc...
Per-word transfer time (tw): Determinado pelo comprimento da mensagem. Fatores como largura
de banda dos links, checagem e correção de erros, etc... • m palavras e l links em redes descongestionadas
• th geralmente é pequeno
o Técnicas de roteamento
Roteamento de pacotes
• Quebra a mensagem em pacotes
• Cada pacote pode seguir um caminho, então cada um tem seu cabeçalho •
Roteamento Cut-Through
• Divide a mensagem em unidades básicas (flits) • Todos pelo mesmo caminho
• , sendo tw bem pequeno
o Modelo simplificado de custo de passagem de mensagens
Th é pequeno e m é grande
• Modelos de custo para máquinas memória compartilhada o Caches com memória finita resultam em cache thrashing
o Overheads por invalidações e atualizações são difíceis de quantificar o Localidade espacial é difícil de modelar
o Falso compartilhamento e contenção são difíceis de modelar • Mecanismos de roteamento para redes de interconecção
o Roteamento pode evitar hot-spots: pacote é inicialmente enviado para um destino aleatório
• Técnicas de mapeamento em grafos
o Embutir um padrão de comunicação conhecido em uma dada topologia de interconexão o Portar um algoritmo de uma topologia para outra
o Métricas
Congestão do mapeamento: Número máximo de arestas mapeadas sobre qualquer aresta Dilatação do mapeamento: Número máximo de arestas em que qualquer aresta é mapeada Expansão do mapeamento: Razão entre o número de nós do grafo novo em relação ao antigo o Incorporação de um array linear em um hipercubo
Array 2d elementos em hipercubo de d dimensões
i -> G(i,d)
Exemplo
• As métricas são todas 1
o Incorporação de uma matriz em um hipercubo
Exemplo
o Incorporação de uma matriz em um array linear
o Incorporação de um hipercubo em uma matriz 2D
Cada subcubo com sqrt(p) nós é mapeado em uma linha da matriz de sqrt(p) nós
DUVIDA EXERCICIO
Multithreading and prefetching are critically impacted by the memory bandwidth. Consider the following example: Consider a computation running on a machine with a 1 GHz clock, 4-word cache line, single cycle access to the cache, and 100 ns latency to DRAM. The computation has a cache hit ratio at 1 KB of 25% and at 32 KB of 90%. Consider two cases: _rst, a single threaded execution in which the entire cache is available to the serial context, and second, amultithreaded execution with 32 threads where each thread has a cache residency of 1 KB.
If the computation makes one data request in every cycle of 1 ns, you may notice that the _rst scenario requires 400MB/s of memory bandwidth and the second, 3GB/s.
CAP 3 – Princípios de Design de Algoritmos Paralelos (//) • Decomposição, tarefas e grafo de dependências
o Decompor o problema em tarefas que podem ser executadas em // o Existem várias maneiras de decompor um problema
o Ilustração: grafos
o Granularidade da decomposição
O número de tarefas determina a granularidade • Granularidade fina: Muitas tarefas • Granularidade grossa: Poucas tarefas o Grau de concorrência
Número de tarefas que pode ser executado em paralelo
Máximo grau de concorrência: quando o grau de concorrência varia ao longo do programa Grau médio de concorrência
• Caminho crítico
o Caminho: sequência de processamento
o Comprimento: Comprimento do maior caminho de um grafo de dependências de um programa // • Limites de performance em //
o O grau de concorrência é limitado para um dado problema
o A performance também é limitada pela troca de informações entre tarefas • Grafo de interação entre tarefas
o Comunicação entre tarefas
o Grafo de dependência: dependências de controle o Grafo de interação: dependência de dados o Granularidade e comunicação
Geralmente se a granularidade é mais fina, a comunicação é maior • Processos e mapeamento
o Em geral o número de tarefas de uma decomposição excede o número de elementos de processamento disponíveis Algoritmo // deve fornecer um mapa de tarefas para processos
• Crítico para a performance de um algoritmo
• Determinado pelos grafos de dependência E de interação
o Grafo de dependência: Garante que o trabalho é igualmente distribuído entre os processos o Grafo de interação: Garante mínimo de interação
• Minimizar o tempo de execução em paralelo
o Mapeamento de tarefas independentes para diferentes processos
o Tarefas do caminho crítico devem ir o mais rápido possível para os processadores o Mapeamento de tarefeas com densa comunicação para o mesmo processo o Conflitantes entre si
• Técnicas de decomposição o Decomposição recursiva
Geralmente utilizados em problemas solúveis pela técnica de divisão e conquista Quicksort
o Decomposição de dados
Identificação dos dados em que as operações são feitas Divisão desses dados em várias tarefas
Pode ser dividido de várias formas
Criticamente impactante para a performance do algoritmo Input data
Output data Intermediate data Regra do “dono calcula”
• O processo que tem um determinado dado é responsável pelos cálculos relacionados a ele o Decomposição exploratória
Teste de todas as possibilidades até encontrar a solução o Decomposição especulativa
As dependências entre tarefas as vezes não são conhecidas a priori
Abordagem conservativa: identificação de tarefas independentes somente quando é garantido que elas não tem dependências. Pode ocasionar pouca concorrência
Abordagem otimista: agendamento das tarefas mesmo quando ele pode potencialmente estar errado. Precisa de um mecanismo de roll-back
o Decomposição Híbrida
Uso de mais de um tipo de decomposição • Características de tarefas
o Geração de tarefas
Geração estática de tarefas: Tarefas concorrentes podem ser identificadas a priori. Problemas regularmente estruturados. Geralmente decomposição de dados ou decomposição recursiva
Geração dinâmica de tarefas: Tarefas geradas em tempo de execução. Geralmente decomposições exploratória e especulativa
o Tamanho de tarefas
Uniforme: Tarefas do mesmo tamanho
Não Uniforme: pode ser determinada ou estimada a priori ou não o Tamanho dos dados associados às tarefas
Pequeno: A comunicação entre processos pode ser feita facilmente Grande
• Características das interações entre tarefas
o Interações estáticas: Conhecidas a priori. Relativamente mais simples de codificar nos programas o Interações dinâmicas: Não são conhecidas a priori. Mais difícil de codificar
o Interações regulares: Tem um padrão definido. Os padrões podem ser explorados para melhorar a performance. o Interações irregulares: Não tem topologias bem definidas
o Somente leitura: Somente leitura dos dados associados a outras tarefas o Leitura e escrita: Lê e pode escrever sobre os dados. Mais difíceis de codificar
o Interação One-way: Pode ser iniciado e finalizado por uma só das tarefas. Mais difíceis de ser codificadas o Interação Two-way: Requer participação das duas tarefas
• Técnicas de mapeamento de tarefas para processos o Minimizar overheads de comunicação e ociosidade o Ociosidade
Mapeamento estático: Mapeamento feito a priori. Boa estimativa do tamanho de cada tarefa • Mapeamento baseado em particionamento de dados
o Distribuição em blocos de matriz
• Mapeamento baseado no particionamento do grafo de tarefas • Mapeamento híbrido
Mapeamento dinâmico: Mapeamento em tempo de execução. Tarefas geradas em tempo de execução ou tamanhos desconhecidos
• Centralizado: mestre e escravos o Mestre pode se tronar um gargalo
o Processo pode pegar algumas tarefas de uma vez • Distribuído:
o Cada processo mande e recebe trabalho de outros o Quem inicia a transferência de trabalho?
o Quanto trabalho é transferido?
o Quando uma transferência é desencadeada? • Minimização de overheads de interação
o Maximizar a localidade de dados o Minimizar o volume de troca de dados o Minimizar a frequência de interações o Minimizar contenções e hot-spots o Overlap de interações e instruções o Overlap de interações e interações
o Uso de comunicação em grupo ao invés de P2P • Modelos de algoritmos paralelos
o Modelo de paralelismo de dados: Tarefas são estaticamente mapeada a processos e cada tarefa faz operações similares em dados diferentes
o Modelo de grafo de tarefas: Começando com um grafo de dependências. A relação entre tarefas é usada para promover localidade e reduzir custos de interação
o Modelo de mestres e escravos: Alguns processos geram trabalho e alocam para os trabalhadores estática ou dinamicamente
o Modelo de pipeline: Uma linha de dados passa através de vários processos e cada um deles faz uma tarefa sobre ele.