Computador de conjunto de instruções reduzido - Reduced instruction set computer

Um Sun UltraSPARC , um microprocessador RISC

Um computador de conjunto de instruções reduzido , ou RISC ( / r ɪ s k / ), é um computador com um pequeno conjunto de instruções altamente otimizado , em vez do conjunto mais especializado frequentemente encontrado em outros tipos de arquitetura, como em uma instrução complexa definir computador (CISC). A principal característica distintiva da arquitetura RISC é que o conjunto de instruções é otimizado com um grande número de registradores e um pipeline de instrução altamente regular , permitindo um baixo número de ciclos de clock por instrução (CPI). Os principais recursos de uma filosofia RISC são uma arquitetura de carga / armazenamento , na qual a memória é acessada por meio de instruções específicas, em vez de como parte da maioria das instruções do conjunto, exigindo apenas instruções de ciclo único .

Embora vários computadores das décadas de 1960 e 1970 tenham sido identificados como precursores dos RISCs, o conceito moderno data dos anos 1980. Em particular, dois projetos na Stanford University e na University of California, Berkeley estão mais associados à popularização desse conceito. O MIPS de Stanford seria comercializado como a arquitetura MIPS de sucesso , enquanto o RISC de Berkeley deu seu nome a todo o conceito e foi comercializado como SPARC . Outro sucesso dessa época foi o esforço da IBM que acabou levando à arquitetura do conjunto de instruções IBM POWER , PowerPC e Power ISA . À medida que esses projetos amadureciam, uma variedade de designs semelhantes floresceu no final dos anos 1980 e especialmente no início dos anos 1990, representando uma grande força no mercado de estações de trabalho Unix , bem como para processadores embutidos em impressoras a laser , roteadores e produtos semelhantes.

As muitas variedades de designs RISC incluem ARC , Alpha , Am29000 , ARM , Atmel AVR , Blackfin , i860 , i960 , M88000 , MIPS , PA-RISC , Power ISA (incluindo PowerPC ), RISC-V , SuperH e SPARC . O uso de processadores de arquitetura ARM em smartphones e tablets , como os dispositivos iPad e Android , forneceu uma ampla base de usuários para sistemas baseados em RISC. Os processadores RISC também são usados ​​em supercomputadores , como o Fugaku , que, em junho de 2020, é o supercomputador mais rápido do mundo.

História e desenvolvimento

O projeto de 1946 Automatic Computing Engine (ACE) de Alan Turing tinha muitas das características de uma arquitetura RISC. Vários sistemas, que remontam à década de 1960, foram creditados como a primeira arquitetura RISC, em parte com base no uso da abordagem de carga / armazenamento . O termo RISC foi cunhado por David Patterson do projeto RISC de Berkeley , embora conceitos um tanto semelhantes já tivessem aparecido antes.

O CDC 6600 projetado por Seymour Cray em 1964 usava uma arquitetura de carga / armazenamento com apenas dois modos de endereçamento (registrador + registrador e registrador + constante imediata) e 74 códigos de operação, com o ciclo de clock básico sendo 10 vezes mais rápido que o tempo de acesso à memória . Em parte devido à arquitetura otimizada de carga / armazenamento do CDC 6600, Jack Dongarra diz que ele pode ser considerado um precursor dos sistemas RISC modernos, embora várias outras barreiras técnicas precisem ser superadas para o desenvolvimento de um sistema RISC moderno.

IBM 801

Um microprocessador IBM PowerPC 601 RISC

Michael J. Flynn vê o primeiro sistema RISC como o design IBM 801 , iniciado em 1975 por John Cocke e concluído em 1980. O 801 foi desenvolvido a partir de um esforço para construir um processador de alta velocidade de 24 bits para usar como base para um interruptor de telefone digital . Para alcançar sua meta de comutação de 300 chamadas por segundo (1 milhão por hora), eles calcularam que a CPU exigia um desempenho da ordem de 12 MIPS, em comparação com sua máquina de mainframe mais rápida da época, o 370/168, que funcionava a 3,5 MIPS.

