close

RISC

Ir para a navegação Ir para a pesquisa
Image
Microprocessador RISC UltraSPARC da Sun

O RISC ( English  Reduced Instruction Set Computer [1]  - um computador com um conjunto de instruções simplificadas/reduzidas ) é uma abordagem arquitetônica para o projeto de processadores , na qual o desempenho é aumentado pela codificação de instruções de forma que sua decodificação seja mais fácil e o tempo de execução é menor. Os conjuntos de instruções dos primeiros processadores RISC nem sequer tinham instruções de multiplicação e divisão. Também facilita o overclock e torna o superescalar (instruções de paralelização em várias unidades de execução) mais eficiente.

Diferenças do CISC

Conjuntos de instruções em arquiteturas anteriores, para facilitar a escrita manual de programas em linguagens assembly ou direto em código de máquina , e para tornar os compiladores mais fáceis de implementar , davam o máximo de trabalho possível. Não era incomum que os kits incluíssem instruções para suporte direto de construções de linguagem de alto nível . Outra característica desses conjuntos é que a maioria das instruções, via de regra, permitia todos os métodos de endereçamento possíveis (a chamada “ ortogonalidade do conjunto de instruções ( engl. ) ”). Por exemplo: tanto os operandos quanto o resultado em operações aritméticas estão disponíveis não apenas em registradores , mas também por endereçamento direto, e diretamente na RAM . Mais tarde, essas arquiteturas foram chamadas de CISC ( Computador de conjunto de instruções complexo ) . 

No entanto, muitos compiladores não exploraram todo o potencial de tais conjuntos de instruções e métodos de endereçamento complexos levam muito tempo devido a acessos adicionais à memória principal relativamente lenta. Verificou-se que tais funções são executadas mais rapidamente por uma sequência de instruções de máquina mais simples se o processador for simplificado e houver espaço nele para um número maior de registradores, o que reduz o número de acessos à memória RAM. Nas primeiras arquiteturas classificadas como RISC, a maioria das instruções para simplificar a decodificação tem o mesmo comprimento e estrutura semelhante, as operações aritméticas funcionam apenas com registradores, e o trabalho com memória passa por instruções separadas para carregar (carregar) e salvar (armazenar) instruções. Essas propriedades possibilitaram um melhor balanceamento das etapas de pipeline , tornando os pipelines em RISC muito mais eficientes e permitindo aumentar a frequência do clock.

Filosofia do RISC

Em meados da década de 1970, vários pesquisadores (principalmente da IBM ) descobriram que a maioria das combinações de instruções e métodos de endereçamento ortogonal não eram usados ​​na maioria dos programas gerados pelos compiladores da época. Descobriu-se também que em algumas arquiteturas de microcódigo , operações complexas executadas por uma única instrução de máquina eram mais lentas do que sequências algoritmicamente equivalentes de operações mais simples. Isso se deve, em parte, ao fato de que muitas arquiteturas foram desenvolvidas às pressas e o microcódigo apenas das instruções de máquina que foram usadas com mais frequência foi bem otimizado. [2]

Como muitos programas reais passam a maior parte do tempo realizando operações simples, muitos pesquisadores decidiram se concentrar em tornar essas operações o mais rápido possível. O desempenho do processador é limitado pelo tempo que o processador gasta executando as operações mais lentas no processo de processamento de qualquer instrução. Reduzir a duração dessas etapas melhora o desempenho geral e geralmente acelera a execução de instruções devido ao pipeline mais eficiente. [3] O foco em instruções simples leva à arquitetura RISC, que visa tornar as instruções tão simples que podem ser facilmente canalizadas e não levam mais do que um ciclo de máquina por etapa do pipeline em altas frequências.

Posteriormente notou-se que a característica mais significativa do RISC é a separação das instruções para processamento de dados e acesso à memória - a memória é acessada apenas através das instruções load e store, e todas as demais instruções limitam-se a trabalhar com registradores de hardware do processador. Isso simplificou a arquitetura do processador:

  • tornou possível dar às instruções da máquina um comprimento fixo,
  • pipelines simplificados e lógica isolada que tinha como efeito colateral atrasos no acesso à RAM com apenas duas instruções.

Como resultado, as arquiteturas RISC tornaram-se informalmente também chamadas de arquiteturas load/store . [quatro]

Número de instruções

