Buscar

Classificação de Flynn e Modelos de Programação

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Aula 4 - Classificação de Flynn e Modelos de Programação 
 
1 Taxonomia de Flynn 
Em 1966, Michael J. Flynn propôs uma taxonomia: o primeiro esquema para 
classificar computadores em configurações de paralelismo crescente. 
O esquema consistia de quatro categorias baseadas em tipos diferentes de 
fluxos usados por processadores. 
Um processador aceita dois fluxos: um fluxo de instruções e um fluxo de 
dados. 
Veja, a seguir, uma tabela que apresenta a classificação de Flynn para os 
computadores: 
 
 
Trata-se da classificação do tipo mais simples: são os monoprocessadores 
tradicionais, nos quais um único processador busca uma instrução por vez e a 
executa sobre um único item de dado. 
 
Como exemplos dessa classificação, podemos citar a arquitetura sequencial e 
a máquina de Von-Neumann. 
Técnicas como a de pipeline, a da palavra de instrução muito longa - Very 
Long Instruction Word (VLIW) - e a do projeto superescalar podem introduzir 
paralelismo em computadores SISD. 
Além disso, a tecnologia Hyper-Threading da Intel introduz paralelismo, 
criando dois processadores virtuais por meio de um único processador 
físico, o que dá a um sistema operacional habilitado a multiprocessador a 
impressão de que esteja executando em dois processadores (um a um) com 
pouco menos da metade da velocidade do processador físico. 
 
Pipeline - Na técnica de pipeline, o caminho de execução de uma instrução é dividido 
em estágios discretos, o que permite que o processador processe várias instruções 
simultaneamente, contanto que, no máximo, uma instrução ocupe cada estágio 
durante um ciclo de relógio. 
As técnicas VLIW e superescalar emitem, simultaneamente, várias instruções 
independentes (de um fluxo de instruções), que executam em diferentes unidades de 
execução. 
 
A VLIW depende de um compilador para determinar quais instruções emitir a qualquer 
ciclo de relógio, enquanto um projeto superescalar requer que um processador tome 
essa decisão. 
 
 
 
 
2. Esquemas de interconexão de processadores 
 
O esquema de interconexão de um sistema multiprocessador descreve de que 
modo os componentes do sistema (como, por exemplo, um processador e 
módulos de memória) são conectados fisicamente. 
O esquema de interconexão é uma questão fundamental para projetistas de 
multiprocessadores, porque afeta o desempenho, a confiabilidade e o custo do 
sistema. Um sistema de interconexão consiste de nós e enlaces. 
Em muitos sistemas, um único nó pode conter um ou mais processadores, seus 
caches associados, um módulo de memória e uma chave. Em 
multiprocessadores de grande escala, às vezes, abstraímos o conceito de nó 
e indicamos um grupo de nós como um único supernó. 
Nós – os nós são compostos de componentes do sistema ou de chaves que 
fazem o roteamento das mensagens entre componentes. 
Enlaces – o enlace é uma conexão entre dois nós. 
 
Uma técnica para medir a tolerância à falha de um esquema de interconexão 
é contar o número de enlaces de comunicação que devem falhar antes que a 
rede não possa mais funcionar adequadamente. Isso pode ser quantificado por 
meio da largura de bisseção (número mínimo de enlaces que precisam ser 
cortados para dividir a rede em duas metades não conectadas). 
Sistemas que têm larguras de bisseção maiores são mais tolerantes à falha 
do que aqueles que têm larguras de bisseção menores, pois mais componentes 
têm de falhar antes que o sistema inteiro tenha problemas. 
 
O desempenho de um esquema de interconexão depende, em grande parte, 
da latência de comunicação entre nós, que pode ser medida de várias maneiras, 
como, por exemplo, por meio da latência média. 
 
Outra medição de desempenho é o diâmetro da rede (distância mais curta entre 
os dois nós mais remotos do esquema de interconexão). Para determiná-lo, você 
deve considerar todos os pares de nós da rede e identificar o caminho de 
comprimento mais curto para cada par - calculado pela soma do número de 
enlaces percorridos. Só então, você identificará o maior desses caminhos. 
Um diâmetro de rede pequeno indica baixa latência de comunicação e 
desempenho mais alto. 
 
Um diâmetro de rede pequeno indica baixa latência de comunicação e 
desempenho mais alto. 
 
 
3 Arquiteturas de acesso à memória 
 
Veja, a seguir, uma figura que representa a classificação das arquiteturas 
segundo o acesso à memória: 
 
 
 
Acesso uniforme à memória - UMA 
Arquiteturas de multiprocessadores com acesso uniforme à memória - Uniform 
Memory Access multiprocessor (UMA) - requerem que todos os 
processadores compartilhem a memória principal do sistema. Arquitetura de 
memória de um monoprocessador, mas com vários processadores e módulos de 
memória. 
 