O design foi baseado em um estudo da extensa coleção de estatísticas da IBM sobre as plataformas existentes. Isso demonstrou que o código em configurações de alto desempenho fazia uso extensivo de registradores e que frequentemente ficava sem eles. Isso sugeriu que registros adicionais melhorariam ainda mais o desempenho. Além disso, eles notaram que os compiladores geralmente ignoravam a grande maioria das instruções disponíveis, especialmente os modos de endereçamento ortogonal . Em vez disso, eles selecionaram a versão mais rápida de qualquer instrução fornecida e, em seguida, construíram pequenas rotinas usando-a. Isso sugeriu que a maioria das instruções poderia ser removida sem afetar o código resultante. Essas duas conclusões funcionaram em conjunto; remover instruções permitiria que os códigos de instrução fossem mais curtos, liberando bits na instrução que poderiam então ser usados ​​para selecionar entre um conjunto maior de registradores.

O programa de comutação telefônica foi cancelado em 1975, mas até então a equipe havia demonstrado que o mesmo design ofereceria ganhos de desempenho significativos executando praticamente qualquer código. Em simulações, eles mostraram que um compilador ajustado para usar registradores sempre que possível executaria o código cerca de três vezes mais rápido que os designs tradicionais. Surpreendentemente, o mesmo código seria executado cerca de 50% mais rápido, mesmo em máquinas existentes, devido ao uso de registro aprimorado. Na prática, seu compilador PL / 8 experimental, uma versão ligeiramente reduzida do PL / 1 , produzia código de forma consistente que rodava muito mais rápido em seus mainframes.

Uma versão de 32 bits do 801 foi produzida em um único chip como o IBM ROMP em 1981, que significava 'Research OPD [Office Products Division] Micro Processor'. Esta CPU foi projetada para "mini" tarefas e também foi usada no IBM RT PC em 1986, que acabou sendo um fracasso comercial. Mas o 801 inspirou vários projetos de pesquisa, incluindo novos na IBM que acabariam por levar à arquitetura de conjunto de instruções IBM POWER .

RISC e MIPS

No final da década de 1970, o 801 se tornou bem conhecido na indústria. Isso coincidiu com novas técnicas de fabricação que permitiam que chips mais complexos chegassem ao mercado. O Zilog Z80 de 1976 tinha 8.000 transistores, enquanto o Motorola 68000 de 1979 (68k) tinha 68.000. Esses designs mais recentes geralmente usavam sua complexidade recém-descoberta para expandir o conjunto de instruções para torná-lo mais ortogonal. A maioria, como o 68k, usava microcódigo para fazer isso, lendo instruções e reimplementando-as como uma sequência de instruções internas mais simples. Nos 68k, um total de 13 dos transistores foi usado para esta microcodificação.

Em 1979, David Patterson foi enviado em um ano sabático da University of California, Berkeley, para ajudar a equipe da DEC na costa oeste a melhorar o microcódigo VAX. Patterson ficou impressionado com a complexidade do processo de codificação e concluiu que era insustentável. Ele primeiro escreveu um artigo sobre maneiras de melhorar a microcodificação, mas depois mudou de ideia e decidiu que o próprio microcódigo era o problema. Com financiamento do Programa DARPA VLSI , Patterson deu início ao esforço RISC de Berkeley . O Programa, praticamente desconhecido hoje, levou a um grande número de avanços no design, fabricação e até computação gráfica de chips. Considerando uma variedade de programas de sua variante BSD Unix , a equipe de Berkeley descobriu, assim como a IBM, que a maioria dos programas não fazia uso da grande variedade de instruções do 68k.

O trabalho inicial de Patterson apontou um problema importante com a abordagem tradicional mais-é-melhor; mesmo aquelas instruções que eram críticas para o desempenho geral estavam sendo atrasadas por sua viagem através do microcódigo. Se o microcódigo for removido, os programas serão executados mais rapidamente. E como o microcódigo, em última análise, pegou uma instrução complexa e a quebrou em etapas, não havia razão para que o compilador não pudesse fazer isso. Esses estudos sugeriram que, mesmo sem outras alterações, seria possível fazer um chip com 13 a menos transistores que rodaria mais rápido. A equipe 801 da IBM também percebeu isso; quando os compiladores se deparassem com uma seleção de opcodes possíveis, eles escolheriam aquele que os autores sabiam que havia sido otimizado para rodar mais rápido. Isso significava que o microcódigo, que construiu uma sequência de operações para executar o opcode, estava sempre fazendo a mesma coisa indefinidamente. Essa tarefa introduzia um atraso que poderia ser eliminado se o microcódigo fosse removido e o opcode realmente usado estivesse diretamente disponível para o compilador.