Muitas vezes, as palavras " conjunto de instruções reduzido " são entendidas como minimizando o número de instruções no conjunto de instruções. De fato, muitos processadores RISC possuem mais instruções de máquina do que processadores CISC . [5] [6] Os sistemas de instrução de alguns processadores RISC, como os transputadores INMOS , possuem pelo menos tantas instruções de máquina quanto, por exemplo, os sistemas de instrução dos processadores IBM System/370 CISC e, inversamente, o processador DEC CISC O PDP-8 possui apenas 8 instruções básicas e algumas instruções estendidas.

De fato, o termo "reduzido" no nome descreve o fato de que a quantidade (e tempo) de trabalho realizado por cada instrução de máquina individual é reduzida - no máximo um ciclo de acesso à memória - enquanto as instruções complexas dos processadores CISC podem exigir centenas de ciclos de acesso à memória para sua execução. [7]

Algumas arquiteturas projetadas especificamente para minimizar o número de instruções são muito diferentes das arquiteturas RISC clássicas e receberam nomes diferentes: Minimal Instruction Set Computer ( MISC ), Zero Instruction Set Computer ( ZISC ), Ultimate RISC (também chamado OISC), Transport trigger architecture (TTA), etc.

Características dos processadores RISC

  • Comprimento fixo de instruções de máquina (por exemplo, 32 bits) e formato de instrução simples.
  • Comandos especializados para operações de memória - leitura ou escrita. Não há operações de leitura-modificação-gravação. Quaisquer operações de “alteração” são realizadas apenas no conteúdo dos registradores (a chamada arquitetura load-and-store).
  • Um grande número de registradores de uso geral (32 ou mais).
  • Falta de suporte para operações de tipo "alterar" em tipos de dados abreviados - byte, palavra de 16 bits. Assim, por exemplo, o conjunto de instruções DEC Alpha continha apenas operações em palavras de 64 bits e exigia o desenvolvimento e posterior chamada de procedimentos para realizar operações em bytes, palavras de 16 bits e 32 bits.
  • A falta de microprogramas dentro do próprio processador. O que é executado por microprogramas em um processador CISC é executado em um processador RISC como código de máquina comum (embora colocado em um armazenamento especial), que não difere fundamentalmente do código do kernel do sistema operacional e dos aplicativos. Assim, por exemplo, o tratamento de falhas de página e a interpretação da tabela de páginas do DEC Alpha estavam contidos no chamado PALcode (Privileged Architecture Library) colocado na ROM. Ao substituir o PALCode, foi possível transformar o processador Alpha de 64 bits para 32 bits, bem como alterar a ordem dos bytes em uma palavra e o formato das entradas da tabela de páginas da memória virtual.

Outras arquiteturas

Ao longo dos anos após o advento da arquitetura RISC, outras alternativas foram implementadas - por exemplo, VLIW , MISC , OISC , processamento paralelo massivo , array sistólico ( English  Systolic array ), computação reconfigurável ( English  Reconfigurable computing ), arquitetura de streaming .

  • Arquiteturas superescalares (originalmente - computadores mainframe do final da década de 1960, em microprocessadores - Sun SPARC, desde Pentium usado na família x86). A paralelização da execução de instruções entre vários dispositivos de execução, e a decisão sobre a execução paralela de duas ou mais instruções é feita pelo hardware do processador na fase de execução. O uso eficiente de tal arquitetura requer otimização especial do código de máquina no compilador para gerar pares de instruções independentes (quando o resultado de uma instrução não é um argumento para outra).
  • Arquiteturas VLIW (palavra de instrução muito longa). Eles diferem da arquitetura superescalar em que a decisão sobre a paralelização é feita não pelo hardware no estágio de execução, mas pelo compilador no estágio de geração de código. Os comandos são muito longos e contêm instruções explícitas para paralelizar vários subcomandos para várias unidades de execução. Elementos arquitetônicos estavam contidos na série PA-RISC . Os processadores com a arquitetura VLIW em sua forma clássica são processadores com a arquitetura Elbrus 2000 . O processador Itanium usa a arquitetura EPIC , que é baseada em VLIW. Desenvolver um compilador eficiente para VLIW é um grande desafio. A vantagem do VLIW sobre a arquitetura superescalar é que o compilador pode ser mais avançado que os controladores da CPU e pode armazenar mais informações de contexto para tomar melhores decisões de otimização.

Outras arquiteturas típicas de RISC

  • Execução especulativa. Quando encontra uma instrução de desvio condicional, o processador executa (ou pelo menos lê no cache de instruções) ambos os desvios de uma vez até que a expressão de controle de desvio seja avaliada. Permite evitar o tempo de inatividade do pipeline durante saltos condicionais.
  • Renomeando registros. Cada registrador de processador é, na verdade, vários registradores paralelos que contêm várias versões de um valor. Usado para implementar a execução especulativa.

