Você está na página 1de 22

1

ELEMENTOS BÁSICOS E MODELO DE VON NEUMANN

Princípios básicos:

• Os dados e as instruções são armazenados em uma única memória de leitura e


escrita. ➔ Conceito de programa armazenado!
• Armazenar na memória as instruções e todas as informações necessárias para a
execução da tarefa.
• A execução de instruções ocorre de modo sequencial (exceto quando a sequência é
explicitamente alterada de uma instrução para outra).
• Ao processar o programa, as instruções devem ser buscadas diretamente na memória.
• Digital e binário.
CPU

Figura 1.: Esquema de blocos da


arquitetura de Von Neumann

CPU: unidade central de processamento. Controla a operação do computador e


desempenha as funções de processamento dos dados. É composta pela unidade de controle
e unidade lógica e aritmética (ULA), além de registradores.
• Unidade funcional de controle: envia sinais de comando. Busca instrução, controla
carga em registradores, entrada de dados na ULA, seleção de operação na ULA...

o Contador de programa (PC):


indica a próxima instrução a ser
buscada.

o Registrador de instrução:
armazena a instrução
executada no momento.

• Unidade funcional de processamento: execução das instruções armazenadas.


o Unidade lógica e aritmética (ULA): realiza operações de lógica (E, NOT, OR,
XOR) e aritméticas (SUM, SUB, MUL, DIV) entre dois operandos.
o Acumulador: armazena um operando e/ou resultado fornecido pela ULA.
2

Figura 2: esquema
detalhado da CPU.

Memória: armazenamento de dados e instruções. Memória é dividida em “palavras”


(tamanho de bits). Cada palavra ocupa uma posição de memória e é identificada por um
endereço. Conteúdo da posição de memória pode representar dados ou instruções.
E/S: dispositivos de entrada e saída de dados. Entrada: teclado, mouse. Saída: monitor,
impressora.
Barramentos: caminhos físicos que permitem o transporte de dados entre os elementos da
parte operacional, memória, E/S. São caracterizados por sua largura em bits, devendo
corresponder ao comprimento dos elementos transportados (dados, endereço, controle).
Exemplo: um processador de 8 bits necessita de 8 linhas para transmitir os 8 bits em
paralelo.
• Barramento de
dados: transmite dados
entre todas as unidades.

• Barramento de
endereços: usado para
selecionar
origem/destino de
dados.

• Barramento de
controle: sincroniza as
atividades do sistema,
conduz status e
informação de controle
de/para processador.
3

INSTRUÇÕES
• Uma instrução é um conjunto de bits devidamente codificados que indica ao
computador que sequência de microoperações ele deve realizar.
• Geralmente consiste em um código de operação (identifica o que faz a instrução) e
endereços (de onde vem os operandos/onde vão os resultados).

Figura 4 – Formato de
instrução simples

• Um programa é constituído de uma sequência pré-determinada de instruções que deve


ser seguida para que seja executada uma tarefa.
Exemplo: formato OPERAÇÃO OPERANDOS ➔ ADD R1, R2 (soma R1 e R2, salva em R1).
• Linguagem de máquina ➔ código binário que representa as instruções a serem
executadas pela máquina.
• Linguagem de montagem ➔ representação simbólica, associa mnemônicos aos códigos
de operação e nomes aos operandos.
As instruções são classificadas por semelhança de propósito e formato. Exemplos:
• Transferência de dados ➔ LOAD, STORE
• Aritméticas e lógicas ➔ ADD, SUB, OR, AND
• Testes e desvios ➔ JUMP, JUMP ON ZERO

O conjunto de instruções que um determinado computador reconhece e pode executar é


chamado de conjunto de instruções. A ISA (arquitetura do conjunto de instruções) é a
interface entre hardware/software, é caracterizada pelas instruções disponíveis, modos de
endereçamentos, tipos de dados...
O que um programador precisa saber para programar em baixo nível (Assembly)?
• Modo de representação dos dados ➔ binário, little-endian, big-endian, tamanho da
palavra?
• Modos de endereçamento ➔ direto, indireto...
• Conjunto de registradores ➔ uso geral, especiais.
• Conjunto de instruções ➔ quais estão disponíveis/podem ser executadas?
• Mecanismo de interrupções ➔ quais eventos são sinalizados, como são sinalizados
e tratados?
4

