História das CPUs de uso geral - History of general-purpose CPUs

A história das CPUs de uso geral é uma continuação da história anterior do hardware de computação .

1950: primeiros designs

Um módulo de tubo de vácuo dos primeiros computadores IBM da série 700

No início dos anos 1950, cada projeto de computador era único. Não havia máquinas compatíveis com versões anteriores ou arquiteturas de computador com implementações múltiplas e diferentes. Os programas escritos para uma máquina não rodariam em nenhum outro tipo, mesmo em outros tipos da mesma empresa. Essa não era uma grande desvantagem, porque nenhum grande conjunto de software havia sido desenvolvido para rodar em computadores, portanto, começar a programação do zero não era visto como uma grande barreira.

A liberdade de design da época era muito importante porque os designers eram muito limitados pelo custo da eletrônica e apenas começaram a explorar como um computador poderia ser melhor organizado. Alguns dos recursos básicos introduzidos durante este período incluíam registradores de índice (no Ferranti Mark 1 ), uma instrução de salvamento de endereço de retorno ( UNIVAC I ), operandos imediatos ( IBM 704 ) e detecção de operações inválidas ( IBM 650 ).

No final da década de 1950, os construtores comerciais desenvolveram computadores para entrega em caminhões, fabricados em fábricas. O computador mais amplamente instalado foi o IBM 650 , que usava memória de tambor na qual os programas eram carregados usando fita perfurada de papel ou cartões perfurados . Algumas máquinas de última geração também incluem memória central, que fornece velocidades mais altas. Os discos rígidos também estavam começando a se tornar populares.

Um computador é um ábaco automático . O tipo de sistema numérico afeta a maneira como ele funciona. No início dos anos 1950, a maioria dos computadores foi construída para tarefas específicas de processamento numérico, e muitas máquinas usavam números decimais como sistema numérico básico; isto é, as funções matemáticas das máquinas trabalhavam na base 10 em vez da base 2, como é comum hoje. Eles não eram apenas decimais codificados por binários (BCD). A maioria das máquinas tinha dez tubos de vácuo por dígito em cada registro do processador . Alguns dos primeiros projetistas de computador soviéticos implementaram sistemas baseados na lógica ternária ; ou seja, um bit pode ter três estados: +1, 0 ou -1, correspondendo a tensão positiva, zero ou negativa.

Um dos primeiros projetos para a Força Aérea dos Estados Unidos , o BINAC tentou fazer um computador simples e leve usando aritmética binária. Isso impressionou profundamente a indústria.

Ainda em 1970, as principais linguagens de computador eram incapazes de padronizar seu comportamento numérico porque os computadores decimais tinham grupos de usuários grandes demais para serem alienados.

Mesmo quando os designers usaram um sistema binário, eles ainda tinham muitas ideias estranhas. Alguns usavam aritmética de magnitude de sinal (-1 = 10001), ou complemento de uns (-1 = 11110), em vez da aritmética moderna de complemento de dois (-1 = 11111). A maioria dos computadores usava conjuntos de caracteres de seis bits porque codificavam adequadamente os cartões perfurados Hollerith . Foi uma grande revelação para os designers desse período perceber que a palavra de dados deveria ser um múltiplo do tamanho do caractere. Eles começaram a projetar computadores com palavras de dados de 12, 24 e 36 bits (por exemplo, consulte o TX-2 ).

Nesta época, a lei de Grosch dominava o design do computador: o custo do computador aumentava na proporção do quadrado de sua velocidade.

1960: revolução do computador e CISC

Um grande problema com os primeiros computadores era que um programa para um não funcionava em outros. As empresas de computadores descobriram que seus clientes tinham poucos motivos para permanecer leais a uma determinada marca, já que o próximo computador que comprassem seria incompatível de qualquer maneira. Nesse ponto, as únicas preocupações eram geralmente o preço e o desempenho.

Em 1962, a IBM tentou uma nova abordagem para projetar computadores. O plano era fazer uma família de computadores que pudessem rodar todos o mesmo software, mas com desempenhos diferentes e preços diferentes. Conforme as necessidades dos usuários aumentavam, eles podiam migrar para computadores maiores e ainda manter todo o seu investimento em programas, dados e mídia de armazenamento.

Para fazer isso, eles projetaram um computador de referência denominado System / 360 (S / 360). Este era um computador virtual, um conjunto de instruções de referência e habilidades que todas as máquinas da família suportariam. Para fornecer diferentes classes de máquinas, cada computador da família usaria mais ou menos emulação de hardware, e mais ou menos emulação de microprograma , para criar uma máquina capaz de executar todo o conjunto de instruções S / 360 .