O início do desenvolvimento da arquitetura "RISC"

O primeiro sistema que pode ser chamado de sistema “RISC” é o supercomputadorCDC 6600 ” , que foi criado em 1964, dez anos antes do termo ser cunhado. O CDC 6600 tinha uma arquitetura "RISC" com apenas dois modos de endereçamento ("Register+Register" e "Register+Immediate") e 74 códigos de instrução (enquanto o 8086 tinha 400 códigos de instrução). O CDC 6600 tinha 11 pipelines de processamento aritmético e lógico, bem como cinco carregadores e dois dispositivos de armazenamento. A memória era multibloco, então todos os dispositivos de armazenamento de carga podiam funcionar simultaneamente. O clock base/taxa de instrução foi 10 vezes mais rápido que o tempo de acesso à memória. Jim Thornton e Seymour Cray , os projetistas do CDC 6600, criaram um processador poderoso para ele, o que permitiu processar rapidamente grandes quantidades de dados digitais. O processador principal era suportado por dez processadores periféricos simples que executavam operações de E/S e outras funções do sistema operacional. [8] Mais tarde, brincou-se que o termo "RISC" na verdade significa "Realmente inventado por Seymour Cray " .

Outra máquina de arquitetura "RISC" inicial é o minicomputador " Data General Nova ", desenvolvido em 1968.

A primeira tentativa de criar um processador "RISC" em um chip foi feita pela " IBM " em 1975. Este trabalho levou à criação da família de processadores " IBM 801 ", que foram amplamente utilizados em vários dispositivos IBM. O 801 acabou sendo lançado em forma de chip sob o nome " ROMP " em 1981. "ROMP" significa "Research OPD (Office Product Division) Micro Processor", ou seja, "microprocessador de pesquisa", desenvolvido na divisão de desenvolvimento de escritório. Como o nome sugere, o processador foi projetado para "mini" tarefas, e quando a IBM lançou o IBM RT-PC baseado nele em 1986 , não funcionou muito bem. No entanto, o lançamento do 801 foi seguido por vários projetos de pesquisa, um dos quais resultou no sistema " POWER ".

No entanto, os sistemas RISC mais conhecidos foram desenvolvidos como parte de programas de pesquisa universitários financiados pelo programa DARPA VLSI.[ esclarecer ]

RISC em Berkeley

O projeto RISC na UC Berkeley foi iniciado em 1980 por David Patterson e Carlo Sequina. A pesquisa baseou-se no uso de pipelining e no uso agressivo da técnica de janela de registro . Um processador típico tem um pequeno número de registradores e um programa pode usar qualquer registrador a qualquer momento. Um processador usando tecnologias de janela de registradores tem um número muito grande de registradores (por exemplo, 128), mas os programas podem usar apenas um número limitado (por exemplo, apenas 8 por vez).

