Computação Paralela - Hardware e Software Paralelos
7 pág.

Computação Paralela - Hardware e Software Paralelos


Disciplina[sorocaba] Computação Paralela2 materiais18 seguidores
Pré-visualização2 páginas
Resumo (sem código)
Multitasking
­ Dá a ilusão que um único processador está executando múltiplos programas simultaneamente
­ Cada processo ganha acesso ao processador durante um intervalo de tempo
­ Depois desse tempo, o processo fica bloqueado até chegar seu turno novamente
Threading
­ Threads estão contidas nos processos
­ Elas permitem que o programador divida seu programa em tarefas independentes
­ O que se espera é que, quando uma thread é bloqueada (esperando algum recurso), outra
possa continuar trabalhando
Básico sobre cache
­ São lugares que podem ser acessados em menos tempo que outros locais da memória
­ Um cache de CPU normalmente fica no mesmo chip, ou algum outro lugar que possa ser
acessado muito mais rapidamente que na memória principal
Princípio da localidade
O acesso de uma região na memória normalmente é seguido por um acesso a outra região
próxima.
­ Localidade espacial: acessar uma região próxima
­ Localidade temporal: acessar num futuro próximo
Níveis de cache
L1, L2, L3: quanto mais próximo ao processador, mais rápido
Acertos de cache
Quando o processador precisa de uma informação e a encontra no cache
Erros de cache
Quando o processador precisa de uma informação e não a encontra no cache e acaba tendo
que buscar na memória principal (ou nos níveis mais baixos de cache)
Problemas com Cache
Quando um processador escreve dados em um cache, o valor no cache pode ficar
inconsistente com a memória principal
­ Write­through: resolve o problema atualizando a memória toda vez que o valor presente no
cache muda
­ Write­back: marca o cache como \u2018sujo\u2019. Quando esta linha for trocada por outra, o cache
escreve esta linha na memória principal e depois troca a linha pelo novo conteúdo
Formas de mapeamento de cache
­ Associativo: uma nova linha pode ser colocada em qualquer lugar do cache
­ Mapeado diretamente: cada linha de cache tem um lugar único no cache
­ Cache associativo por blocos: cada linha pode ser colocada em N diferentes lugares no
cache
Cache associativo por blocos
Quando mais de uma linha na memória pode ser mapeada para diversos lugares no cache,
também precisamos ser capazes de decidir quais linhas devem ser usadas e quais devem ser
evitadas.
Memória virtual
­ Se rodarmos um programa muito grande ou que acesse conjuntos de dados muito grandes,
provavelmente o programa ou os dados não irão caber por completo na memória principal
­ Memória virtual serve como cache para a memória secundária
­ Ela explora o princípio da localidade (espacial e temporal) e mantém apenas as partes ativas
do programa na memória
­ Swap Space: as partes que estão ociosas são enviadas para um bloco de armazenamento
secundário
­ Páginas: são blocos de dados e instruções
Tabelas de página
­ Quando um programa é compilado, suas páginas recebem um número de página virtual
­ Quando o programa roda, uma tabela de página é criada para mapear os números virtuais de
página em endereços físicos
Buffer de tradução TLB
­ Usar uma tabela de página pode aumentar significativamente o tempo de execução de um
programa
­ Há um cache de tradução de endereços: o TLB
­ Armazena um pequeno número de entradas da tabela de página em uma memória muito
rápida
­ Falha de página: tentar acessar uma página em um endereço físico válido, mas a página não
está na memória (está apenas no disco)
Paralelismo a nível de instrução
Tenta melhorar a performance do processador dividindo­o em unidades funcionais que podem
operar simultaneamente
­ Pipelining: unidades funcionais são organizadas em estágios
­ Multiple issue: múltiplas instruções podem ser iniciadas simultaneamente
­ ­ Estático: o uso das unidades funcionais é definido em tempo de compilação
­ ­ Dinâmico: o uso das unidades funcionais é definido em tempo de execução
Especulação
­ Para conseguir usar o multiple issue, o sistema precisa encontrar instruções que possam ser
executadas simultaneamente
­ Na especulação, o processador/compilador tenta adivinhar e então executa a instrução com
base nesse chute. Se o sistema \u2018adivinha errado\u2019, ele deve voltar e recalcular a instrução
Multithreading em hardware
­ Nem sempre há boas oportunidades para execução simultânea de diferentes threads
­ Multithreading em hardware fornece meios para que sistemas continuem trabalhando
enquanto a tarefa atual está bloqueada. Ex: a tarefa precisa aguardar dados serem carregados
da memória
­ Alta granularidade: o processador alterna entre as threads depois de cada instrução, pulando
threads que estão bloqueadas
­ ­ Prós: potencial para evitar desperdício de tempo por causa de bloqueios
­ ­ Contras: uma thread que está pronta para executar um grande número de instruções pode
precisar esperar para executar cada uma delas
­ Baixa granularidade: só alterna entre threads que estão bloqueadas aguardando uma
operação muito demorada
­ ­ Prós: alternar entre as threads não precisa ser necessariamente instantâneo
­ ­ Contras: o processador pode ficar ocioso em bloqueios curtos e a alternância entre threads
pode causar delays
­ Simultaneous Multithreading: é uma variação do multithreading de alta granularidade
­ Permite que múltiplas threads usem múltiplas unidades funcionais
Taxonomia de Flynn
­ SISD (Single Instruction, Simple Data): arquitetura clássica de Von Neumann. Um único
programa sem threads
­ MISD (Multiple Instruction, Simple Data): vários programas utilizando a mesma região de
memória. Não existe.
­ SIMD (Single Instruction, Multiple Data): um único programa organizado em threads, cada
uma com seu espaço de memória dedicado
­ MIMD (Multiple Instruction, Multiple Data): vários programas, cada um com seu espaço de
memória. Um sistema distribuído.
SIMD
­ Paralelismo é obtido através da divisão dos dados entre os processadores
­ Aplica a mesma instrução a múltiplos items de dados: paralelismo de dados
Desvantagens de SIMD
­ Todas as ULA\u2019s precisam executar a mesma instrução ou permanecem ociosas
­ No design clássico, elas devem operar de forma síncrona
­ As ULA\u2019s não tem armazenamento de instruções
­ Eficiente para problemas com grande volume de dados, mas não para outros tipos de
problema
Processadores vetoriais
­ Opera em vetores de dados enquanto as CPU\u2019s convencionais operam em elementos
individuais ou valores escalares
­ Registradores vetoriais: armazenam vetores de operandos e operam neles
simultaneamente
­ Unidades funcionais em pipeline e vetorizadas: a mesma operação é aplicada a todos os
elementos do vetor (ou pares de elementos)
­ Instruções vetoriais: operam em vetores em vez de escalares
­ Memória interligada: múltiplos bancos de memória, os quais podem ser acessados mais ou
menos independentemente. Distribui os elementos de um vetor pelos bancos,
reduzindo/eliminando o delay de carregar/guardar elementos sucessivos
­ Uso de grandes porções de memória e scatter/gatter em hardware: o programa acessa
elementos de um vetor localizado em lugares fixos
­ Prós: rápido, fácil de usar, compiladores podem identificar facilmente código vetorizável e
não­vetorizável
­ Contras: baixa escalabilidade, não lidam muito bem com estruturas irregulares como fazem
outras arquiteturas paralelas
Processadores gráficos (GPU\u2019s)
­ Programas gráficos utilizam triângulos, pontos e linhas para representação interna de objetos
­ Um pipeline de processamento gráfico converte a representação interna em pixels
­ Várias etapas desse pipeline são programáveis (shader functions)
­ Shader functions são implicitamente paralelas
­ GPU\u2019s costumam otimizar o desempenho usando paralelismo SIMD
MIMD (multiple instruction, multiple data)
­ Suporta múltiplas instruções simultâneas operando em múltiplas massas de dados
­ Normalmente são múltiplos nós de processamento
Sistema de memória compartilhada
­ É um conjunto de processadores autônomos conectados a um sistema de memória através
de uma rede de interconexão
­ Cada processador pode acessar cada local de memória
­ Os processadores normalmente se comunicam implicitamente acessando estruturas de
dados compartilhadas
­ A maioria dos sistemas disponíveis