Por exemplo, uma máquina de baixo custo pode incluir um processador muito simples de baixo custo. No entanto, isso exigiria o uso de um emulador de microcódigo maior para fornecer o resto do conjunto de instruções, o que o tornaria mais lento. Uma máquina de última geração usaria um processador muito mais complexo que poderia processar diretamente mais do design do S / 360, rodando assim um emulador muito mais simples e rápido.

A IBM escolheu conscientemente tornar o conjunto de instruções de referência bastante complexo e muito capaz. Mesmo que o computador fosse complexo, seu armazenamento de controle contendo o microprograma permaneceria relativamente pequeno e poderia ser feito com uma memória muito rápida. Outro efeito importante foi que uma instrução poderia descrever uma sequência bastante complexa de operações. Assim, os computadores geralmente teriam que buscar menos instruções da memória principal, o que poderia ser mais lento, menor e mais barato para uma determinada combinação de velocidade e preço.

Como o S / 360 era para ser o sucessor de máquinas científicas como o 7090 e máquinas de processamento de dados como o 1401 , ele precisava de um design que pudesse suportar razoavelmente todas as formas de processamento. Conseqüentemente, o conjunto de instruções foi projetado para manipular números binários simples e texto, ponto flutuante científico (semelhante aos números usados ​​em uma calculadora) e a aritmética decimal em código binário necessária aos sistemas de contabilidade.

Quase todos os computadores seguintes incluíram essas inovações de alguma forma. Este conjunto básico de recursos é agora chamado de computação de conjunto de instruções complexas (CISC, pronuncia-se "sisk"), um termo que não foi inventado até muitos anos depois, quando a computação de conjunto de instruções reduzido (RISC) começou a ganhar participação no mercado.

Em muitos CISCs, uma instrução pode acessar registradores ou memória, geralmente de várias maneiras diferentes. Isso tornava os CISCs mais fáceis de programar, porque um programador conseguia lembrar apenas de trinta a cem instruções e um conjunto de três a dez modos de endereçamento, em vez de milhares de instruções distintas. Isso foi chamado de conjunto de instruções ortogonais . A arquitetura PDP-11 e Motorola 68000 são exemplos de conjuntos de instruções quase ortogonais.

Havia também o BUNCH ( Burroughs , UNIVAC , NCR , Control Data Corporation e Honeywell ) que competia com a IBM nessa época; no entanto, a IBM dominou a era com o S / 360.

A Burroughs Corporation (que mais tarde se fundiu com a Sperry / Univac para formar a Unisys ) ofereceu uma alternativa ao S / 360 com sua série B5000 de grandes sistemas Burroughs . Em 1961, o B5000 tinha memória virtual, multiprocessamento simétrico, um sistema operacional de multiprogramação (Master Control Program (MCP)), escrito em ALGOL 60 , e os primeiros compiladores descendentes recursivos da indústria já em 1964.

Final dos anos 1960 - início dos anos 1970: LSI e microprocessadores

O MOSFET (transistor de efeito de campo semicondutor de óxido metálico), também conhecido como transistor MOS, foi inventado por Mohamed Atalla e Dawon Kahng no Bell Labs em 1959 e demonstrado em 1960. Isso levou ao desenvolvimento do óxido metálico - circuito integrado (IC) de semicondutor (MOS) , proposto por Kahng em 1961, e fabricado por Fred Heiman e Steven Hofstein na RCA em 1962. Com sua alta escalabilidade e consumo de energia muito menor e maior densidade do que os transistores de junção bipolar , o MOSFET tornou possível construir circuitos integrados de alta densidade . Os avanços na tecnologia de circuito integrado MOS levaram ao desenvolvimento de chips de integração em grande escala (LSI) no final dos anos 1960 e, eventualmente, à invenção do microprocessador no início dos anos 1970.

