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