NÚMERO DE ENDEREÇOS
Ao longo dos anos as arquiteturas de computadores foram projetadas com diferentes
conjuntos de instruções:
Arquitetura de 4 endereços

OP E1 E2 E3 E4 // OP ➔ operação / E1 e E2 ➔ fontes / E3 ➔ destino / E4 ➔ próxima instrução


• Vantagens: mais fácil de compreender, é mais explícita; não necessita de instrução
explícita de desvio, pois traz o endereço da próxima instrução; consegue manipular
dados e fazer um desvio de fluxo em uma única instrução.
• Desvantagens: instruções muito grandes, ocupam espaço na memória e aumentam o
custo.
Na prática os programas são sequenciais, então acabou surgindo a arquitetura de 3
endereços.

Arquitetura de 3 endereços

OP E1 E2 E3
• Necessita de um registrador específico para localizar o endereço da próxima instrução
➔ program counter (PC).
• Vantagens: reduz o tamanho da instrução, ocupa menos espaço na memória.
• Desvantagens: necessidade de instruções explícitas de desvio; não se pode mais
manipular dados e fazer desvio de fluxo em uma única instrução.
Entretanto, ainda usam muita memória e, na maioria das vezes, um dos operandos fonte e
o destino indicam o mesmo endereço. A modificação da indicação dos operandos deu
origem à arquitetura de 2 endereços.
Arquitetura de 2 endereços
OP E1 E2
• E1, além de operando fonte, também é o destino.
• Vantagens: reduz ainda mais o tamanho da instrução.
• Desvantagens: como o resultado é armazenado em um operando fonte, o dado anterior
deste operando é perdido; necessário criar instruções de movimentação de dados que
permitem copiar operandos de uma posição para outra.
Com a criação de registradores especiais, pode-se reduzir ainda mais o número de
endereços, criando-se então as arquiteturas de 1 endereço.

Arquitetura de 1 endereço
OP E1
• E1 é um operando fonte, o outro operando é implicitamente o acumulador (AC).
• AC é tanto operando fonte quando destino.
• Vantagens: utiliza um registrador local, portanto economiza os acessos à memória,
resultados intermediários não precisam ser lidos/escritos na memória a cada utilização;
registrador específico (mais rápido) otimizado para a função.
5

• Desvantagens: necessidade de instruções de movimento específicas de acordo com o


sentido da transferência de dados. Exemplo: da memória para o AC ➔ LDA (LoaD AC).
Do acumulador para a memória ➔ STA (STore AC).
Arquitetura de 0 endereços
OP
• Não existe nenhuma referência explícita a endereços de memória onde estejam
localizados os operandos.
• Uso de pilha ➔ região específica de memória com determinado mecanismo de acesso.
Os operandos são sempre retirados do topo da pilha e o resultado da operação sempre
é colocado no topo da pilha. PUSH ➔ coloca operandos no topo. POP ➔ retira
operandos/resultado do topo.
• Vantagens: conjunto de instruções mais simples; controle não precisa decodificar a
instrução para saber quais registradores serão utilizados nas operações pois sempre
será o topo da pilha.
• Desvantagens: menor flexibilidade.
Comentários gerais sobre o número de endereços
Observa-se que com a diminuição do número de endereços são criadas novas instruções
(mov. e manip. de dados) e o programa precisa de um número maior de instruções para
executar uma mesma tarefa. Entretanto, essas instruções são menores, o que em termos
líquidos proporciona uma economia de bits. Além disso, com instruções simples, a própria
Unidade de Controle será mais simples, pequena e barata de produzir.

Figura 5 – Exemplo comparativo de uma


tarefa executada com diferentes números de
endereços
6

MODOS DE ENDEREÇAMENTO
Uma referência a um operando em uma instrução pode conter tanto o valor do operando
quanto o endereço do operando. Grande parte das instruções contem operandos, portanto
é necessário algum modo de especificar onde eles estão e como os bits de um campo de
endereço são interpretados para achar o operando.
Imediato

