arquiteturas risc - zottesso.com.br - risc... · em abordagens cisc, com poucos registradores...
TRANSCRIPT
1
Arquiteturas RISC (Reduced Instructions Set
Computers)
2
RISC
INOVAÇÕES DESDE O SURGIMENTO DO COMPU-TADOR DE PROGRAMA ARMAZENADO (1950)
! O conceito de família: desacoplamento da arquitetura de uma máquina da sua implementação. Ex.: IBM System /360 e DEC PDP
! Unidade de Controle Microprogramada: Sugerida por Wilkes – 1951 -, facilitou a implementação da UC e deu suporte ao conceito de família
! Memória Cache: sua inserção melhorou dramaticamente as diferenças de velocidade entre processador e memória principal
! Pipelining: Meio através do qual foi introduzido o conceito de paralelismo dentro do modelo naturalmente sequencial de um programa de máquina
3
RISC
INOVAÇÕES DESDE O SURGIMENTO DO COMPU-TADOR DE PROGRAMA ARMAZENADO (1950)
! Multiprocessadores: Sistemas com modelos variados que fazem uso de diversos processadores para aumentar o desempenho dos sistemas
! A esta lista deve ser adicionada uma das mais importantes inovações: Reduced Instruction Set Computers - RISC
4
RISC
RISC – PRINCIPAIS CARACTERÍSTICAS
! Conjunto limitado e simplificado de instruções de máquinas
! Grande número de registradores de uso geral e utilização de tecnologia de compiladores para otimizar o uso destes registradores
! Ênfase na otimização do pipeline de instruções
5
RISC
CARACTERÍSTICAS DA EXECUÇÃO DAS INSTRUÇÕES
! Com o uso crescente dos computadores a complexidade do software cresceu e o seu custo também
! Em resposta, a industria desenvolveu linguagens de programação de alto nível mais complexas e poderosas (FORTRAN, C, ADA)
! Com isto, os programas passaram a ser escritos de forma mais concisa, com ênfase nos detalhes associados ao problema e fazendo uso da programação estruturada
! Resultado: Gap Semântico – distância entre os recursos de programação que a linguagem de alto nível oferece e os recursos de programação que a máquina dispõe
6
RISC
CARACTERÍSTICAS DA EXECUÇÃO DAS INSTRUÇÕES
! Sintomas do Gap Semântico:
Ø Execução ineficiente
Ø Tamanho de programa em linguagem de máquina excessivamente grande
Ø Complexidade na construção de compiladores
7
RISC
CARACTERÍSTICAS DA EXECUÇÃO DAS INSTRUÇÕES
! Na tentativa de diminuir o Gap Semântico, os projetistas passaram a oferecer máquinas que continham:
Ø Um grande conjunto de instruções
Ø Dezenas de modos de endereçamento
Ø Vários comandos de linguagem de alto nível implementados em hardware
! No entanto, estudos sobre como se dá o comportamento dinâmico de um programa em execução sugerem uma abordagem em outro sentido
8
RISC
INTERAÇÃO CPU/MEMÓRIA
! A análise do comportamento de um programa nos seus aspectos estático (código fonte) e dinâmico (em execução) pode dar indicações de como ocorre a interação entre cpu e memória
! Diversos estudos feitos em programas escritos em linguagem de alto nível demonstram que – Tabela 2:
Ø Comandos de atribuição ocorrem com elevada frequência
Ø Comandos condicionais (if, loop) também predominam, sugerindo que um mecanismo adequado de controle de sequência deve exitir no nível de máquina
9
RISC
10
RISC
• INTERAÇÃO CPU/MEMÓRIA
! Quando se analisou, no entanto, o consumo de tempo de execução dos comandos em um programa, um estudo de Patterson – 1982 – determinou que – Tabela 3:
Ø As colunas 2 e 3 da Tabela 3 mostram as medidas ponderadas do tempo real gasto por cada instrução
Ø Os resultados sugerem que chamadas e retornos de procedimentos são as operações que consomem mais tempos de execução
11
RISC
12
RISC
USO DE OPERANDOS
! Os tipos dos operandos e a frequência do seu uso determinam a organização da memória para o armazenamento e a organização dos modos de endereçamento para o acesso
! Estudos na forma de uso dos operandos em programa sugerem que – Tabela 4:
Ø A maioria das referências são para variáveis de tipo escalar simples
Ø Mais de 80% dessas variáveis escalares são também variáveis locais
Ø Nas referências a variáveis do tipo array existe a necessidade de acesso ao seu índice que também é uma variável escalar e local
Ø Tais estudos sugerem que o acesso a variáveis escalares deve ser otimizado – com o armazenamento em registradores, por exemplo
13
RISC
14
RISC
CHAMADAS DE PROCEDIMENTOS
! Como visto, chamadas a procedimentos estão entre as instruções que mais consomem tempo de execução
! Dois aspectos são importantes: o número de parâmetros e variáveis locais, e a profundidade das chamadas aninhadas
! Um estudo de Tanenbaum encontrou que 98% das chamadas dinâmicas a procedimentos passavam menos que 6 parâmetros e 92% deles usavam menos de 6 variáveis locais
! Estes resultados mostram que o número de palavras requeridas por ativação de procedimentos não é grande
! Um outro estudo, realizado em Berkeley, encontrou que é raro ter sequencias longas e ininterruptas de chamadas de procedimentos seguidas de seus respectivos retornos
15
RISC
CARACTERÍSTICAS DAS ARQUITETURAS RISC
! Com base nos estudos apresentados, três elementos emergem que caracterizam fortemente as arquiteturas RISC:
Ø Uso de um grande número de registradores para otimizar a referência a operandos (parâmetros, variáveis locais e variáveis escalares)
Ø Projeto otimizado do Pipeline de Instruções para lidar com a alta proporção de desvios condicionais e chamadas a procedimentos
Ø Um conjunto reduzido e simplificado de instruções para permitir a implementação em hardware da UC
16
RISC
CARACTERÍSTICAS DAS ARQUITETURAS RISC
! Outras características igualmente importantes:
Ø Execução de uma instrução por ciclo
Ø Operações Registrador a Registrador
Ø Modos de endereçamento simplificado
Ø Formato da instrução simplificado
17
RISC
USO DE UM GRANDE NÚMERO DE REGISTRADORES
! Como visto, a maior parte das operações em programas típicos correspondem a comandos de atribuição (A=B)
! Além disso, chamadas a procedimentos estão entre as instruções que mais consomem tempo de execução
! Solução:
Ø Utilizar um maior número de registradores para viabilizar estas operações com desempenho máximo
COMO???
18
RISC
JANELA DE REGISTROS
! O maior custo das chamadas de procedimentos está associado à passagem de parâmetros e a alocação de espaço para variáveis locais
! Uma abordagem visando desempenho buscaria alocar parâme-tros de procedimentos e variáveis locais em registradores
Como???
1. Resultados anteriores mostraram que procedimentos típicos empregam poucos parâmetros e poucas variáveis locais
2. A profundidade das chamadas aninhadas de procedimentos não é grande (Proc A chama Proc B que chama Proc C ...)
! Para explorar estas propriedades, múltiplos conjuntos pequenos de registradores podem ser usados
19
RISC
JANELA DE REGISTROS
Ganho ???
! Uma chamada de procedimento faz com que a CPU mude para usar um conjunto diferente de registradores em vez de salvar o conteúdo dos registradores atuais na memória
! O conjunto de registradores usados por um procedimento para a passagem de parâmetros e alocação de variáveis locais é conhecido como janela de ativação
! Em abordagens CISC, com poucos registradores internos, a janela de ativação é implementada na área de pilha do programa que fica na memória
20
RISC
JANELA DE REGISTROS
! Para tornar o uso dos registradores mais eficiente ainda, janelas de ativação distintas podem ser sobrepostas:
21
RISC
ORGANIZAÇÃO DOS REGISTRADORES
! Para manipular qualquer padrão possível de chamadas e retornos de procedimentos o número de janelas de ativação não deveria possuir limites
! Como isso não é possível (nem necessário) uma organização das janelas sob a forma de buffer circular usando apenas os registradores é sugerida
! Caso o número de chamadas de procedimentos aninhadas ultrapasse o número de janelas disponíveis, a memória pode ser usada para armazenar dados de ativações mais antigas
! Estudos mostram que, com 8 janelas, o uso da memória ocorre em apenas 1% das chamadas aninhadas de procedimentos
22
RISC
No modelo ao lado, até 5 procedimentos aninhados podem ser chamados sem ser feito uso da memória. Por que?
23
RISC
VARIÁVEIS GLOBAIS
! Variáveis comuns a todos os procedimentos de um programa podem ser armazenadas na memória e acessadas através de instruções que referenciam operandos na memória
! Uma abordagem mais eficiente, no entanto, seria manter variáveis globais em um conjunto fixo de registradores
! Para manter compatibilidade com o modelo de janelas de ativação, o conjunto de registradores deve ser dividido em dois sub-conjuntos:
Registradores para variáveis globais (sem offset)
Registradores para janelas de ativação (com offset)
24
RISC
CONJUNTO DE REGISTROS VERSUS CACHE
! Em vez de usar um conjunto de registradores organizado como janelas de ativação não seria mais simples usar uma memória cache?
! A tabela a seguir compara características das duas abordagens:
25
RISC
Esquemas de endereçamento: Conjunto de Registradores versus Cache
26
RISC
O PAPEL DO COMPILADOR PARA AS ARQUITETURAS RISC
! A motivação para a adoção das arquiteturas RISC tem origem no comportamento dos programas
! Com isso, o compilador exerce um papel fundamental para o sucesso da abordagem RISC
! O compilador deve possuir bibliotecas com funções otimizadas, que executam operações mais complexas que as disponíveis no conjunto básico de instruções (Ex.: movimentação de grandes porções de memória)
! Em uma máquina CISC tais funções seriam implementdas dentro do próprio conjunto de instruções
! Outra função básica do compilador é manter, o tanto quanto possível, os operandos das instruções em execução em registradores
27
RISC
O PAPEL DO COMPILADOR PARA AS ARQUITETURAS RISC
Exemplo de algoritmo de otimização do uso de registradores:
28
RISC
POR QUE CISC?
! Simplificação da construção de compiladores?
Na prática é muito difícil para o compilador explorar o conjunto de instruções complexas na geração de código
A tarefa de otimização do código gerado visando a sua redução e a melhoria do uso do pipeline são ações muito mais difíceis de se executar com um conjunto complexo de instruções
! CISC produz programas menores?
O fato dos programas em linguagem simbólica (assembly) serem menores não garante que o código executável em bits também o seja
Tomando por base o código gerado na máquina RISC I na tabela a seguir, existe pouca ou nenhuma economia no código gerado nas máquinas CISC
29
RISC
RAZÕES???
! Como já visto, compiladores CISC tendem a favorecer instruções de máquina simples – sistemas de execução simplificados
! O número maior de instruções nas máquinas CISC produz códigos de instruções com um número maior de bits
! Arquiteturas RISC enfatizam o uso de registradores que requerem poucos bits para serem identificados
! A figura a seguir mostra a quantidade de bits que é movimentada entre a cpu e a memória em instruções do tipo memória-memória e registrador-registrador
30
RISC
31
RISC
CARACTERÍSTICAS RISC versus CISC
! Passado o entusiasmo inicial sobre as máquinas RISC, percebe-se que:
1. Projetos RISC podem se beneficiar da inclusão de algumas idéias do modelo CISC – Ex.: Power PC
2. Projetos CISC podem se beneficiar da inclusão de algumas idéias do modelo CISC – Ex.: Pentium
32
RISC
CARACTERÍSTICAS RISC versus CISC
A partir da comparação de diversas soluções RISC comerciais que surgiram recentemente, é consenso que as características a seguir são consideradas típicas de arquiteturas RISC:
1. Um tamanho único de instrução
2. O tamanho de instrução típico adotado é 4 bytes
3. Um número reduzido de modos de endereçamento, tipicamente menos que cinco
4. Inexistência de modo de endereçamento indireto memória a memória
5. Inexistência de operações que combinam load/store com op. aritméticas (ex.: soma com operando na memória)
6. Não mais que um operando na memória por instrução
7. Número de registradores internos entre 32 e 64