IBM 801 - IBM 801

O 801 foi um projeto experimental de unidade de processamento central (CPU) desenvolvido pela IBM durante os anos 1970. É considerado o primeiro projeto RISC moderno , contando com registros de processador para todos os cálculos e eliminando os muitos modos de endereçamento variantes encontrados nos projetos CISC . Originalmente desenvolvido como o processador de uma central telefônica , foi mais tarde usado como base para um minicomputador e uma série de produtos para sua linha de mainframe . O projeto inicial era um processador de 24 bits ; que logo foi substituído por implementações de 32 bits dos mesmos conceitos e o 801 original de 24 bits foi usado apenas no início dos anos 1980.

O 801 foi extremamente influente no mercado de computadores. Armada com enormes quantidades de dados de desempenho, a IBM foi capaz de demonstrar que o design simples era capaz de superar facilmente até mesmo os designs de CPU clássicos mais poderosos, enquanto ao mesmo tempo produzia código de máquina que era apenas marginalmente maior do que as instruções CISC altamente otimizadas. Aplicar essas mesmas técnicas até mesmo a processadores existentes como o System / 370 geralmente dobrou o desempenho desses sistemas também. Isso demonstrou o valor do conceito RISC, e todos os sistemas futuros da IBM foram baseados nos princípios desenvolvidos durante o projeto 801.

Por seu trabalho no 801, John Cocke recebeu o Prêmio Turing em 1987, a Medalha Nacional de Tecnologia em 1991 e a Medalha Nacional de Ciência em 1994.

História

Em 1974, a IBM começou a examinar a possibilidade de construir uma central telefônica para lidar com um milhão de chamadas por hora, ou cerca de 300 chamadas por segundo. Eles calcularam que cada chamada exigiria 20.000 instruções para ser concluída e, quando se adicionava sobrecarga de tempo e outras considerações, tal máquina exigia um desempenho de cerca de 12 MIPS. Isso exigiria um avanço significativo no desempenho; sua máquina top de linha atual, o IBM System / 370 Modelo 168 do final de 1972, oferecia cerca de 3 MIPS.

O grupo que trabalha neste projeto no Thomas J. Watson Research Center , incluindo John Cocke , projetou um processador para esse fim. Para atingir o desempenho exigido, eles consideraram o tipo de operações que tal máquina exigia e removeram as que não eram apropriadas. Isso levou à remoção de uma unidade de ponto flutuante, por exemplo, que não seria necessária nesta aplicação. Mais criticamente, eles também removeram muitas das instruções que funcionavam nos dados da memória principal e deixaram apenas as instruções que funcionavam nos registros do processador interno , já que eram muito mais rápidos de usar e o código simples em uma central telefônica podia ser escrito para usar apenas estes tipos de instruções. O resultado deste trabalho foi um projeto conceitual para um processador simplificado com o desempenho necessário.

O projeto da central telefônica foi cancelado em 1975, mas a equipe havia feito um progresso considerável no conceito e, em outubro, a IBM decidiu continuá-lo como um projeto de uso geral. Sem nenhum projeto óbvio para anexar, a equipe decidiu chamá-lo de "801" depois do prédio em que trabalhavam. Para a função de uso geral, a equipe começou a considerar programas do mundo real que seriam executados em um minicomputador típico . A IBM coletou enormes quantidades de dados estatísticos sobre o desempenho de cargas de trabalho do mundo real em suas máquinas e esses dados demonstraram que mais da metade do tempo em um programa típico era gasto executando apenas cinco instruções: carregar valor da memória, armazenar valor na memória, ramificação , compare números de ponto fixo e adicione números de ponto fixo. Isso sugeriu que o mesmo design de processador simplificado funcionaria tão bem para um minicomputador de uso geral quanto um switch de uso especial.

Essa conclusão foi contra o design contemporâneo do processador, que se baseava no conceito de uso de microcódigo . A IBM foi uma das primeiras a fazer uso generalizado dessa técnica como parte de sua série System / 360 . Os 360s e 370s vinham em uma variedade de níveis de desempenho, todos executando o mesmo código de linguagem de máquina . Nas máquinas de ponta, muitas dessas instruções foram implementadas diretamente no hardware, como uma unidade de ponto flutuante, enquanto as máquinas de baixo custo podiam simular essas instruções usando uma sequência de outras instruções. Isso permitiu que uma única interface binária de aplicativo fosse executada em toda a linha e permitiu que os clientes se sentissem confiantes de que, se fosse necessário mais desempenho, eles poderiam passar para uma máquina mais rápida sem quaisquer outras alterações.