• Forma mais simples de endereçamento. O valor do operando é especificado


diretamente na instrução.
• Exemplo: OPERANDO = A ➔ ADD 5
Adiciona 5 ao conteúdo do acumulador. 5 é um operando que vem no campo de endereço
da instrução.
• Vantagens: nenhum acesso à memória é necessário; rápido (acesso a registrador).
• Desvantagens: o tamanho do operando é restrito ao tamanho do campo de endereço.

Direto
• O campo de endereço contém o endereço real/efetivo (EA) do operando. Comum nas
primeiras gerações.
• Exemplo: EA = A ➔ ADD A
Procura na posição A da memória pelo operando e adiciona o conteúdo da posição A da
memória no acumulador.
• Vantagens: apenas um acesso à memória (busca do operando).
• Desvantagens: espaço de endereçamento limitado pelo campo.

Indireto
• O campo de endereço aponta para uma posição de memória que, por sua vez, contém
o endereço do operando.
• Surgiu como solução para a limitação da faixa de endereços que podem ser
especificados no endereçamento direto.
• Exemplo: EA = (A) ➔ADD (A)
Busca em A, encontra o endereço do operando (A) e busca em (A) pelo operando.
Adiciona o conteúdo do endereço efetivo ao acumulador.
• Vantagens: mais espaço de endereçamento (2n).
• Desvantagens: dois acessos à memória: 1) obter o endereço do operando. 2) obter o
valor.

Endereçamento por registrador


• Operando se encontra em um registrador indicado no campo de endereço da
instrução.
• Semelhante ao endereçamento direto. A diferença é que o campo de endereço se refere
a um registrador e não endereço na memória principal.
• Exemplo: EA = R ➔ ADD R
Procura pelo registrador R no banco de registradores e adiciona o conteúdo do
registrador R no acumulador.
• Vantagens: não há acesso à memória (mais rápido); o campo de endereço não precisa
ser grande.
7

• Desvantagens: espaço de endereçamento limitado; o número de registradores é muito


limitado, dessa forma o método precisa ser usado de forma muito eficiente para obter
uma economia real de tempo (exemplo: armazenar resultados intermediários de um
cálculo).
Endereçamento por registrador indireto
• Operando está na posição de memória apontada pelo registrador indicado no campo
de endereçamento.
• Semelhante ao endereçamento indireto. A diferença é que o campo de endereçamento
se refere a um registrador e não a uma posição de memória.
• Exemplo: EA = (R) ➔ ADD (R)
• Vantagens: assim como no endereçamento indireto, aumenta a faixa de endereçamento
(2n). Além disso, só faz um acesso à memória.
• Desvantagens: número limitado de registradores.

Endereçamento por deslocamento


• Operando se encontra na memória em uma posição deslocada com relação ao endereço
fornecido no campo de endereço.
• Combinação de endereçamento direto com registrador indireto. Existem dois campos de
endereço, um explícito e outro (geralmente) implícito. O valor explícito é usado
diretamente (valor = A) e o implícito especifica um registrador cujo endereço é adicionado
a A para produzir o endereço efetivo.
• Exemplo: EA = A + (R) ➔ ADD A
• Vantagens: flexibilidade; pode usar um registrador default (economia de bits na
instrução).
• Desvantagens: complexidade.

Resumo de modos de endereçamento


8

Figura 6 – Modos de endereçamento.

CICLO DE EXECUÇÃO DE INSTRUÇÃO


A execução de uma instrução segue 5 passos comuns:
1) Busca da instrução (e incremento do PC)
2) Decodificação da instrução e leitura dos operandos
3) Execução (lógica/aritmética) ou cálculo do endereço
4) Acesso à memória
5) Escrita em registrador
Uma instrução não precisa obrigatoriamente passar por todos os estágios.

1) Busca da instrução

• PC aponta para a instrução a ser buscada ➔


endereço é movido para o registrador de
endereço de memória (REM/MAR) e
colocado no bus de endereço ➔ UC requisita
leitura na memória ➔ resultado no bus de
dados e copiado para o registrado de dados
da memória (RDM/MBR) ➔ instrução
movida para o registrador de instrução ➔
incrementa PC para buscar a próxima
instrução.
• Todas as instruções requerem esse passo.
Figura 7 – Etapa de busca de instrução.
9