Na década de 1960, o desenvolvimento de calculadoras eletrônicas , relógios eletrônicos , o computador de orientação Apollo e o míssil Minuteman ajudaram a tornar os circuitos integrados MOS econômicos e práticos. No final da década de 1960, os primeiros chips de calculadora e relógio começaram a mostrar que computadores muito pequenos podem ser possíveis com a integração em grande escala (LSI). Isso culminou na invenção do microprocessador , uma CPU de chip único. O Intel 4004 , lançado em 1971, foi o primeiro microprocessador comercial. As origens do 4004 remontam ao "Projeto Busicom", que começou na empresa japonesa de calculadoras Busicom em abril de 1968, quando o engenheiro Masatoshi Shima foi encarregado de projetar um chipset LSI de uso especial , junto com seu supervisor Tadashi Tanba, para uso em a calculadora de mesa Busicom 141-PF com impressora integrada. Seu projeto inicial consistia em sete chips LSI, incluindo uma CPU de três chips . Seu projeto incluiu unidades aritméticas ( somadores ), unidades de multiplicadores, registros , memória só de leitura , e uma macro-instruction set para controlar um computador decimal sistema. Busicom então queria um chipset LSI de uso geral, não apenas para calculadoras de mesa, mas também para outros equipamentos, como caixa eletrônico , caixa registradora e máquina de faturamento . Shima então começou a trabalhar em um chipset LSI de uso geral no final de 1968. O engenheiro da Sharp , Tadashi Sasaki , que também se envolveu com seu desenvolvimento, concebeu um microprocessador de chip único em 1968, quando discutiu o conceito em uma reunião de brainstorming realizada no Japão. Sasaki atribui a invenção básica de quebrar o chipset da calculadora em quatro partes com ROM (4001), RAM (4002), registradores de deslocamento (4003) e CPU (4004) a uma mulher não identificada, uma pesquisadora de engenharia de software do Nara Women's College , que era presentes na reunião. Sasaki então teve seu primeiro encontro com Robert Noyce, da Intel, em 1968, e apresentou o conceito de chipset de quatro divisões da mulher à Intel e ao Busicom.

O Busicom abordou a empresa americana Intel para obter ajuda na fabricação em 1969. A Intel, que fabricava principalmente memória na época, tinha instalações para fabricar o chip MOS de porta de silício de alta densidade de que a Busicom precisava. Shima foi para a Intel em junho de 1969 para apresentar sua proposta de design. Devido à falta de engenheiros lógicos da Intel para entender os esquemas lógicos ou engenheiros de circuito para convertê-los, a Intel pediu a Shima para simplificar a lógica. A Intel queria um design de CPU de chip único, influenciado por Tadashi Sasaki da Sharp, que apresentou o conceito para Busicom e Intel em 1968. O design do microprocessador de chip único foi então formulado por Marcian "Ted" Hoff da Intel em 1969, simplificando o design inicial de Shima para quatro chips, incluindo uma CPU de chip único. Como a formulação de Hoff carecia de detalhes importantes, Shima teve suas próprias ideias para encontrar soluções para sua implementação. Shima foi responsável por adicionar um shift register estático de 10 bits para torná-lo útil como buffer de impressora e interface de teclado, muitas melhorias no conjunto de instruções , tornando a organização RAM adequada para uma calculadora, a transferência de informações de endereço de memória , o programa principal em uma área de desempenho e capacidade do programa, a especificação funcional, ideia de computador decimal, software, lógica de calculadora de desktop, controle de E / S em tempo real e instrução de troca de dados entre o acumulador e o registrador de uso geral . Hoff e Shima finalmente perceberam o conceito de microprocessador de 4 bits juntos, com a ajuda de Stanley Mazor da Intel para interpretar as idéias de Shima e Hoff. As especificações dos quatro chips foram desenvolvidas ao longo de alguns meses em 1969, entre uma equipe da Intel liderada por Hoff e uma equipe do Busicom liderada por Shima.

No final de 1969, Shima voltou ao Japão. Depois disso, a Intel não fez mais nenhum trabalho no projeto até o início de 1970. Shima voltou para a Intel no início de 1970 e descobriu que nenhum trabalho adicional havia sido feito no 4004 desde que ele saiu, e que Hoff havia mudado para outros projetos. Apenas uma semana antes de Shima retornar à Intel, Federico Faggin ingressou na Intel e se tornou o líder do projeto. Depois que Shima explicou o projeto a Faggin, eles trabalharam juntos para projetar o 4004. Assim, os principais designers do chip foram Faggin, que criou a metodologia de design e o design do chip baseado em silício, Hoff, que formulou a arquitetura antes de passar para outros projetos e Shima, que produziu o design inicial do Busicom e, em seguida, ajudou no desenvolvimento do design final da Intel. O 4004 foi apresentado pela primeira vez no Japão, como o microprocessador da calculadora Busicom 141-PF, em março de 1971. Na América do Norte, a primeira menção pública ao 4004 foi um anúncio na edição de 15 de novembro de 1971 da Electronic News .

NEC lançou o μPD707 e μPD708, um 4-bit de dois chips CPU , em 1971. Eles foram seguidos por primeiro microprocessador single-chip da NEC, o μPD700, em abril de 1972. Foi um protótipo para o μCOM-4 (μPD751), lançado em abril de 1973, combinando o μPD707 e o μPD708 em um único microprocessador. Em 1973, a Toshiba lançou o TLCS-12, o primeiro microprocessador de 12 bits .

1970: revolução do microprocessador

