Capítulo 13 - RISC

Propaganda
William Stallings
Organização e Arquitetura de
Computadores
8a Edição
Capítulo 13
Computadores com Conjunto
Reduzido de Instruções - RISC
Maiores Avanços em Computação
• O conceito de família
—IBM System/360 1964
—DEC PDP-8
—Separa arquitetura da implementação
• Unidade de controle microporgramada
—Idea de Wilkes em 1951
—Produzida pela IBM S/360 1964
• Memória Cache
—IBM S/360 modelo 85 1969
Maiores Avanços em Computação
• RAM de estado sólido
• Microprocessadores
—Intel 4004 em 1971
• Pipeline
—Introduz paralelismo no ciclo de busca e
execução
• Múltiplos processadores
O Próximo Passo - RISC
• Computador com Conjunto Reduzido de
Instruções - RISC
• Características principais
—Grande quantidade de registradores de
propósito geral
—ou use de tecnologia de compiladores para
otimizar o uso de registradores
—Conjunto de instruções limitado e simples
—Ênfase na otimização do pipeline
Comparação de Processadores
Dirigindo Forças para CISC
• O custo de software excede o custo de
hardware
• Linguagens de alto nível crescentemente
complexas
• Gap Semântico
• Leva a:
—Conjuntos maiores de instruções
—Mais modos de endereçamento
—Implementações em hardware de comandos
de linguagens de alto nível
– Por exemplo CASE (switch) no VAX
Intenção de CISC
• Facilitar a escrita de compiladores
• Melhorar a eficiência da execução
—Operações complexas em microcódigo
• Suporte a linguagens de alto nível mais
complexas
Características de Execução
•
•
•
•
Operações realizadas
Operandos usados
Sequenciamento de execução
Estudos foram feitos baseados em
programas escritos em linguagens de alto
nível
• Estudos dinâmicos são medidas realizadas
durante a execução do programa
Operações
• Atribuições
—Movimento de dados
• Estruturas condicionais (IF, LOOP)
—Controle de sequência
• A chamada e retorno de procedimento
consome muito tempo
• Muitas instruções de linguagens de alto
nível levam a muitas operações em código
de máquina
Frequência Dinâmica Relativa Ponderada de
Operações em Linguagens de Alto Nível [PATT82a]
Operandos
• Principalmente variáveis escalares locais
• A otimização deveria concentrar-se no
acesso a variáveis locais
Chamadas a Procedimentos
• Consomem muito tempo
• Dependem da quantidade de parâmetros
passados
• Dependem do nível de aninhamento
• Muitos programas não fazem muitas
chamadas seguidas por muitos retornos
• Muitas variáveis são locais
• Veja localidade de referência
Implicações
• Melhor suporte é dado pela otimização
das características que mais consomem
tempo e são mais usadas
• Grande número de registradores
—Referências de operandos
• Projeto cuidadoso de pipelines
—Previsão de desvio etc.
• Conjunto simplificado (reduzido) de
instruções
Banco de Registradores Grande
• Solução de software
—Requer que o compilador aloque os
registradores
—Aloca baseado nas variáveis mais usadas em
um dado tempo
—Requer análise sofisticada de programa
• Solução de hardware
—Tem mais registradores
—Assim mais variáveis estarão em registradores
Registradores para Variáveis Locais
• Armazena variáveis escalares locais em
registradores
• Reduz o acesso à memória
• Cada chamada a procedimento (função)
muda a localidade
• Os parâmetros devem ser passados
• Os resultados devem ser retornados
• As variáveis dos programas chamados
devem ser restauradas
Janelas de Registradores
• Somente alguns parâmetros
• Alcance limitado de profundidade de
chamada
• Usa conjuntos múltiplos pequenos de
registradores
• As chamadas mudam para um conjunto
diferente de registradores
• Os retornos mudam de volta para um
conjunto previamente utilizado de
registradores
Janela de Registradores
• Três áreas dentro de um conjunto de
registrador
—Registradores de parâmetros
—Registradores locais
—Registradores temporários
—Registradores temporários de um conjunto
sobrepõem-se aos registradores de
parâmetros do próximo
—Isso permite que os parâmetros sejam
passados sem movimentação de dados
Janelas de Registradores Sobrepostas
Diagrama de Buffer Circular
Operação de Buffer Circular
• Quando uma chamada é realizada, um
apontador da janela atual é movido para
mostrar a janela de registradores
atualmente ativa
• Se todas as janelas estão em uso, uma
interrupção é gerada e a janela mais
velha (a mais longe no aninhamento de
chamadas) é salva na memória
• Um apontador de janela salvo indica o
local para a restauração da próxima
janela salva
Variáveis Globais
• Alocadas pelo compilador na memória
—Ineficiente para variáveis acessadas com
frequência
• Deve-se ter um conjunto de registradores
para variáveis globais
Registradores x Cache
Grandes bancos de
registradores
Cache
Todas as variáveis locais
escalares
Variáveis locais recentemente
usadas
Variáveis individuais
Blocos de memória
Variáveis globais assinaladas pelo
compilador
Variáveis globais recentemente
usadas
Salvar/restaurar baseados na
profundidade de aninhamento do
procedimento
Salvar/restaurar baseado em
algoritmos de atualização da
memória cache
Endereçamento de registrador
Endereço de memória
Referenciando um Escalar - Banco de
Registradores Baseado em Janela
Referenciando um Escalar - Cache
Otimização de Registrador Baseado em
Compilador
• Assume um pequeno número de
registradores (16-32)
• A otimização do uso é tarefa do
compilador
• Programas em linguagens de alto nível
não têm referências explícitas a
registradores
—geralmente – pense em C - register int
• Atribui um registrador simbólico ou virtual
a cada variável candidata
Otimização de Registrador Baseado em
Compilador
• Mapeia (ilimitados) registradores
simbólicos a registradores reais
• Registradores simbólicos que não são
sobrepostos podem compartilhar
registradores reais
• Se os registradores reais acabarem,
algumas variáveis usam a memória
Colorir um Grafo
•
•
•
•
•
Dado um grafo com vértices e arestas
Atribui-se uma cor a cada nó
Nós adjacentes têm cores diferentes
Use uma quantidade mínima de cores
Os nós são registradores simbólicos
Colorir um Grafo
• Dois registradores que estão vivos em um
mesmo fragmento de programa são
ligados por uma aresta
• Tenta-se colorir o grafo com n cores,
sendo n o número de registradores reais
• Os nós que não podem ser coloridos são
colocados na memória
Abordagem de Colorir um Grafo
Por que CISC?
• Simplificação do compilador?
—Disputado…
—Instruções de máquina complexas são mais
difíceis de explorar
—A otimização é mais difícil
• Programas menores?
—Programa usa menos memória, mas…
—Memória agora é barata
—Pode não ocupar menos bits, só parecer
menor na forma simbólica
– Mais instruções requerem códigos de operação
maiores
– Referências a registradores requerem menos bits
Por que CISC?
• Programas mais rápidos?
—Tendência de usar instruções mais simples
—Unidade de controle mais complexa
—Armazenamento de controle de
microprograma maior
—Assim, instruções simples levam mais tempo
para executar
• Está mais do que claro que CISC é a
solução apropriada
Características do RISC
• Uma instrução por ciclo
• Operações registrador a registrador
• Poucos e mais simples modos de
endereçamento
• Poucos e simples formatos de instruções
• Projeto hardwired (nenhum microcódigo)
• Formato fixo de instrução
• Mais esforço/tempo de compilação
RISC x CISC
• Divisão não clara
• Muitos projetos usam aspectos de ambas
as filosofias
• Por exemplo PowerPC e Pentium II
Pipeline RISC
• Muitas instruções são registradores para
registradores
• Duas fases de execução
—I: busca de instrução
—E: executa
– Operação da ULA com registrador na entrada e saída
• Para carga e armazenamento
—I: busca de instrução
—E: executa
– Calcula endereço de memória
—D: Memória
– Operação registrador para memória ou memória para
registrador
Efeitos do Pipeline
Otimização do Pipeline
• Desvio atrasado
— Não tem efeito até após a execução da instrução
seguinte
— Esta instrução seguinte é o slot do atraso
• Carga atrasada
— O registrador que é alvo da leitura é bloqueado pelo
processador
— Execução contínua do fluxo de instrução até que o
registrador seja necessário
— Ocioso até que a carga complete
— Re-arranjo de instruções pode permitir trabalho útil
enquanto carrega
• Laço desenrolado
— Replica o corpo de um laço um número de vezes
— Itera o laço poucas vezes
— Reduz a sobrecarga do laço
— Aumenta o paralelismo de instrução
— Registrador, cache de dados ou localidade de TLB
melhorado.
Exemplo de Laço Desenrolado Duas Vezes
do i=2, n-1
a[i] = a[i] + a[i-1] * a[i+l]
end do
Transforma-se em
do i=2, n-2, 2
a[i] = a[i] + a[i-1] * a[i+i]
a[i+l] = a[i+l] + a[i] * a[i+2]
end do
if (mod(n-2,2) = i) then
a[n-1] = a[n-1] + a[n-2] * a[n]
end if
Desvio Normal ou Atrasado
Endereço
Desvio Normal
Desvio Atrasado
Desvio Atrasado
Otimizado
100
LOAD
X, rA
LOAD
X, rA
LOAD
X, rA
101
ADD
1, rA
ADD
1, rA
JUMP
105
102
JUMP
105
JUMP
106
ADD
1, rA
103
ADD
rA, rB
NOOP
ADD
rA, rB
104
SUB
rC, rB
ADD
rA, rB
SUB
rC, rB
105
STORE rA, Z
SUB
rC, rB
STORE rA, Z
106
STORE rA, Z
Uso de Desvio
Atrasado
Controvérsia de RISC x CISC
• Quantitativa
—compara tamanhos e velocidades de execução
de programas
• Qualitativa
—examina aspectos de suporte de linguagens de
alto nível e o uso de VLSI de estado real
Controvérsia de RISC x CISC
• Problemas
—Nenhum par de RISC e CISC podem ser
comparados diretamente
—Não há um conjunto definitivo de programas
de testes
—Difícil de separar os efeitos de hardware dos
efeitos do compilador
—Muitas comparações são feitas em
"brinquedos" e não em máquinas de produção
—Muitos dispositivos comerciais são um misto
de RISC e CISC
Leitura Necessária
• Stallings capítulo 13
• Sites web dos fabricantes
Download