2) Decodificação da instrução e leitura dos operandos

• Campos da instrução são decodificados ➔ código de operação determina o tipo de


instrução, campo de endereço identifica de onde vem os operandos/onde vão os
resultados.

3) Execução

• Tipo da instrução (código de operação) determina o que acontece nesse estágio.


• Lógica e aritmética ➔ ULA calculado a operação.
• Leitura e escrita ➔ ULA calcula o endereço efetivo.

4) Acesso à memória

• Somente instruções de leitura/escrita passam por esse estágio.


• Leitura ➔ dado contido no endereço de memória é lido (foi processado no estágio
anterior).
• Escrita ➔ dado contido no registrador fonte é escrito na memória (foi processado no
estágio anterior).

5) Escrita em registrador

• Executada pelas instruções que precisam escrever resultado da operação em um


registrador destino.
• Exemplos: instruções de lógica/aritmética.

COMPONENTES DE UM PROCESSADOR
• Caminho de dados
o Responsável pela manipulação dos dados (armazenamento, aritmética).
o Composto de blocos funcionais.
o Contém todos os registradores e unidades funcionais.
• Unidade de controle
o Responsável por informar ao caminho de dados o que necessita ser feito (como
executar determinada instrução).
o Composta por sinais de controle.
Como projetar um processador?
1) Analisar o conjunto de instruções.
2) Selecionar os componentes do caminho de dados e estabelecer a metodologia de
temporização.
3) Construir o caminho de dados.
4) Analisar a implementação de cada instrução para determinar os sinais de controle que
realizam a transferência dos dados.
5) Construir a unidade de controle.
10

Seleção de componentes
• Program counter (PC) • Memória

• Banco de registradores
• ULA

• Multiplexador
Figura 8 –
Exemplo de
caminho de
dados

• Temporização
Clock determina quando os sinais de controle terão efeito.
Implementações possíveis:
o Monociclo ➔ todos os estágios executados em um ciclo de clock.
o Multiciclo ➔ cada estágio executado em um ciclo de clock.
o Pipeline ➔ multiciclo com execução sobreposta das instruções.

Figura 9 – Comparação entre diferentes


implementações de ciclo.
11

MICROARQUITETURA MONOCICLO
• Ciclo de clock deve ser longo o suficiente para permitir a execução de todos os estágios
do ciclo de instrução sem interrupções.

Figura 10 – Monociclo

Ineficiente
• Todas as instruções são tão lentas quanto a mais lenta.
• Um recurso precisa ser replicado se for usado mais de uma vez na mesma instrução.
• Difícil implementar instruções complexas.
• Sempre necessário otimizar o pior caso, não adianta implementar técnicas para reduzir
a execução dos casos comuns.

DESEMPENHO
• Fluxo/vazão/throughput ➔ número de tarefas executadas por vez. Trabalho total executado em
determinado tempo.
o Interessante quando se tem vários programas executando concorrentemente e a medida é o
tempo de execução.
• Tempo de execução/tempo de resposta ➔ tempo necessário para executar um programa.
o Interessante quando a medida está relacionada a uma única aplicação.
• Tempo decorrido ➔ tempo total. Não é uma boa métrica.
• Tempo de CPU ➔ tempo em que o processador está computando.
o Não conta tempo de E/S, execução de outros programas.

Para aumentar o desempenho é necessário


diminuir o tempo de execução!

Desempenho relativo
Se máquina X é n vezes mais rápida:
12

Clock
• Período ou tempo de ciclo ➔ medida em segundos
• Frequência ➔ ciclos por segundo (Hertz). F = 1/p. 1 Hz = 1 ciclo por segundo.

Como melhorar o desempenho?


• Reduzir o tempo de ciclo / aumentar a frequência de clock
• Reduzir o número médio de ciclos por instrução
• Entretanto, reduzir o número de ciclos pode implicar em aumentar o tempo de ciclo, assim
como reduzir o tempo de ciclo pode aumentar o número de ciclos.

Ciclos por instrução