O primeiro comercial microprocessador , a codificação binária decimal (BCD) com base Intel 4004 , foi lançado pela Busicom e Intel em 1971. Em março de 1972, a Intel lançou um microprocessador com um 8-bit arquitetura, o 8008 , um sistema integrado pMOS lógica re- implementação da CPU Datapoint 2200 baseada em lógica transistor-transistor (TTL) .

Os designers do 4004 Federico Faggin e Masatoshi Shima desenvolveram seu sucessor, o Intel 8080 , um microprocessador um pouco mais parecido com um minicomputador , amplamente baseado no feedback do cliente no limitado 8008. Muito parecido com o 8008, era usado para aplicações como terminais , impressoras, caixas registradoras e robôs industriais. No entanto, o 8080, mais capaz, também se tornou a CPU alvo original para um sistema operacional de computador pessoal padrão antigo de fato chamado CP / M e foi usado para tarefas de controle exigentes como mísseis de cruzeiro e muitos outros usos. Lançado em 1974, o 8080 se tornou um dos primeiros microprocessadores realmente difundidos.

Em meados da década de 1970, o uso de circuitos integrados em computadores era comum. A década foi marcada por turbulências no mercado causadas pela redução do preço dos transistores.

Tornou-se possível colocar uma CPU inteira em uma placa de circuito impresso. O resultado foi que os minicomputadores, geralmente com palavras de 16 bits e 4 K a 64 K de memória, tornaram-se comuns.

Os CISCs eram considerados os tipos de computadores mais poderosos, porque seu microcódigo era pequeno e podia ser armazenado em uma memória de alta velocidade. A arquitetura CISC também abordou a lacuna semântica como ela foi então percebida. Essa era uma distância definida entre a linguagem de máquina e as linguagens de programação de nível superior usadas para programar uma máquina. Sentiu-se que os compiladores poderiam fazer um trabalho melhor com um conjunto de instruções mais rico.

CISCs customizados eram comumente construídos usando lógica de computador bit slice , como os chips AMD 2900, com microcódigo customizado. Um componente de bit slice é uma parte de uma unidade lógica aritmética (ALU), arquivo de registro ou microsequencer. A maioria dos circuitos integrados bit-slice tinha 4 bits de largura.

No início dos anos 1970, o PDP-11 foi desenvolvido, sem dúvida o pequeno computador mais avançado de sua época. Quase imediatamente, CISCs de palavra mais ampla foram introduzidos, o VAX de 32 bits e o PDP-10 de 36 bits .

A IBM continuou a fazer computadores grandes e rápidos. No entanto, a definição de grande e rápido agora significava mais de um megabyte de RAM, velocidades de clock próximas a um megahertz e dezenas de megabytes de unidades de disco.

O System 370 da IBM era uma versão do 360 ajustada para rodar ambientes virtuais de computação. O computador virtual foi desenvolvido para reduzir as chances de falha irrecuperável de software.

A série de grandes sistemas Burroughs (B5000, B6000, B7000) atingiu sua maior fatia de mercado. Era um computador de pilha cujo sistema operacional foi programado em um dialeto de Algol.

Todos esses desenvolvimentos diferentes competiam por participação no mercado.

O primeiro microprocessador de 16 bits de chip único foi lançado em 1975. A Panafacom , um conglomerado formado pelas empresas japonesas Fujitsu , Fuji Electric e Matsushita , lançou o MN1610, um microprocessador comercial de 16 bits. De acordo com a Fujitsu, foi "o primeiro microcomputador de 16 bits do mundo em um único chip".

O Intel 8080 foi a base para o Intel 8086 de 16 bits , que é um ancestral direto da onipresente família x86 de hoje (incluindo Pentium e Core i7 ). Cada instrução do 8080 tem um equivalente direto no grande conjunto de instruções x86, embora os valores do opcode sejam diferentes no último.

Início dos anos 1980-1990: Lições de RISC

No início da década de 1980, pesquisadores da UC Berkeley e da IBM descobriram que a maioria dos compiladores e intérpretes de linguagem de computador usava apenas um pequeno subconjunto das instruções da computação de conjunto de instruções complexas (CISC). Muito do poder da CPU estava sendo ignorado no uso no mundo real. Eles perceberam que, ao tornar o computador mais simples e menos ortogonal, poderiam torná-lo mais rápido e menos caro ao mesmo tempo.

Ao mesmo tempo, o cálculo da CPU tornou-se mais rápido em relação ao tempo de acesso à memória necessária. Os designers também experimentaram o uso de grandes conjuntos de registros internos. O objetivo era armazenar em cache os resultados intermediários nos registros sob o controle do compilador. Isso também reduziu o número de modos de endereçamento e ortogonalidade.