O microcódigo permitiu que um processador simples oferecesse muitas instruções, que haviam sido usadas pelos projetistas para implementar uma ampla variedade de modos de endereçamento . Por exemplo, uma instrução como ADDpode ter uma dúzia de versões, uma que adiciona dois números em registros internos, uma que adiciona um registro a um valor na memória, uma que adiciona dois valores da memória, etc. Isso permitiu ao programador selecionar o valor exato variação necessária para qualquer tarefa específica. O processador leria essa instrução e usaria o microcódigo para dividi-la em uma série de instruções internas. Por exemplo, adicionar dois números na memória pode ser implementado carregando esses dois números nos registradores, adicionando-os e salvando-os novamente.

A equipe percebeu um efeito colateral desse conceito; quando confrontados com a abundância de versões possíveis de uma dada instrução, os autores do compilador quase sempre escolhem uma única versão. Isso quase sempre era o que era implementado em hardware nas máquinas de baixo custo. Isso garantiu que o código de máquina gerado pelo compilador rodasse o mais rápido possível em toda a programação. Embora o uso de outras versões de instruções possa ser executado ainda mais rápido em uma máquina que implementou outras versões da instrução em hardware, a complexidade de saber qual escolher em uma lista em constante mudança de máquinas tornou isso extremamente pouco atraente, e os autores do compilador ignoraram isso possibilidades.

Como resultado, a maioria das instruções disponíveis no conjunto de instruções nunca foi usada em programas compilados. E foi aqui que a equipe fez a principal realização do projeto 801:

A imposição de microcódigo entre um computador e seus usuários impõe uma sobrecarga cara na execução das instruções executadas com mais frequência.

O microcódigo leva um tempo diferente de zero para examinar a instrução antes de ser executada. O mesmo processador subjacente com o microcódigo removido eliminaria essa sobrecarga e executaria essas instruções mais rapidamente. Como o microcódigo essencialmente executava pequenas sub-rotinas dedicadas a uma implementação de hardware específica, ele estava, em última análise, executando a mesma tarefa básica que o compilador, implementando instruções de nível superior como uma sequência de instruções específicas da máquina. Simplesmente remover o microcódigo e implementá-lo no compilador pode resultar em uma máquina mais rápida.

Uma preocupação era que os programas escritos para tal máquina ocupassem mais memória; algumas tarefas que poderiam ser realizadas com uma única instrução no 370 teriam que ser expressas como várias instruções no 801. Por exemplo, adicionar dois números da memória exigiria duas instruções de carregamento para registro, uma adição de registro para registro e, em seguida, um armazenamento na memória. Isso poderia tornar o sistema geral mais lento se ele tivesse que gastar mais tempo lendo instruções da memória do que antes para decodificá-las. À medida que continuaram a trabalhar no projeto e aprimoraram seus compiladores, eles descobriram que o comprimento geral do programa continuou a cair, tornando-se mais ou menos o mesmo comprimento daqueles escritos para o 370.

A arquitetura proposta inicialmente era uma máquina com dezesseis registradores de 24 bits e sem memória virtual . Ele usava um formato de dois operandos na instrução, de modo que as instruções geralmente eram da forma A = A + B, em oposição ao formato de três operandos A = B + C,. A CPU resultante estava operacional no verão de 1980 e foi implementada usando a tecnologia de componente discreto MECL-10K da Motorola em grandes placas personalizadas enroladas em fios. A CPU foi cronometrada em ciclos de 66 ns (aproximadamente 15,15 MHz) e pode calcular na velocidade rápida de aproximadamente 15  MIPS .

A arquitetura 801 foi usada em uma variedade de dispositivos IBM, incluindo controladores de canal para seus mainframes S / 370 (como o IBM 3090 ), vários dispositivos de rede e, eventualmente, o próprio núcleo de mainframe IBM 9370 . A versão original da arquitetura 801 foi a base para a arquitetura do microprocessador IBM ROMP usado na estação de trabalho IBM RT PC e em vários computadores experimentais da IBM Research .

Modificações posteriores