• CPI ➔ número médio de ciclos de clock que uma instrução leva para ser executada.
nº de ciclos
CPI =
nº de instruções

Resumo de cálculo de desempenho

Observações
O número de ciclos não é necessariamente igual ao número de instruções, exceto quando
estamos falando de arquitetura monociclo.
Instruções diferentes levam tempos diferentes para serem executadas ➔ multiplicação
demora mais que adição, acesso à memória demora mais que acesso à registradores...
Mudar o tempo de ciclo geralmente muda o número de ciclos requeridos por várias
instruções.
13

Dependências do desempenho

Lei de Amdahl
• Aumentar um aspecto do computador irá aumentar desempenho total na mesma
proporção da melhora desse aspecto? ➔ NÃO.
• O ganho de desempenho possível de um dado melhoramento é limitado pela fração de
tempo que a característica melhorada é usada.
• Por exemplo, se o programa precisa de 20 horas usando um único núcleo de
processamento, e a parte específica de um programa que demora uma hora para
executar não pode ser paralelizado, enquanto as 19 horas restantes (95%) do tempo da
execução pode ser paralelizado, independente de quantos processadores são dedicados
a execução paralela deste programa, o tempo de execução mínima não pode ser menor
que aquela crítica uma hora. Por isso o aumento de velocidade é limitado em no máximo
20x.
• Importante investir recursos proporcionais onde o tempo é gasto!
14

Métrica MIPS
• MIPS ➔ milhões de instruções por segundo.
• Alternativa à medida de desempenho apenas por tempo. Não se deve limitar a
avaliação de desempenho em apenas um aspecto (tempo, clock, CPI...)
• Computadores mais rápidos tem MIPS mais altas.
• Restrições:
o Não se pode comparar computadores com ISAs diferentes. ➔ não leva em
consideração as características de implementação das instruções.
o Varia de acordo com o programa executado no mesmo computador.
o Se um novo programa executa mais instruções, mas cada instrução é mais
rápida, MIPS pode variar independente do desempenho.
nº de instruções
MIPS =
Tempo de execução x 106
15

COMPLEXIDADE DAS INSTRUÇÕES


Instruções complexas
• Realizam muitas sub-operações. Exemplos: inserir elementos em uma lista duplo-
encadeada, fazer cópia de strings.
• Vantagens: menor tamanho de código, uma instrução realiza o trabalho de várias
simples. Aumenta a produtividade do programador. Compilador é mais simples.
• Desvantagens: hardware mais complexo. Compilador tem pouca oportunidade para
otimizar o código.
Instruções simples
• Realiza pequenas sub-operações. Exemplo: adição, comparação.
• Operações mais complexas são construídas a partir das mais simples.
Semântica

• Gap/lacuna semântica ➔ distância entre as operações disponíveis em linguagens de alto


nível e as operações disponíveis pelo hardware (linguagem de montagem).
16

RISC x CISC
RISC
• Reduced instruction set computer.
• Conjunto simples e reduzido de instruções.
• Hardware mais simples, menor
custo, maior clock.
• Grande número de registradores de
propósito geral ou otimização do
uso de registradores pelo
compilador.
• Operações registrador – registrador
➔ diminui acesso à memória.
• Poucos modos de endereçamento.
• Compilador tem mais espaço para otimização.
• Otimizada para pipeline ➔ operações por instrução menores e mais previsível, CPI
próxima a 1.
• Geralmente utilizado em sistemas embarcados.
CISC
• Complex instruction set computer
• Conjunto de instruções mais
complexo.
• Para acomodar instruções mais
complexas a UC precisa ser mais
complexa ➔ maior custo
• Muitos modos de endereçamento.
• Mais próxima de linguagens de alto
nível.
• Desejo de simplificar os compiladores e de melhorar o desempenho. Entretanto, a
complexidade das instruções torna difícil a otimização do código pelo compilador.
• Um programa CISC apresentar um número menor de instruções em código simbólico de
máquina, porém o número de bits de memória que ele ocupa pode não ser menor.
• Geralmente utilizado em PCs, MACs, mainframes.
Observações gerais
• Arquiteturas RISC e CISC são incompatíveis ➔ um programa desenvolvido para um tipo
de máquina não roda na outra.
• Atualmente nenhum processador segue FIELMENTE uma das duas. Há incorporação de
características de cada.
Arquiteturas híbridas
• Executam operações CISC, mas internamente funcionam como RISC ➔ quebram
instruções e processam novamente.
• Principal CISC atual (x86) traduz em hardware o ISA CISC para ISA RISC.
o Vantagens ➔ simplifica o núcleo do processador; instruções traduzidas poder ser
armazenadas em memória, aumentando o desempenho; maior abstração e
flexibilidade em programar para ISA CISC.
17