Os projetos de computador baseados nesta teoria foram chamados de computação reduzida de conjunto de instruções (RISC). Os RISCs geralmente tinham um número maior de registradores, acessados ​​por instruções mais simples, com algumas instruções específicas para carregar e armazenar dados na memória. O resultado foi um núcleo de CPU muito simples rodando em alta velocidade, suportando os tipos de operações que os compiladores estavam usando de qualquer maneira.

Uma variante comum no projeto RISC emprega a arquitetura Harvard , em oposição à arquitetura de Von Neumann ou arquitetura de programa armazenado comum à maioria dos outros projetos. Em uma máquina de Arquitetura Harvard, o programa e os dados ocupam dispositivos de memória separados e podem ser acessados ​​simultaneamente. Nas máquinas Von Neumann, os dados e programas são misturados em um dispositivo de memória, exigindo acesso sequencial que produz o chamado gargalo de Von Neumann .

Uma desvantagem do projeto RISC é que os programas executados neles tendem a ser maiores. Isso ocorre porque os compiladores devem gerar sequências mais longas das instruções mais simples para realizar os mesmos resultados. Uma vez que essas instruções devem ser carregadas da memória de qualquer maneira, o código maior compensa parte da manipulação de memória rápida do projeto RISC.

No início da década de 1990, os engenheiros da Hitachi do Japão encontraram maneiras de compactar os conjuntos de instruções reduzidos para que se ajustassem a sistemas de memória ainda menores do que os CISCs. Tais esquemas de compressão foram usadas para o conjunto de instruções do seu SuperH série de microprocessadores, introduzido em 1992. O SuperH conjunto de instruções foi depois adaptado para arquitetura ARM 's polegar conjunto de instruções. Em aplicativos que não precisam executar softwares binários mais antigos, os RISCs compactados estão crescendo para dominar as vendas.

Outra abordagem para RISCs era o computador com conjunto de instruções mínimo (MISC), conjunto de instruções niládico ou de operando zero . Essa abordagem percebeu que a maior parte do espaço em uma instrução era usada para identificar os operandos da instrução. Essas máquinas colocavam os operandos em uma pilha push-down (último a entrar, primeiro a sair) . O conjunto de instruções foi complementado com algumas instruções para buscar e armazenar memória. A maioria usa cache simples para fornecer máquinas RISC extremamente rápidas, com código muito compacto. Outro benefício foi que as latências de interrupção eram muito pequenas, menores do que a maioria das máquinas CISC (uma característica rara em máquinas RISC). A arquitetura de grandes sistemas Burroughs usou essa abordagem. O B5000 foi projetado em 1961, muito antes do termo RISC ser inventado. A arquitetura coloca seis instruções de 8 bits em uma palavra de 48 bits e foi um precursor do design de palavras de instrução muito longas (VLIW) (veja abaixo: 1990 até hoje ).

A arquitetura Burroughs foi uma das inspirações para a linguagem de programação Forth de Charles H. Moore , que por sua vez inspirou seus designs posteriores de chips MISC. Por exemplo, seus núcleos f20 tinham 31 instruções de 5 bits, que cabiam quatro em uma palavra de 20 bits.

Os chips RISC agora dominam o mercado de sistemas embarcados de 32 bits. Os chips RISC menores estão cada vez mais comuns no mercado de sistemas embarcados de 8 bits, que é sensível a custos. O principal mercado para CPUs RISC tem sido os sistemas que precisam de baixa potência ou tamanho pequeno.

Até mesmo alguns processadores CISC (baseados em arquiteturas que foram criadas antes que o RISC se tornasse dominante), como os processadores x86 mais novos , traduzem instruções internamente em um conjunto de instruções semelhante ao RISC.

Esses números podem surpreender a muitos, porque o mercado é percebido como computadores desktop. Os designs x86 dominam as vendas de desktops e notebooks, mas esses computadores são apenas uma pequena fração dos computadores vendidos agora. A maioria das pessoas nos países industrializados possui mais computadores em sistemas embarcados no carro e em casa do que em suas mesas.

De meados ao final dos anos 1980: Explorando o paralelismo de nível de instrução

Em meados da década de 1980, os designers começaram a usar uma técnica chamada pipelining de instruções , na qual o processador trabalha com várias instruções em diferentes estágios de conclusão. Por exemplo, o processador pode recuperar os operandos para a próxima instrução enquanto calcula o resultado da atual. CPUs modernas podem usar mais de uma dúzia desses estágios. (O pipelining foi originalmente desenvolvido no final dos anos 1950 pela International Business Machines (IBM) em seu computador mainframe 7030 (Stretch).) Os computadores com conjunto mínimo de instruções (MISC) podem executar instruções em um ciclo sem a necessidade de pipelining.