Também foi descoberto que, em implementações microcodificadas de certas arquiteturas, operações complexas tendiam a ser mais lentas do que uma sequência de operações mais simples fazendo a mesma coisa. Isso foi em parte um efeito do fato de que muitos projetos foram apressados, com pouco tempo para otimizar ou ajustar todas as instruções; apenas aqueles usados ​​com mais frequência foram otimizados, e uma sequência dessas instruções poderia ser mais rápida do que uma instrução menos sintonizada executando uma operação equivalente a essa sequência. Um exemplo famoso foi o VAX 's INDEXinstrução.

O trabalho de Berkeley também resultou em uma série de pontos adicionais. Entre eles estava o fato de que os programas gastavam uma quantidade significativa de tempo executando chamadas e retornos de subrotinas, e parecia haver potencial para melhorar o desempenho geral ao acelerar essas chamadas. Isso levou o projeto de Berkeley a selecionar um método conhecido como janelas de registro, que pode melhorar significativamente o desempenho da sub-rotina, embora ao custo de alguma complexidade. Eles também notaram que a maioria das instruções matemáticas eram atribuições simples, apenas 13 delas realmente realizavam uma operação como adição ou subtração. Mas quando essas operações ocorreram, elas tendiam a ser lentas. Isso levou a uma ênfase muito maior na unidade de dados aritméticos subjacente, em oposição aos projetos anteriores, em que a maior parte do chip era dedicada ao controle e microcódigo.

O RISC de Berkeley resultante foi baseado no ganho de desempenho por meio do uso de pipelining e uso agressivo de janelas de registro. Em uma CPU tradicional, há um pequeno número de registros e um programa pode usar qualquer registro a qualquer momento. Em uma CPU com janelas de registro, há um grande número de registros, por exemplo, 128, mas os programas podem usar apenas um pequeno número deles, por exemplo, oito, ao mesmo tempo. Um programa que se limita a oito registros por procedimento pode fazer chamadas de procedimento muito rápidas : a chamada simplesmente move a janela "para baixo" em oito, para o conjunto de oito registros usados ​​por aquele procedimento, e o retorno move a janela para trás. O projeto RISC de Berkeley entregou o processador RISC-I em 1982. Consistindo em apenas 44.420 transistores (em comparação com a média de cerca de 100.000 nos projetos CISC mais recentes da época) RISC-I tinha apenas 32 instruções e, no entanto, superou completamente qualquer outro chip único Projeto. Eles seguiram isso com o transistor 40.760, 39 instrução RISC-II em 1983, que funcionou três vezes mais rápido que o RISC-I.

Quando o projeto RISC começou a se tornar conhecido no Vale do Silício , um projeto semelhante começou na Universidade de Stanford em 1981. Este projeto MIPS surgiu de um curso de graduação de John L. Hennessy , produziu um sistema funcional em 1983 e podia executar programas simples por 1984. A abordagem MIPS enfatizou um ciclo de clock agressivo e o uso do pipeline, garantindo que ele pudesse ser executado o mais "cheio" possível. O sistema MIPS foi seguido pelo MIPS-X e, em 1984, Hennessy e seus colegas formaram o MIPS Computer Systems . O empreendimento comercial resultou em uma nova arquitetura que também foi chamada de MIPS e microprocessador R2000 em 1985.

A filosofia geral do conceito RISC foi amplamente compreendida na segunda metade da década de 1980 e levou os projetistas do MIPS-X a colocá-lo desta forma em 1987:

O objetivo de qualquer formato de instrução deve ser: 1. decodificação simples, 2. decodificação simples e 3. decodificação simples. Quaisquer tentativas de melhorar a densidade do código às custas do desempenho da CPU devem ser ridicularizadas em todas as oportunidades.

Fuga comercial

Chip de protótipo RISC-V (2013).