Resumo de RISC x CISC

LEI DE MOORE
O número de transistores em um chip dobrará, pelo mesmo custo, a cada 18 meses. Vem
guiando o desenvolvimento de hardware por décadas.
Em algum momento será atingido o limite físico do material utilizado (silício) ➔ busca de
novos materiais, computação quântica...

MICROARQUITETURA MULTICICLO
• Objetivo ➔ uma instrução demorar apenas o tempo necessário para ser executada.
• Solução ➔ dividir instrução em passos, um por ciclo de clock. Cada passo da instrução
agora é executado em um ciclo diferente. Instruções mais rápidas precisam menos ciclos.
• Agora um recurso pode ser usado mais que uma vez, registradores armazenam os
valores entre ciclos. Uma unidade funcional pode ser usada mais de uma vez por
instrução, desde que em diferentes ciclos.
• Sinais de controle não são mais determinados somente pela instrução. Cada passo da
instrução gera seu próprio sinal de controle ➔ máquina de estados finitos.
• Limitações do multiciclo
o Alguns recursos de hardware ficam ociosos durante diferentes fases da instrução.
o Exemplo ➔ Busca não está operando enquanto a instrução está sendo decodificada.
A maioria do caminho de dados não está operando enquanto está acontecendo
acesso à memória.
18

PIPELINE
• Múltiplas instruções são sobrepostas
temporalmente na execução.
• Se uma instrução não estiver usando
alguns recursos na sua fase de
processamento, pode-se usar os
recursos disponíveis para processar
outras instruções ➔ resolve o
problema de ociosidade do multiciclo.
• Exemplo ➔ enquanto uma instrução é
decodificada já se pode buscar a
próxima.
• Pipeline aumenta o desempenho ao
aumentar a vazão/throughput de
instruções e não ao diminuir o tempo
de execução de uma instrução
individual.
Speedup
• Métrica para relacionar o aumento de desempenho quando uma tarefa é executada.
• Definido pela relação da latência total e vazão. No exemplo da figura ➔ Speedup =
8h/3.5h = 2.3x.
• Tempos não balanceados por estágio reduzem o desempenho do pipeline.
Como implementar o pipeline em um projeto?
• Dividir a execução da instrução em estágios distintos, de preferência com o mesmo
tempo de execução.
• Garantir que haja recursos de hardware para processar uma instrução em cada estágio.
• Processar uma instrução diferente em cada estágio.
19

Necessário adicionar registradores para guardar valores intermediários e permitir que


porções de um único caminho de dados sejam compartilhadas durante a execução de uma
instrução!
Pipeline ideal
• Todos os estágios são utilizados.
• Uma operação realizada em um estágio é independente das outras.
• O tempo de processamento em cada estágio é o mesmo.
Pipeline real
• Nem todas as instruções necessitam de todos os estágios.
• Instruções não são independentes umas das outras ➔ necessário detectar e resolver
dependências. Exemplo: um resultado de uma operação é o operando de outra.
• Nem todos os estágios realizam a mesma quantidade de trabalho, difícil balancear.
Principais problemas no pipeline
• Dependência/conflito estrutural
o Problema: acesso simultâneo à memória por 2 ou mais estágios. Solução: cache de
dados e instrução separados.
o Problema: uso simultâneo de uma mesma unidade funcional. Solução: replicar a
unidade ou fazer pipeline dessa unidade.
• Dependência/conflito de dados
o Problema: instruções dependem de resultados de instruções anteriores ainda não
completadas. Solução: pipeline parado por um certo número de ciclos; caminho de
dados alternativos ➔ adiantamento dos dados.
• Dependência/conflito de controle
o Problema: desvios condicionais. Solução: parar o pipeline até que o resultado do
desvio seja conhecido; fazer predição (estática ➔ compilador, dinâmica ➔ hardware)
de desvios.
• Tratamento de exceções e interrupções
Superpipeline
• Executar dois estágios em um único ciclo de clock.
• Duas operações não sobrepostas executadas em meio ciclo cada.
20