Uma ideia semelhante, introduzida apenas alguns anos depois, era executar várias instruções em paralelo em unidades lógicas aritméticas (ALUs) separadas . Em vez de operar em apenas uma instrução por vez, a CPU procurará várias instruções semelhantes que não dependem umas das outras e as executará em paralelo. Essa abordagem é chamada de projeto de processador superescalar .

Tais métodos são limitados pelo grau de paralelismo de nível de instrução (ILP), o número de instruções não dependentes no código do programa. Alguns programas podem funcionar muito bem em processadores superescalares devido ao alto ILP inerente, principalmente gráficos. No entanto, problemas mais gerais têm muito menos ILP, reduzindo assim os possíveis aceleramentos desses métodos.

Ramificação é um grande culpado. Por exemplo, um programa pode adicionar dois números e desviar para um segmento de código diferente se o número for maior do que um terceiro número. Nesse caso, mesmo que a operação de ramificação seja enviada para a segunda ALU para processamento, ela ainda deverá aguardar os resultados da adição. Portanto, ele não funciona mais rápido do que se houvesse apenas uma ALU. A solução mais comum para esse tipo de problema é usar um tipo de previsão de ramificação .

Para aumentar a eficiência de várias unidades funcionais disponíveis em designs superescalares , as dependências do registro de operandos foram outro fator limitante. Para minimizar essas dependências, foi introduzida a execução fora de ordem de instruções. Em tal esquema, os resultados da instrução que completam fora de ordem devem ser reordenados na ordem do programa pelo processador para que o programa seja reiniciado após uma exceção. A execução fora de ordem foi o principal avanço da indústria de computadores durante os anos 1990.

Um conceito semelhante é a execução especulativa , em que as instruções de uma direção de uma ramificação (a direção prevista) são executadas antes que a direção da ramificação seja conhecida. Quando a direção do ramal é conhecida, a direção prevista e a direção real são comparadas. Se a direção prevista estiver correta, as instruções executadas especulativamente e seus resultados são mantidos; se estiver incorreto, essas instruções e seus resultados serão apagados. A execução especulativa, juntamente com um preditor de ramificação preciso, oferece um grande ganho de desempenho.

Esses avanços, que foram originalmente desenvolvidos a partir de pesquisas para projetos no estilo RISC, permitem que os processadores CISC modernos executem doze ou mais instruções por ciclo de clock, quando os projetos CISC tradicionais podem levar doze ou mais ciclos para executar uma instrução.

A lógica de escalonamento de instruções resultante desses processadores é grande, complexa e difícil de verificar. Além disso, uma complexidade maior precisa de mais transistores, aumentando o consumo de energia e o aquecimento. Nestes, o RISC é superior porque as instruções são mais simples, têm menos interdependência e tornam as implementações superescalares mais fáceis. No entanto, como a Intel demonstrou, os conceitos podem ser aplicados a um projeto de computação de conjunto de instruções complexo (CISC), com tempo e dinheiro suficientes.

1990 até hoje: Olhando para o futuro

VLIW e EPIC

A lógica de escalonamento de instruções que cria um processador superescalar é a lógica booleana. No início da década de 1990, uma inovação significativa foi perceber que a coordenação de um computador multi-ALU poderia ser movida para o compilador , o software que traduz as instruções de um programador em instruções de nível de máquina.

Este tipo de computador é denominado computador de palavra de instrução muito longa (VLIW).

Agendar instruções estaticamente no compilador (versus agendar dinamicamente no processador) pode reduzir a complexidade da CPU. Isso pode melhorar o desempenho e reduzir o calor e o custo.

Infelizmente, o compilador carece de conhecimento preciso dos problemas de programação de tempo de execução. A simples mudança do multiplicador de frequência do núcleo da CPU terá um efeito no agendamento. A operação do programa, conforme determinado pelos dados de entrada, terá efeitos importantes na programação. Para superar esses problemas graves, um sistema VLIW pode ser aprimorado adicionando o agendamento dinâmico normal, perdendo algumas das vantagens do VLIW.

A programação estática no compilador também assume que o código gerado dinamicamente será incomum. Antes da criação do Java e da máquina virtual Java , isso era verdade. Era razoável supor que compilações lentas afetariam apenas os desenvolvedores de software. Agora, com as máquinas virtuais de compilação just-in-time (JIT) sendo usadas para muitas linguagens, a geração lenta de código também afeta os usuários.