No início da década de 1980, incertezas significativas cercaram o conceito de RISC. Uma preocupação envolvia o uso da memória; uma única instrução de um processador tradicional como o 68k pode ser escrita como talvez meia dúzia das instruções RISC mais simples. Em teoria, isso pode tornar o sistema mais lento, pois ele gasta mais tempo buscando instruções na memória. Mas, em meados da década de 1980, os conceitos amadureceram o suficiente para serem vistos como comercialmente viáveis.

Projetos comerciais RISC começaram a surgir em meados da década de 1980. O primeiro MIPS R2000 apareceu em janeiro de 1986, seguido pouco depois por Hewlett Packard 's PA-RISC em alguns de seus computadores. Nesse ínterim, o esforço de Berkeley se tornou tão conhecido que acabou se tornando o nome de todo o conceito. Em 1987, a Sun Microsystems começou a distribuir sistemas com o processador SPARC , diretamente baseado no sistema Berkeley RISC II. O Comitê de Inovações em Computação e Comunicações do governo dos Estados Unidos credita a aceitação da viabilidade do conceito RISC ao sucesso do sistema SPARC. O sucesso do SPARC renovou o interesse dentro da IBM, que lançou novos sistemas RISC em 1990 e em 1995, os processadores RISC eram a base de uma indústria de servidores de US $ 15 bilhões.

No final da década de 1980, os novos designs RISC superavam facilmente todos os designs tradicionais por uma larga margem. Nesse ponto, todos os outros fornecedores começaram seus próprios esforços de RISC. Entre eles estavam o DEC Alpha , AMD Am29000 , Intel i860 e i960 , Motorola 88000 , IBM POWER e, um pouco depois, IBM / Apple / Motorola PowerPC . Muitos deles já desapareceram devido ao fato de muitas vezes não oferecerem nenhuma vantagem competitiva sobre outros da mesma época. Aqueles que permanecem são frequentemente usados ​​apenas em nichos de mercado ou como partes de outros sistemas, apenas SPARC e POWER têm qualquer mercado remanescente significativo. O outlier é o ARM , que, em parceria com a Apple, desenvolveu um design de baixo consumo de energia e depois se especializou naquele mercado, que na época era um nicho. Com o aumento da computação móvel, especialmente após o lançamento do iPhone , o ARM é agora o design de CPU de ponta mais usado no mercado.

A competição entre as abordagens RISC e CISC convencionais também foi objeto de análise teórica no início dos anos 1980, levando, por exemplo, à lei de ferro do desempenho do processador .

Desde 2010, uma nova arquitetura de conjunto de instruções de código aberto (ISA), RISC-V , está em desenvolvimento na Universidade da Califórnia, Berkeley, para fins de pesquisa e como uma alternativa gratuita para ISAs proprietários. A partir de 2014, a versão 2 do espaço do usuário ISA foi corrigida. O ISA é projetado para ser extensível a partir de um núcleo básico suficiente para um pequeno processador embutido para uso de supercomputador e computação em nuvem com extensões e coprocessadores padrão e definidos pelo designer de chips. Ele foi testado em design de silício com o ROCKET SoC, que também está disponível como um gerador de processador de código aberto na linguagem CHISEL.

Características e filosofia de design

Filosofia do conjunto de instruções

Um mal-entendido comum da frase "computador com conjunto de instruções reduzido" é que as instruções são simplesmente eliminadas, resultando em um conjunto menor de instruções. Na verdade, ao longo dos anos, os conjuntos de instruções RISC aumentaram de tamanho e hoje muitos deles têm um conjunto maior de instruções do que muitas CPUs CISC. Alguns processadores RISC, como o PowerPC, têm conjuntos de instruções tão grandes quanto o CISC IBM System / 370 , por exemplo; inversamente, o DEC PDP-8 - claramente uma CPU CISC porque muitas de suas instruções envolvem múltiplos acessos à memória - tem apenas 8 instruções básicas e algumas instruções estendidas. O termo "reduzido" nessa frase tinha a intenção de descrever o fato de que a quantidade de trabalho que qualquer instrução realiza é reduzida - no máximo um único ciclo de memória de dados - em comparação com as "instruções complexas" de CPUs CISC que podem exigir dezenas de dados ciclos de memória para executar uma única instrução.

O termo arquitetura de carregamento / armazenamento às vezes é preferido.