Acesso não uniforme à memória - NUMA 
Arquiteturas de multiprocessador de acesso não uniforme à memória - NonUniform 
Memory Áccess (NUMA) - mantêm uma memória global compartilhada, que pode ser 
acessada por todos os processadores. 
 
Sem acesso à memória remota - NORMA 
Multiprocessadores sem acesso à memória remota - No Remote Memory Access 
(NORMA) - são multiprocessadores fracamente acoplados que não fornecem 
nenhuma memória global compartilhada. Cada nó mantém sua própria 
memória local, e multiprocessadores NORMA implementam, frequentemente, 
uma memória virtual compartilhada comum – Shared Virtual Memory (SVM). 
 
NUMA com cache coerente (CC-NUMA) 
NUMAs com cache coerente - Cache Coherent NUMAs (CC-NUMAs) - são 
multiprocessadores NUMA que impõem coerência de cache. Em uma arquitetura 
CC-NUMA típica, cada endereço de memória física está associado a um nó 
nativo (muitas vezes, o nó nativo é simplesmente determinado pelos bits de 
ordem mais alta do endereço), responsável por armazenar o item de dado com 
aquele endereço de memória principal. 
 
Arquitetura de memória somente de cache - COMA 
Em um sistema NUMA, cada nó mantém sua própria memória local, cujo acesso 
pode ser feito por processadores de outros nós. Muitas vezes, o acesso à 
memória local é radicalmente mais rápido do que o acesso à memória global (ou 
seja, o acesso a outro nó da memória local). 
A latência de falta de cache (cache-miss tatency)(tempo requerido para 
recuperar dados que não estão no cache) pode ser significativa quando o dado 
requisitado não estiver presente na memória local. Um modo de reduzir a 
latência de falta de cache é reduzir o número de requisições de memória 
atendidas por nós remotos. 
Os multiprocessadores de arquitetura de memória somente de cache - Cache 
Only Memory Architecture (COMA) - usam uma ligeira variação da NUMA para 
abordar essa questão do posicionamento da memória. 
 
4 Programação distribuída 
A programação distribuída pode ser: 
Sequencial – conjunto de instruções executadas sequencialmente. 
Concorrente – execução de tarefas dentro de um mesmo processo ou entre 
processos que compartilham recursos. 
Paralela – existência de mais de uma CPU, destinada à execução simultânea 
de tarefas de um mesmo processo. 
 
 
5 Execução de uma tarefa 
Existem três maneiras de executar uma tarefa de forma mais rápida, quais 
sejam: 
Aumento da velocidade da CPU 
Algumas limitações estão associadas à aquisição de CPUs com maior poder de 
processamento, como o aumento de seu custo e a previsão para a velocidade 
dos processadores duplicarem a cada 18 meses (Lei de Moore), que tem sido 
mantida até os dias atuais. 
Mesmo com o aumento da frequência das CPUs, há a possibilidade de essas 
não atenderem à solução de alguns problemas. 
 
Otimização do Algoritmo 
Geralmente, conseguimos aumentar o desempenho de um sistema com a 
melhora do algoritmo. Entretanto, esse sistema pode ser comprometido 
quando não há uma solução determinística para o problema. 
 
Colaboração 
Quando pensamos em trabalhar com colaboração, devemos atentar para a 
diferença entre paralelismo e concorrência. Veja: 
• Paralelismo - Execução de uma tarefa em mais de uma CPU (os 
processadores colaboram para execução dessa tarefa); 
• Concorrência – Os processos disputamCPUs (uma ou mais). 
 
6 Aspectos técnicos da programação 
distribuída 
Veja alguns aspectos técnicos da programação distribuída: 
Interação da aplicação e do usuário com o ambiente distribuído em níveis 
diferentes; 
Suporte a plataformas heterogêneas através de uma camada de software entre 
o kernel e a aplicação (middleware); 
Problemas como custo e carência de produtos de software adequados; 
Programação paralela, utilizando bibliotecas de troca de mensagem (como, 
por exemplo, o MPI e o PVM) ou bibliotecas baseadas em memória 
compartilhada (como, por exemplo, Pthreads). 
A troca de mensagens (message passing) é o método de comunicação 
baseada no envio e recebimento de mensagens através de uma rede de 
computadores, seguindo regras de protocolo de comunicação entre vários 
processadores que possuam memória própria. 
Os processos possuem acesso à memória local. As informações, por sua 
vez, são enviadas da memória local do processo à memória local do processo 
remoto. Nesse modelo, o programador é responsável pela sincronização de 
tarefas. 
 
CONCLUSÃO

Outros materiais