Houve várias tentativas malsucedidas de comercializar VLIW. O problema básico é que um computador VLIW não se adapta a diferentes pontos de preço e desempenho, como um computador agendado dinamicamente pode fazer. Outro problema é que o projeto do compilador para computadores VLIW é muito difícil e os compiladores, a partir de 2005, frequentemente emitem código abaixo do ideal para essas plataformas.

Além disso, os computadores VLIW otimizam o rendimento, não a latência baixa, portanto, não eram atraentes para os engenheiros que projetavam controladores e outros computadores embutidos em máquinas. Os mercados de sistemas embarcados muitas vezes foram os pioneiros em outras melhorias de computador, proporcionando um grande mercado despreocupado com a compatibilidade com softwares mais antigos.

Em janeiro de 2000, a Transmeta Corporation deu o novo passo de colocar um compilador na unidade de processamento central e fazer o compilador traduzir de um código de byte de referência (no caso deles, instruções x86 ) para um conjunto de instruções VLIW interno. Este método combina a simplicidade do hardware, baixa potência e velocidade do VLIW RISC com o sistema de memória principal compacto e compatibilidade reversa do software fornecida pelo CISC popular.

O chip Itanium da Intel é baseado no que eles chamam de design de computação de instrução explicitamente paralela (EPIC). Este projeto supostamente fornece a vantagem VLIW de maior rendimento de instrução. No entanto, ele evita alguns dos problemas de escala e complexidade, fornecendo explicitamente em cada pacote de instruções informações sobre suas dependências. Essas informações são calculadas pelo compilador, como seria em um design VLIW. As primeiras versões também são compatíveis com versões anteriores do software x86 mais recente por meio de um modo de emulador no chip . O desempenho inteiro foi decepcionante e, apesar das melhorias, as vendas nos mercados de volume continuam baixas.

Multi-threading

Os projetos atuais funcionam melhor quando o computador está executando apenas um programa. No entanto, quase todos os sistemas operacionais modernos permitem a execução de vários programas juntos. Para que a CPU mude e trabalhe em outro programa, é necessária uma troca de contexto cara . Em contraste, CPUs multithread podem lidar com instruções de vários programas ao mesmo tempo.

Para fazer isso, tais CPUs incluem vários conjuntos de registros. Quando ocorre uma troca de contexto, o conteúdo dos registros de trabalho é simplesmente copiado para um de um conjunto de registros para esse propósito.

Esses projetos geralmente incluem milhares de registros em vez de centenas, como em um projeto típico. No lado negativo, os registradores tendem a ser um pouco caros no espaço do chip necessário para implementá-los. Este espaço do chip pode ser usado de outra forma para alguma outra finalidade.

A Intel chama essa tecnologia de "hyperthreading" e oferece dois threads por núcleo em sua linha atual de Core i3, Core i5, Core i7 e Core i9 Desktop (bem como em sua linha de Core i3, Core i5 e Core i7 Mobile), bem como oferecendo até quatro threads por núcleo em processadores Xeon Phi de ponta.

Multi-core

CPUs multi-core são tipicamente múltiplos núcleos de CPU no mesmo die, conectados uns aos outros através de um cache L2 ou L3 compartilhado, um bus on-die ou um switch crossbar on-die . Todos os núcleos da CPU na matriz compartilham componentes de interconexão com os quais fazem interface com outros processadores e o resto do sistema. Esses componentes podem incluir uma interface de barramento frontal , um controlador de memória para fazer interface com a memória de acesso aleatório dinâmica (DRAM), um link coerente de cache para outros processadores e um link não coerente para a ponte sul e dispositivos de E / S. Os termos multi-core e unidade de microprocessador (MPU) têm uso geral para um dado com múltiplos núcleos de CPU.

RAM inteligente

Uma maneira de contornar o gargalo de Von Neumann é misturar um processador e DRAM em um único chip.

Lógica reconfigurável

Outra trilha de desenvolvimento é combinar lógica reconfigurável com uma CPU de uso geral. Nesse esquema, uma linguagem de computador especial compila sub-rotinas de execução rápida em uma máscara de bits para configurar a lógica. Partes mais lentas ou menos críticas do programa podem ser executadas compartilhando seu tempo na CPU. Este processo permite a criação de dispositivos, como rádios de software , utilizando processamento digital de sinais para realizar funções normalmente realizadas por eletrônicos analógicos .

Processadores de código aberto

À medida que as linhas entre hardware e software ficam cada vez mais confusas devido ao progresso na metodologia de design e à disponibilidade de chips como FPGA ( field-programmable gate arrays ) e processos de produção mais baratos, até mesmo o hardware de código aberto começou a aparecer. Comunidades vagamente unidas como OpenCores e RISC-V anunciaram recentemente arquiteturas de CPU totalmente abertas, como o OpenRISC, que podem ser prontamente implementadas em FPGAs ou em chips personalizados, por qualquer pessoa, sem taxas de licença, e até mesmo fabricantes de processadores estabelecidos como a Sun Microsystems têm liberou designs de processador (por exemplo, OpenSPARC ) sob licenças de código aberto.