PROCESSADORES SUPERESCALARES
• Várias instruções possam ser iniciadas
e executadas simultaneamente. No
pipeline simples apenas estágios
diferentes podiam ser executados em
um mesmo momento, agora várias
instruções executam paralelamente no
mesmo ciclo.
• Processador 2-way: duas instruções
buscadas e executadas por ciclo ➔
duplicação de recursos (ULA,
multiplexadores), portas e
registradores extras, barramentos.
• Instruções são despachadas para
execução somente se não possuem
dependências (estrutura, dados, controle).
Janela de instruções
• Isola os estágios de busca e decodificação das instruções ➔ modelo de despacho fora
de ordem.
• Centralizada: armazena todas as instruções já decodificadas e ainda não despachadas
para execução.
• Distribuída pelas unidades funcionais: só armazena as instruções destinadas à unidade
funcional associada a ela.
o Algoritmo de Tomasulo ➔ despacho sequencial de instruções fora de ordem. Realiza
a difusão dos resultados produzidos pelas unidades funcionais através de um
barramento global.

NÍVEIS DE PARALELISMO
Instrução
• Granulosidade fina.
• Paralelismo entre as instruções ➔ pipeline, superpipeline, superescalar.
Tarefas
• Granulosidade média.
• Paralelismo entre threads (divisões de um processo principal).
• Arquiteturas SMT (simultaneous multithreading).
Máquinas e processos
• Granulosidade grossa.
• Paralelismo entre processos.
• Computação paralela.
• Multiprocessadores e multicomputadores.
21

ARQUITETURAS PARALELAS
SISD
• Single instruction stream, Single data
stream.
• Computadores convencionais (seriais).
Exemplo: computadores von Neumann.
• Instruções são buscadas serialmente,
porém os estágios podem ser sobrepostos (pipeline).
• Pode-se saber o que está ocorrendo exatamente a cada instante de tempo e reproduzir
o processo passo-a-passo mais tarde.
MISD
• Multiple instruction stream, Single
data stream.
• Vários processadores onde cada um
recebe instruções distintas, mas
operam sobre o mesmo conjunto de
dados. Cada processador tem seu
controle e unidade de
processamento, mas dividem a
mesma memória. Difícil de ser
encontrada.
• Poderia ser utilizada para aplicar diferentes algoritmos em um mesmo dado (ex.:
múltiplos algoritmos de criptografia em uma mensagem).
SIMD
• Single instruction stream, Multiple
data stream
• Processadores matriciais, paralelos
e associativos. Exemplos:
processadores gráficos, vetoriais.
• Uma unidade de controle envia um
fluxo de instruções para vários
processadores. Os processadores
recebem a mesma instrução ao
mesmo tempo e operam sobre diferentes fluxos de dados.
MIMD
• Multiple instruction stream, Multiple
data stream.
• Vários processadores, cada um
controlado por uma unidade de
controle. Recebe instruções
diferentes e operam sobre fluxo de
dados diferentes. Ex.:
multiprocessadores e
multicomputadores.
22

Resumo de classificação de arquiteturas paralelas

Modelos de acesso à memória


Em computação paralela a memória pode ser compartilhada (multiprocessadores) ou
distribuída (multicomputatores).

UMA (uniform memory access)


• Todos os processadores têm acesso à
todas as partes da memória.
• Latência para acesso à memória é a
mesma, não importa qual processador
requisitou acesso.
• Problema: com grande quantidade de
processadores pode haver uma demanda
maior que a largura da banda de acesso
à memória, aumentando mais a latência.
NUMA (non-uniform memory access)
• Memória principal é dividida entre entre os
processadores.
• Alguns acessos à memória são mais
rápidos que outros.
• Problema: aumenta a complexidade para
comunicar dados entre processadores.

Você também pode gostar