Tendo sido originalmente projetado para um sistema de função limitada, o design do 801 carecia de uma série de recursos vistos em máquinas maiores. Entre eles, era notável a falta de suporte de hardware para memória virtual , que não era necessária para a função de controlador e havia sido implementada no software nos primeiros sistemas 801 que precisavam. Para um uso mais difundido, o suporte de hardware era um recurso obrigatório. Além disso, na década de 1980, o mundo dos computadores como um todo estava se movendo para os sistemas de 32 bits , e havia o desejo de fazer o mesmo com o 801.

Mudar para um formato de 32 bits teve outra vantagem significativa. Na prática, descobriu-se que o formato de dois operandos era difícil de usar no código matemático típico. Idealmente, ambos os operandos de entrada permaneceriam em registradores onde poderiam ser reutilizados em operações subsequentes, mas como a saída da operação sobrescreveu um deles, era comum que um dos valores tivesse que ser recarregado da memória . Ao mudar para um formato de 32 bits, os bits extras nas palavras de instrução permitiram que um registro adicional fosse especificado, de modo que a saída de tais operações pudesse ser direcionada para um registro separado. A palavra de instrução maior também permitia que o número de registros aumentasse de dezesseis para trinta e dois, uma mudança que havia sido claramente sugerida pelo exame do código 801. Apesar da expansão das palavras de instrução de 24 para 32 bits, os programas não cresceram os 33% correspondentes devido a carregamentos e salvamentos evitados devido a essas duas mudanças.

Outras adições desejáveis ​​incluem instruções para trabalhar com dados de string que foram codificados no formato "compactado" com vários caracteres ASCII em uma única palavra de memória e adições para trabalhar com decimais codificados em binário , incluindo um somador que pode transportar números decimais de quatro bits .

Quando a nova versão do 801 foi executada como um simulador no 370, a equipe ficou surpresa ao descobrir que o código compilado no 801 e executado no simulador muitas vezes rodava mais rápido do que o mesmo código-fonte compilado diretamente no código de máquina 370 usando o Compilador PL / 1 do 370 . Quando eles portaram sua linguagem experimental "PL.8" de volta para o 370 e compilaram os aplicativos usando-a, eles também rodaram mais rápido do que o código PL / 1 existente, até três vezes mais rápido. Isso se deve ao fato de o compilador tomar decisões semelhantes às do RISC sobre como compilar o código para registradores internos, otimizando assim o maior número possível de acessos à memória. Eles eram tão caros no 370 quanto no 801, mas esse custo normalmente ficava oculto pela simplicidade de uma única linha de código CISC. O compilador PL.8 foi muito mais agressivo ao evitar carregamentos e salvamentos e, portanto, resultando em maior desempenho mesmo em um processador CISC.

Projeto América

No início dos anos 1980, as lições aprendidas no 801 foram colocadas de volta no novo design "América". Este era um conjunto de processadores de três chips, incluindo um processador de instrução que busca e decodifica instruções, um processador de ponto fixo que compartilha tarefas com o processador de instruções e um processador de ponto flutuante para os sistemas que o exigem. Projetado pela equipe 801, o projeto final foi enviado ao escritório da IBM em Austin, que o desenvolveu no sistema IBM RS / 6000 . O RS / 6000 rodando a 25 MHz foi uma das máquinas mais rápidas de sua época. Ele superou outras máquinas RISC por duas a três vezes em testes comuns, e superou trivialmente os sistemas CISC mais antigos.

Após o RS / 6000, a empresa voltou sua atenção para uma versão dos conceitos 801 que pudesse ser fabricada com eficiência em várias escalas. O resultado foi a arquitetura do conjunto de instruções IBM POWER e o desdobramento do PowerPC . Por seu trabalho no 801, John Cocke recebeu o Prêmio Turing em 1987, a Medalha Nacional de Tecnologia em 1991 e a Medalha Nacional de Ciência em 1994.

Michael J. Flynn vê o design do IBM 801 como o primeiro sistema de computador com conjunto reduzido de instruções (RISC).

Referências

Citações

Bibliografia

Leitura adicional

  • "Alterar a arquitetura do computador é uma maneira de aumentar a taxa de transferência, sugere pesquisadores da IBM". Electronics V. 49, N. 25 (23 de dezembro de 1976), pp. 30–31.
  • V. McLellan: "IBM Mini a Radical Departure". Datamation V. 25, N. 11 (outubro de 1979), pp. 53–55.
  • Dewar, Robert BK; Smosna, Matthew (1990). Microprocessadores: uma visão do programador . McGraw-Hill. pp. 258–264.
  • Tabak, Daniel (1987). Arquitetura RISC . Research Studies Press. pp. 69–72.

links externos