Um programa limitado a apenas oito registros para cada procedimento pode fazer chamadas de procedimento muito rápidas: a "janela" simplesmente muda para o bloco de 8 registros do procedimento desejado e, ao retornar do procedimento, volta para os registros do chamador. procedimento (em um processador convencional, a maioria dos procedimentos quando chamados obrigam a salvar os valores de alguns registradores na pilha para poder utilizar esses registradores durante a execução do procedimento (quando o procedimento retorna, os valores dos registradores são restaurado da pilha).

O projeto RISC produziu o processador RISC-I em 1982. Ele tinha 44.420 transistores (para comparação: havia cerca de 100.000 deles nos processadores CISC da época). O "RISC-I" tinha apenas 32 instruções, mas era mais rápido do que qualquer processador de chip único da época. Um ano depois, em 1983, foi lançado o "RISC-II", que consistia em 40.760 transistores, usava 39 instruções e funcionava três vezes mais rápido que o "RISC-I". O projeto Berkeley RISC influenciou a família SPARC e DEC Alpha de processadores RISC .

RISC em Stanford

Quase ao mesmo tempo, em 1981, John Hennessy iniciou um projeto semelhante chamado "arquitetura MIPS" na Universidade de Stanford . O criador do "MIPS" se concentrou quase completamente no processamento de pipeline - ele tentou "espremer tudo" dessa tecnologia. Pipelining também foi usado em outros processadores, algumas das ideias que apareceram no MIPS permitiram que o processador desenvolvido funcionasse muito mais rápido que os similares. O requisito mais importante era este: qualquer instrução do processador leva um ciclo de clock. Assim, o pipeline poderia transferir dados muito mais rápido e o processador começou a trabalhar muito mais rápido. Infelizmente, por causa desse requisito, operações úteis como multiplicação ou divisão foram removidas do conjunto de instruções.

Nos primeiros anos, as tentativas de desenvolver a arquitetura RISC eram bem conhecidas, mas permaneceram no âmbito dos laboratórios de pesquisa universitários que lhes deram origem. Muitos na indústria de computadores acreditavam que os benefícios dos processadores "RISC" não se materializariam quando usados ​​em produtos reais devido à baixa eficiência de memória das instruções compostas. No entanto, desde 1986, os projetos de pesquisa RISC começaram a produzir os primeiros produtos funcionais. O processador RISC de Stanford foi implementado na família de processadores Rxxxx da MIPS Technologies .

Últimos anos

Como se viu no início da década de 1990, as arquiteturas RISC permitem maior desempenho do que CISC, devido ao uso de uma abordagem superescalar e VLIW , além da possibilidade de aumentar seriamente a frequência do clock e simplificar o cristal, liberando área para cache , atingindo enormes capacidades. Além disso, as arquiteturas RISC tornaram possível reduzir bastante o consumo de energia do processador, reduzindo o número de transistores.

No início, as arquiteturas RISC eram pouco aceitas pelo mercado devido à falta de software para elas. Esse problema foi resolvido com a portabilidade de sistemas operacionais do tipo UNIX ( SunOS ) para arquiteturas RISC.

Atualmente, muitas arquiteturas de processador são do tipo RISC, como ARM , DEC Alpha , SPARC , AVR , MIPS , POWER e PowerPC . Os processadores x86 mais usados ​​em computadores desktop costumavam ser processadores CISC, mas os processadores mais recentes, começando com o Intel Pentium Pro (1995), são processadores CISC com um núcleo RISC [9] . Eles convertem as instruções CISC de processadores x86 em um conjunto mais simples de instruções RISC internas antes da execução.

Depois que os processadores da arquitetura x86 foram convertidos para a arquitetura RISC superescalar, pode-se dizer que a maioria dos processadores existentes hoje são baseados na arquitetura RISC.

Veja também

Notas

  1. Dicionário de Sistemas Computacionais = Dicionário de Computação / Ed. V. Illingworth e outros: Per. do inglês. A. K. Belotsky e outros; Ed. E. K. Maslovsky. - M. : Mashinostroenie, 1990. - 560 p. - 70.000 (adicionais) cópias.  - ISBN 5-217-00617-X (URSS), ISBN 0-19-853913-4 (Reino Unido).
  2. Um exemplo é uma instrução na INDEXarquitetura VAX , que é mais lenta que uma implementação equivalente usando operações mais simples. Ver: D.A. Patterson, D.R. Ditzel. O caso para a computação do conjunto de instruções reduzido // SIGARCH Comput. arquitecto. notícia. - Outubro de 1980. - Emissão. 8, 6 . - P. 25-33. - doi : 10.1145/641914.641917 .
  3. Andrew Schulman. Microprocessadores da perspectiva do programador  // ​​Dr. Diário de Dobb . - 1 de setembro de 1990.
  4. Kevin Dowd. Computação de Alto Desempenho . — O'Reilly & Associates, 1993.
  5. Jon "Hannibal" Stokes. RISC e CISC, lado a lado? . RISCO vs. CISC: a Era Pós-RISC . Ars Technica (agosto de 1999). Recuperado em 11 de julho de 2010. Arquivado do original em 29 de julho de 2010.
  6. Lloyd Borrett. RISC versus CISC (link indisponível) . Computador pessoal australiano (junho de 1991). Recuperado em 11 de julho de 2010. Arquivado a partir do original em 23 de agosto de 2011. 
  7. Sivarama P. Dandamudi. Capítulo 3: Princípios RISC // Guia para Processadores RISC para Programadores e Engenheiros . - Springer New York, 2005. - P. 39-44. — ISBN 978-0-387-21017-9 (Impresso) ISBN 978-0-387-27446-1 (Online). - doi : 10.1007/0-387-27446-4_3 .  (link indisponível) doi : 10.1007/0-387-27446-4_3  - "o objetivo principal não era reduzir o número de instruções, mas a complexidade"
  8. Grishman, Ralph. Programação em linguagem assembly para a série Control Data 6000. Imprensa Algoritmos. 1974. P. 12
  9. Dispositivo processador - "Tudo sobre alta tecnologia" . Recuperado em 11 de agosto de 2015. Arquivado a partir do original em 12 de agosto de 2015.

Links