Dependência verdadeira de dados Dependência de recursos Dependência de ramo In-order issue Dynamic issue Vertical waste Horizontal waste Latência

11 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto

(1)

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

(2)

• 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

(3)

• 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

(4)

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

(5)

• 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

(6)

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

(7)

• 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

(8)

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

(9)

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

(10)

• 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

(11)

• 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.

Imagem

Referências

temas relacionados :