Qual é a diferença entre a arquitetura ARM e o RISC regular?
A resposta rápida é que não existe um 'RISC regular'. RISC é o termo que Dave Patterson cunhou (incorretamente na verdade) para uma maneira de projetar conjuntos de processadores de instruções (ISPs) após ler os trabalhos de John Cocke e estudar o sistema ACS da IBM (mais em um minuto). As duas principais idéias são que o processador volte a carregar e armazenar e se você simplificar e reduzir o número de instruções necessárias para implementar um processador, os projetistas podem fazer com que os dados fluam dentro do processador mais rapidamente e, assim, um sistema mais rápido resultará. ARM (anteriormente Advanced RISC Machine, originalmente Acorn RISC Machine), segue principalmente este estilo de design, portanto, pela definição de Dave, eles são sistemas RISC.
Resposta mais longa. Cocke nunca sugeriu que reduzíssemos o número de instruções - essa foi a conclusão de Dave ao ler seus trabalhos, e o conceito central da arquitetura Berkeley RISC-I é construído. O que Cocke diz, parafraseando, é "vamos expor o micro motor do processador sob as tampas e deixar o compilador gerar código para o micro motor". Se expusermos o micro-motor seremos mais rápidos porque o compilador só precisará gerar operações para as unidades funcionais que temos quando elas estiverem prontas. Nada será desperdiçado."
Mas também significa que o compilador terá conhecimento de como o fluxo de dados funciona e levará isso em conta quando ordenar instruções (ou seja, que podem ser sobrepostas, como as 'instruções em vôo' são levadas à 'conclusão' (aposentadas no micro motor). **
FWIW: O sistema MIPS de Stanford estava mais próximo das idéias da Cocke do que o processador original UCB RISC-I. No projeto original do MIPS, não há 'barracas' ou 'bloqueios' implementados nos dutos de instrução - o compilador tinha que ter cuidado para não tentar usar um resultado que ainda não estava completamente calculado.
Esta é a idéia central no debate RISC vs. CISC. Quanto mais complexo o conjunto de instruções, mais interações existem entre as diferentes instruções. Quanto mais profundo o pipeline (ou seja, quanto mais instruções 'parciais') sendo computadas em paralelo, mais cuidado deve ser tomado. Mas se você puder fazer isso, o processador irá acelerar.
Existiu tanto debate sobre isso, e a idéia tomou vida depois dos trabalhos originais do Dave; isso é dentro da indústria que costumávamos brincar que todos os sistemas projetados depois de 1980 eram sistemas RISC por definição. ;-)
A razão para a piada é que o próprio termo é um disparate quando você abre o próprio processador e espreita dentro dele (estilo RISC clássico ou CISC clássico, como um Intel*64). Todos os processadores modernos não são nem um nem outro, pois são máquinas de 'fluxo de dados' dentro - Arquitetura Dataflow. Isto é o que os torna rápidos e também o que os torna difíceis de projetar. Qualquer que seja o conjunto de instruções 'externas' escolhido, seja Intel*64, ARMv8, RISC-V, MIPS, DEC's Alpha, ou voltando ao IBM 360/90 e ao ACS - essas instruções 'externas' são decodificadas, então os componentes das instruções são 'programados' dentro dos diferentes registros internos e unidades funcionais que compõem o processador. Muitas, muitas dessas instruções de alto nível estão sendo operadas ao mesmo tempo e estão em diferentes posições 'em vôo'.'
Uma boa analogia como forma de pensar sobre isso é uma forma não muito diferente da escavação americana do Canal do Panamá. Três operações diferentes aconteceram ao mesmo tempo (lado Atlântico, lado Pacífico, e Corte de Culebra). Cada uma está usando equipamento similar, e em sua maioria independente, mas eles compartilham uma estrada de ferro, o 'despojo' dos diferentes locais de escavação vai ser usado para construir uma grande represa ou quebrar águas para que você tenha interdependência também. Os motores do riacho não podem cavar rocha e terra, se não houver carros vazios para levar o despojo, etc. E então o despojo precisa ser programado para ir para o local que será usado ou para uma área de disposição. Acho que você entendeu a idéia. A questão é que um programador mestre está encarregado de manter tudo ocupado. BTW, você também tem coisas como deslizamentos de lama e terremotos (coisas inesperadas - em um processador como interrupções ou exceções), então o agendador precisa ser flexível o suficiente para lidar com o desconhecido. Mas se você colocar muito 'flex' ele fica ineficiente e fica mais lento.
Uma arquitetura de fluxo de dados funciona exatamente como esta. Nós fazemos algum trabalho parcial e armazenamos o resultado em cache para que possamos usá-lo rapidamente, ou jogamos as coisas fora se elas não forem necessárias. Nós 'retiramos' operações na ordem em que as coisas estão prontas no fluxo de dados, o que significa que podemos não ser capazes de iniciar alguma operação se estivermos dependentes de algum outro resultado [pense nisso, um trem de spoil vazio tem que devolver a pá de fluxo para tirar a terra de uma corrida anterior. Se ainda estiver em uso, a grande pá de jato cara está ociosa].
Processadores têm recursos caros, lentos e limitados, digamos vendedores, o câmbio de barril, e similares (as máquinas a vapor fazendo a escavação). Os registros internos são aqueles trens de spoil, eles têm que estar prontos quando nós estamos ou os recursos caros não serão melhor utilizados.
Então voltando à sua pergunta... ARMv8, Intel*64, et al são todos máquinas de fluxo de dados dentro do próprio processador - razão pela qual o argumento RISC vs. CISC caiu fora de sentido. Dentro destes chips são todos mais parecidos do que diferentes e como você viu pela recente exploração da GPZ, todos os sistemas modernos têm esse problema em particular (como eu disse herdado de uma idéia arquitetônica do final dos anos 60 da IBM). O que os torna diferentes são as suas arquiteturas de conjuntos de instruções definidas externamente (ISA).
Endereçando especificamente a sua questão, o ARMv8 ISA segue um esquema de carga/loja como descrito nos documentos de Dave, e assim, é por definição uma arquitetura 'RISC'. Mas a verdade é que o ARMv8 ISA também suporta funções complexas, não muito diferentes dos chamados chips CISC, como Intel*64.
Artigos semelhantes
- Por que a maioria dos sistemas RISC implementa a arquitetura de carga/armazém?
- Qual é a diferença entre uma instrução LDM e uma instrução VLDM na arquitetura do conjunto de instruções ARM?
- Processadores: Por que a Intel não pode fazer um chip do tipo RISC para competir com o ARM?
- Um Samsung Galaxy Tab S6 Lite pode ser usado em estudos de arquitetura por estudantes de arquitetura?