Outra maneira de ver o debate RISC / CISC é considerar o que é exposto ao compilador. Em um processador CISC, o hardware pode usar internamente registradores e sinalizar bit para implementar uma única instrução complexa, como STRING MOVE, mas ocultar esses detalhes do compilador. As operações internas de um processador RISC são "expostas ao compilador", levando ao backronym 'Relegar coisas interessantes ao compilador'.

Formato de instrução

A maioria das arquiteturas RISC tem instruções de comprimento fixo (geralmente 32 bits) e uma codificação simples, o que simplifica a busca, decodificação e lógica de emissão consideravelmente. Uma desvantagem das instruções de 32 bits é a densidade de código reduzida, que é uma característica mais adversa na computação embarcada do que nos mercados de estações de trabalho e servidores que as arquiteturas RISC foram originalmente projetadas para servir. Para resolver esse problema, várias arquiteturas, como ARM , Power ISA , MIPS , RISC-V e Adapteva Epiphany , têm um formato de instrução opcional curto com recursos reduzidos ou um recurso de compactação de instrução. O SH5 também segue esse padrão, embora tenha evoluído na direção oposta, tendo adicionado instruções de mídia mais longas a uma codificação original de 16 bits.

Utilização de hardware

Para qualquer nível de desempenho geral, um chip RISC normalmente terá muito menos transistores dedicados à lógica do núcleo, o que originalmente permitia aos projetistas aumentar o tamanho do conjunto de registros e aumentar o paralelismo interno.

Outros recursos das arquiteturas RISC incluem:

Projetos RISC também são mais propensos a apresentar um modelo de memória Harvard , onde o fluxo de instruções e o fluxo de dados são conceitualmente separados; isso significa que modificar a memória onde o código é mantido pode não ter nenhum efeito nas instruções executadas pelo processador (porque a CPU tem uma instrução separada e um cache de dados ), pelo menos até que uma instrução especial de sincronização seja emitida; Os processadores CISC que têm caches de instrução e dados separados geralmente os mantêm sincronizados automaticamente, para compatibilidade com processadores mais antigos.

Muitos projetos RISC anteriores também compartilhavam a característica de ter um slot de retardo de ramificação , um espaço de instrução imediatamente após um salto ou ramificação. A instrução neste espaço é executada, quer o desvio seja obtido ou não (em outras palavras, o efeito do desvio é atrasado). Esta instrução mantém a ALU da CPU ocupada pelo tempo extra normalmente necessário para realizar um desvio. Hoje em dia, o slot de atraso de ramificação é considerado um efeito colateral infeliz de uma estratégia específica para a implementação de alguns designs RISC, e os designs RISC modernos geralmente acabam com ele (como PowerPC e versões mais recentes de SPARC e MIPS).

Alguns aspectos atribuídos aos primeiros projetos rotulados com RISC por volta de 1975 incluem as observações de que os compiladores com restrição de memória da época muitas vezes eram incapazes de tirar proveito dos recursos destinados a facilitar a codificação de montagem manual , e que os modos de endereçamento complexos levam muitos ciclos para serem executados devido aos acessos de memória adicionais necessários. Argumentou-se que tais funções seriam melhor executadas por sequências de instruções mais simples se isso pudesse gerar implementações pequenas o suficiente para deixar espaço para muitos registradores, reduzindo o número de acessos lentos à memória. Nesses projetos simples, a maioria das instruções tem comprimento uniforme e estrutura semelhante, as operações aritméticas são restritas aos registros da CPU e apenas as instruções de carregamento e armazenamento separadas acessam a memória. Essas propriedades permitem um melhor equilíbrio dos estágios do pipeline do que antes, tornando os pipelines RISC significativamente mais eficientes e permitindo frequências de clock mais altas .

Ainda outro ímpeto de RISC e outros designs veio de medições práticas em programas do mundo real. Andrew Tanenbaum resumiu muitos deles, demonstrando que os processadores geralmente tinham imediatos superdimensionados. Por exemplo, ele mostrou que 98% de todas as constantes em um programa caberiam em 13 bits , embora muitos projetos de CPU dedicassem 16 ou 32 bits para armazená-las. Isso sugere que, para reduzir o número de acessos à memória, uma máquina de comprimento fixo pode armazenar constantes em bits não utilizados da própria palavra de instrução, de modo que eles estejam imediatamente prontos quando a CPU precisar deles (bem como o endereçamento imediato em um design convencional) . Isso exigia pequenos opcodes para deixar espaço para uma constante de tamanho razoável em uma palavra de instrução de 32 bits.