CPUs assíncronas

Outra opção é uma CPU sem relógio ou assíncrona . Ao contrário dos processadores convencionais, os processadores sem relógio não têm relógio central para coordenar o progresso dos dados no pipeline. Em vez disso, os estágios da CPU são coordenados usando dispositivos lógicos chamados controles de tubulação ou sequenciadores FIFO . Basicamente, o controlador de pipeline clica no próximo estágio da lógica quando o estágio existente é concluído. Assim, um relógio central é desnecessário.

Em relação à lógica com clock, pode ser mais fácil implementar dispositivos de alto desempenho em lógica assíncrona:

  • Em uma CPU com clock, nenhum componente pode funcionar mais rápido do que a taxa de clock. Em uma CPU sem relógio, os componentes podem ser executados em velocidades diferentes.
  • Em uma CPU com clock, o clock não pode ir mais rápido do que o desempenho de pior caso do estágio mais lento. Em uma CPU sem relógio, quando um estágio termina mais rápido do que o normal, o próximo estágio pode obter os resultados imediatamente, em vez de esperar pelo próximo tique do relógio. Um estágio pode terminar mais rápido do que o normal devido ao tipo de entrada de dados (por exemplo, a multiplicação pode ser muito rápida se ocorrer por 0 ou 1), ou porque está funcionando em uma tensão mais alta ou temperatura mais baixa do que o normal.

Os proponentes da lógica assíncrona acreditam que essas habilidades teriam os seguintes benefícios:

  • menor dissipação de energia para um determinado desempenho
  • as maiores velocidades de execução possíveis

A maior desvantagem da CPU sem relógio é que a maioria das ferramentas de design da CPU assumem uma CPU com relógio (um circuito síncrono ), portanto, fazer uma CPU sem relógio (projetar um circuito assíncrono ) envolve modificar as ferramentas de design para lidar com a lógica sem relógio e fazer testes extras para garantir que o design evita problemas de metaestabilidade .

Mesmo assim, várias CPUs assíncronas foram construídas, incluindo

Comunicação ótica

Uma opção promissora é eliminar o barramento frontal . Os diodos laser verticais modernos permitem essa mudança. Em teoria, os componentes de um computador óptico poderiam se conectar diretamente por meio de um sistema de comutação ao ar livre em fase ou holográfico. Isso proporcionaria um grande aumento na velocidade efetiva e flexibilidade de projeto, além de uma grande redução no custo. Como os conectores de um computador também são seus pontos de falha mais prováveis, um sistema sem barramento pode ser mais confiável.

Além disso, a partir de 2010, os processadores modernos usam lógica de 64 ou 128 bits. A superposição de comprimento de onda óptico pode permitir faixas de dados e lógica muitas ordens de magnitude maiores do que a eletrônica, sem espaço adicional ou fios de cobre.

Processadores óticos

Outra opção de longo prazo é usar luz em vez de eletricidade para lógica digital. Em teoria, isso poderia ser executado cerca de 30% mais rápido e usar menos energia, além de permitir uma interface direta com dispositivos de computação quântica.

Os principais problemas com essa abordagem são que, em um futuro previsível, os elementos de computação eletrônica serão mais rápidos, menores, mais baratos e mais confiáveis. Esses elementos já são menores do que alguns comprimentos de onda da luz. Assim, mesmo a lógica óptica baseada em guia de onda pode ser antieconômica em relação à lógica eletrônica. A partir de 2016, a maior parte do esforço de desenvolvimento é para circuitos eletrônicos.

Processadores iônicos

Os primeiros trabalhos experimentais foram feitos usando reações químicas baseadas em íons em vez de ações eletrônicas ou fotônicas para implementar elementos de um processador lógico.

Arquitetura da máquina de correia

Em relação à máquina de registro convencional ou arquitetura de máquina de pilha , ainda semelhante à arquitetura Itanium da Intel , um esquema de endereçamento de registro temporal foi proposto por Ivan Godard e empresa que se destina a reduzir significativamente a complexidade do hardware da CPU (especificamente o número de registros internos e resultantes de enormes árvores multiplexadoras ). Embora seja um pouco mais difícil de ler e depurar do que nomes de registro de uso geral, ajuda a compreender a visão da correia como uma correia transportadora em movimento , onde os valores mais antigos caem da correia e desaparecem. É implementado na arquitetura do Moinho.

Linha do tempo de eventos

Veja também

Referências

links externos