Como muitos programas do mundo real passam a maior parte do tempo executando operações simples, alguns pesquisadores decidiram se concentrar em tornar essas operações o mais rápido possível. A taxa de clock de uma CPU é limitada pelo tempo que leva para executar a suboperação mais lenta de qualquer instrução; diminuir esse tempo de ciclo frequentemente acelera a execução de outras instruções. O foco em "instruções reduzidas" levou a máquina resultante a ser chamada de "computador com conjunto de instruções reduzido" (RISC). O objetivo era tornar as instruções tão simples que pudessem ser facilmente canalizadas , a fim de atingir um único processamento de clock em altas frequências .

Posteriormente, foi notado que uma das características mais significativas dos processadores RISC era que a memória externa só era acessível por meio de uma instrução load ou store . Todas as outras instruções foram limitadas a registros internos. Isso simplificou muitos aspectos do projeto do processador: permitindo que as instruções tenham comprimento fixo, simplificando os pipelines e isolando a lógica para lidar com o atraso na conclusão de um acesso à memória (falha de cache, etc.) para apenas duas instruções. Isso fez com que os projetos RISC fossem chamados de arquiteturas de carga / armazenamento .

Comparação com outras arquiteturas

Algumas CPUs foram projetadas especificamente para ter um conjunto muito pequeno de instruções - mas esses designs são muito diferentes dos designs RISC clássicos, então eles receberam outros nomes, como computador com conjunto mínimo de instruções (MISC) ou arquitetura disparada por transporte (TTA).

As arquiteturas RISC tradicionalmente tiveram poucos sucessos nos mercados de PCs desktop e servidores convencionais, onde as plataformas baseadas em x86 continuam sendo a arquitetura de processador dominante. No entanto, isso pode mudar, pois os processadores baseados em ARM estão sendo desenvolvidos para sistemas de alto desempenho. Fabricantes como Cavium , AMD e Qualcomm lançaram processadores de servidor baseados na arquitetura ARM. ARM é ainda parceira da Cray em 2017 para produzir um supercomputador baseado em ARM. No desktop, a Microsoft anunciou que planejava oferecer suporte à versão para PC do Windows 10 em dispositivos baseados em Qualcomm Snapdragon em 2017 como parte de sua parceria com a Qualcomm. Esses dispositivos darão suporte a aplicativos Windows compilados para x86 de 32 bits por meio de um emulador de processador x86 que converte o código x86 de 32 bits em código ARM64 . A Apple anunciou que fará a transição de seus desktops e laptops Mac de processadores Intel para SoCs baseados em ARM64 desenvolvidos internamente, chamados de silício da Apple ; os primeiros desses computadores, usando o processador Apple M1 , foram lançados em novembro de 2020. Macs com silício da Apple podem executar binários x86-64 com Rosetta 2 , um tradutor de x86-64 para ARM64.

Fora da área de desktop, no entanto, a arquitetura ARM RISC é amplamente utilizada em smartphones, tablets e muitas formas de dispositivos incorporados. Enquanto os primeiros designs RISC diferiam significativamente dos designs CISC contemporâneos, em 2000 as CPUs de maior desempenho da linha RISC eram quase indistinguíveis das CPUs de maior desempenho da linha CISC.

Uso de arquiteturas RISC

As arquiteturas RISC agora são usadas em uma variedade de plataformas, de smartphones e tablets a alguns dos supercomputadores mais rápidos do mundo , como Fugaku , o mais rápido na lista TOP500 em novembro de 2020, e Summit , Sierra e Sunway TaihuLight , os três próximos nessa lista.

Sistemas low-end e móveis

No início do século 21, a maioria dos sistemas de baixo custo e móveis dependia de arquiteturas RISC. Exemplos incluem:

Computadores desktop e laptop

Estações de trabalho, servidores e supercomputadores

Veja também

Referências

links externos