Como a arquitetura do ARM difere do x86? [fechadas]


192

A arquitetura x86 foi especialmente projetada para funcionar com um teclado enquanto o ARM espera ser móvel? Quais são as principais diferenças entre os dois?


37
A menos que o x86 tenha uma porta ps / 2 que eu não conheço, ela não é mais fabricada para teclados do que um par de roupas íntimas sujas :-) #
384

6
Eu acho que o teclado está se referindo a uma função típica do PC em oposição ao dispositivo físico.
Ruído barulhento,

24
O x86 não foi projetado; Evoluiu em uma ilha, com um pássaro estranho que comeu tudo o que tentou rezar nela. Agora parece mais estranho do que um ornitorrinco de bico de pato, e não seria bom se um navio cheio de novos animais aparecesse.
ctrl-alt-delor

5
@richard - infelizmente, essa é a descrição historicamente mais precisa do x86 que eu já vi. Diz muito sobre a indústria.
Leeor 4/01/15

6
@Leeor Desculpe, eu cometi um pequeno erro no meu comentário, eu disse que o pássaro comeu predadores do x86, onde como ele não os comeu, sentou-se sobre eles. Também é digno de nota que as penas macias do pássaro, onde muito, muito, muito arrumado.
Ctrl-alt-delor

Respostas:


305

ARMé uma arquitetura RISC (Reduced Instruction Set Computing), enquanto x86é uma arquitetura CISC (Complex Instruction Set Computing).

A principal diferença entre os que estão nesse aspecto é que as instruções ARM operam apenas em registradores, com algumas instruções para carregar e salvar dados de / para a memória, enquanto o x86 também pode operar diretamente na memória. Até a v8 ARM era uma arquitetura nativa de 32 bits, favorecendo operações de quatro bytes em detrimento de outras.

Portanto, o ARM é uma arquitetura mais simples, levando a uma pequena área de silício e a muitos recursos de economia de energia, enquanto o x86 se torna um animal em termos de consumo e produção de energia.

Sobre a pergunta " A arquitetura x86 foi especialmente projetada para funcionar com um teclado enquanto o ARM espera ser móvel? ". x86não foi especialmente projetado para funcionar com teclado nem ARMpara celular. No entanto, novamente por causa das principais opções arquitetônicas, o x86 também tem instruções para trabalhar diretamente, IOenquanto o ARM não. No entanto, com barramentos de IO especializados como USBs, a necessidade de tais recursos também está desaparecendo.

Se você precisar de um documento para citar, é isso que o Guia de Programadores da Série Cortex-A (4.0) informa sobre as diferenças entre as arquiteturas RISC e CISC:

Um processador ARM é um processador RISC (Reduced Instruction Set Computer).

Os processadores CISC (Complex Instruction Set Computer), como o x86, possuem um rico conjunto de instruções capaz de executar tarefas complexas com uma única instrução. Esses processadores geralmente possuem quantidades significativas de lógica interna que decodificam as instruções da máquina para sequências de operações internas (microcódigo).

As arquiteturas RISC, por outro lado, têm um número menor de instruções de uso geral, que podem ser executadas com significativamente menos transistores, tornando o silício mais barato e mais eficiente em termos de energia. Como outras arquiteturas RISC, os núcleos ARM possuem um grande número de registros de uso geral e muitas instruções são executadas em um único ciclo. Possui modos de endereçamento simples, onde todos os endereços de carregamento / armazenamento podem ser determinados a partir do conteúdo do registro e dos campos de instruções.

A empresa ARM também fornece um artigo intitulado Artigo sobre desenvolvimento de arquiteturas, processadores e dispositivos, descrevendo como esses termos se aplicam ao seu negócio.

Um exemplo comparando a arquitetura do conjunto de instruções:

Por exemplo, se você precisar de algum tipo de bloco de comparação de memória bytewise em seu aplicativo (gerado pelo compilador, ignorando detalhes), é assim que pode parecer em x86

repe cmpsb         /* repeat while equal compare string bytewise */

enquanto no ARMformato mais curto possa parecer (sem verificação de erros, etc.)

top:
ldrb r2, [r0, #1]! /* load a byte from address in r0 into r2, increment r0 after */
ldrb r3, [r1, #1]! /* load a byte from address in r1 into r3, increment r1 after */
subs r2, r3, r2    /* subtract r2 from r3 and put result into r2      */
beq  top           /* branch(/jump) if result is zero                 */

o que deve lhe dar uma dica sobre como os conjuntos de instruções RISC e CISC diferem em complexidade.


9
O ARMv8-A possui uma arquitetura de 64 bits chamada AArch64.
Kyrias

9
Embora o x86 tenha algumas instruções muito poderosas, o braço ainda pode vencê-lo em uma luta (se ambos tiverem a mesma velocidade do relógio). Isso ocorre em parte porque o braço possui um bom conjunto de registros, enquanto o x86 gasta metade do seu tempo movendo dados para dentro e para fora do seu conjunto limitado de registros (isso é menos verdade no x86-64, há mais registros ) E em parte porque a simplicidade do Arm deixa espaço para um cache maior e tem todas as instruções condicionais (tornando o cache menos perdido). E a instrução múltipla de movimentação do braço (a única instrução não RISC) permite mover dados rapidamente.
Ctrl-alt-delor

4
Eu poderia escrever código ARM mais rápido, embora maior, usando mais registros. Se eu olhar para essa implementação, o x86 usa relógios 5 + 9 × N, o ARM usa relógios 4 × N (os dois números são para erros de cache). O x86 obtém uma pontuação melhor para os bytes de instrução neste exemplo: x86 = 2 bytes, arm = 16 bytes. A pontuação do ARM é muito melhor nessa métrica em testes mais realistas, por exemplo, ao sair do loop r2, haverá informações sobre se as strings são iguais / maiores, assim como os códigos de condição. O braço pode executar outras instruções antes de verificar os códigos de condição. O braço não precisa se ramificar ao verificar os códigos de condição.
Ctrl-alt-delor

2
@JeremyFelix Parece que este stackoverflow.com/questions/13106297/… Existem canais diferentes para diferentes tipos de instruções, mesmo que sejam duplicados. A CPU divide as instruções em micro instruções e elas podem ser executadas em paralelo entre o pipeline.
auselen

2
Você diz que "enquanto o x86 também pode operar diretamente na memória". no entanto, para o x86 (anterior a x86-64), havia tão poucos registros que não havia "assim", era necessário armazenar tudo na memória; cerca de ½ das instruções em um programa onde apenas para mudar as coisas. Enquanto no ARM são necessárias poucas instruções para mover dados.
Ctrl-alt-delor 17/02/16

93

Também não há nada específico para teclado ou celular, além do fato de que há anos a ARM tem uma vantagem substancial em termos de consumo de energia, o que a torna atraente para todos os tipos de dispositivos operados por bateria.

No que diz respeito às diferenças reais: o ARM possui mais registros, suporte à predição para a maioria das instruções muito antes da Intel o incluir e incorporou há muito tempo todo tipo de técnicas (chame-as de "truques", se você preferir) para economizar energia em quase todos os lugares possíveis.

Há também uma diferença considerável em como as duas instruções de codificação. A Intel usa uma codificação de comprimento variável bastante complexa, na qual uma instrução pode ocupar de 1 a 15 bytes. Isso permite que os programas sejam muito pequenos, mas torna a decodificação de instruções relativamente difícil (como em: decodificar instruções rapidamente em paralelo é mais como um pesadelo completo).

O ARM possui dois modos diferentes de codificação de instruções: ARM e THUMB. No modo ARM, você obtém acesso a todas as instruções e a codificação é extremamente simples e rápida de decodificar. Infelizmente, o código do modo ARM tende a ser bastante grande, por isso é bastante comum que um programa ocupe duas vezes mais memória que o código da Intel. O modo Thumb tenta atenuar isso. Ele ainda usa uma codificação de instruções bastante regular, mas reduz a maioria das instruções de 32 bits para 16 bits, como a redução do número de registros, a eliminação da predicação da maioria das instruções e a redução do intervalo de ramificações. Pelo menos na minha experiência, isso ainda não costuma dar muitocodificação mais densa que o código x86 pode obter, mas é bastante próximo e a decodificação ainda é bastante simples e direta. Menor densidade de código significa que você geralmente precisa de pelo menos um pouco mais de memória e (geralmente mais a sério) um cache maior para obter desempenho equivalente.

Ao mesmo tempo, a Intel colocou muito mais ênfase na velocidade do que no consumo de energia. Eles começaram a enfatizar o consumo de energia principalmente no contexto dos laptops. Para laptops, seu objetivo típico de energia era da ordem de 6 watts para um laptop relativamente pequeno. Mais recentemente ( muito mais recentemente), eles começaram a segmentar dispositivos móveis (telefones, tablets, etc.) Para esse mercado, eles estão procurando alguns watts ou mais. Eles parecem estar se saindo muito bem com isso, embora sua abordagem tenha sido substancialmente diferente da ARM, enfatizando a tecnologia de fabricação, na qual a ARM enfatizou principalmente a microarquitetura (não surpreende, considerando que o ARM vende projetos e deixa a fabricação para outros).

Dependendo da situação, o consumo de energia de uma CPU geralmente é mais importante que o consumo de energia. Pelo menos enquanto uso os termos, o consumo de energia refere-se ao uso de energia (mais ou menos) instantaneamente. O consumo de energia, no entanto, normaliza a velocidade, portanto, se (por exemplo) a CPU A consome 1 watt por 2 segundos para executar um trabalho, e a CPU B consome 2 watts por 1 segundo para executar o mesmo trabalho, ambas as CPUs consomem a mesma quantidade total de energia (dois watts segundos) para fazer esse trabalho - mas com a CPU B, você obtém resultados duas vezes mais rápido.

Os processadores ARM tendem a se sair muito bem em termos de consumo de energia. Portanto, se você precisar de algo que precise da "presença" de um processador quase constantemente, mas não faça muito trabalho, eles poderão funcionar muito bem. Por exemplo, se você estiver realizando uma videoconferência, reunir alguns milissegundos de dados, compactá-los, enviá-los, receber dados de outras pessoas, descompactá-los, reproduzi-los e repeti-los. Mesmo um processador muito rápido não pode gastar muito tempo dormindo, portanto, para tarefas como essa, o ARM se sai muito bem.

Os processadores da Intel (especialmente os processadores Atom, que são realmente destinados a aplicações de baixo consumo de energia) são extremamente competitivos em termos de consumo de energia. Enquanto estiverem rodando quase na velocidade máxima, eles consumirão mais energia do que a maioria dos processadores ARM - mas também terminam o trabalho rapidamente, para que possam voltar a dormir mais cedo. Como resultado, eles podem combinar boa duração da bateria com bom desempenho.

Portanto, ao comparar os dois, você deve ter cuidado com o que mede, para ter certeza de que isso reflete o que você honestamente se importa. O ARM funciona muito bem com o consumo de energia, mas, dependendo da situação, você pode se importar mais com o consumo de energia do que com o consumo instantâneo de energia.


é por isso que ? RISC precisa de mais RAM, enquanto CISC tem uma ênfase no tamanho do código menor e usa menos memória RAM total do que RISC
Waqar Naeem

O modo Thumb (comprimento variável que permite codificações curtas) não faz diferença ; é assim que o x86 sempre funciona (mas mais ainda, com comprimento de instrução variando de 1 a 15 bytes e muito mais difícil de decodificar que o Thumb2). O modo ARM (codificação de largura fixa com instruções não destrutivas de 3 operandos) é a diferença do x86!
Peter Cordes

Ter um processador muito mais rápido não é uma grande ajuda - a videoconferência pode ser um exemplo melhor: baixa latência significa que você não pode simplesmente decodificar em um buffer de tamanho decente e voltar ao estado de suspensão de nível profundo ou médio . "Corrida para dormir" é um conceito-chave no consumo de energia para uma quantidade fixa de computação, uma vez que as CPUs modernas podem economizar energia significativa quando totalmente ociosas (relógio parado ou até mesmo desligando partes do núcleo.) após a devolução.) ... e esse é o ponto que você coloca no próximo parágrafo, é claro. >. <
Peter Cordes

@ PeterCordes: a codificação no modo Thumb não é muito parecida com a codificação x86. Embora não seja bastante tão regular como a codificação ARM, é aumento format.Density ainda praticamente fixo é em grande parte de eliminar bits que são simplesmente raramente usados na codificação ARM. Por exemplo, praticamente todas as instruções ARM são condicionais, mas as condições são usadas apenas uma porcentagem bastante pequena do tempo (portanto, a maioria das instruções THUMB que não são de ramificação são incondicionais).
Jerry Coffin

@ PeterCordes: Você está certo: a videoconferência é um exemplo melhor - editei isso em. Obrigado.
Jerry Coffin

39

Adicional ao primeiro parágrafo de Jerry Coffin . Ou seja, o design do braço fornece menor consumo de energia.

A empresa ARMapenas licencia a tecnologia da CPU. Eles não fazem chips físicos. Isso permite que outras empresas adicionem várias tecnologias periféricas, normalmente chamadas SOC ou system-on-chip. Se o dispositivo é um tablet, um telefone celular ou um sistema de entretenimento no carro. Isso permite que os fornecedores de chips adaptem o restante do chip para uma aplicação específica. Isso tem benefícios adicionais,

  1. Custo mais baixo da placa
  2. Menor potência (nota 1)
  3. Fabricação mais fácil
  4. Fator de forma menor

ARMsuporta fornecedores de SOC com AMBA , permitindo que os implementadores de SOC adquiram módulos de terceiros prontos para uso; como Ethernet, memória e controladores de interrupção. Algumas outras plataformas de CPU suportam isso, como o MIPS , mas o MIPS não tem tanta energia.

Tudo isso é benéfico para o design do dispositivo portátil / bateria. Alguns são apenas bons por toda parte. Além disso, ARMtem um histórico de dispositivos operados por bateria; Apple Newton , Psion Organizadores . A infra-estrutura do software PDA foi aproveitada por algumas empresas para criar dispositivos do tipo smart phone . Embora, mais sucesso tenha sido obtido por aqueles que reinventaram a GUI para uso com um telefone inteligente .

O surgimento de Open sourceconjuntos de ferramentas e operating systemstambém facilitou os vários SOCchips. Uma organização fechada teria problemas ao tentar suportar todos os vários dispositivos disponíveis para o ARM. As duas plataformas celulares mais populares, Andriod e OSx / IOS, são baseadas em sistemas operacionais Linux e FreeBSD, Mach e NetBSD . Open Sourceajuda os SOCfornecedores a fornecer suporte de software para seus chipsets.

Felizmente, por que o x86 é usado no teclado é evidente. Possui o software e, mais importante, as pessoas treinadas para usá-lo. O Netwinder é um ARMsistema que foi originalmente projetado para o teclado . Além disso, os fabricantes estão atualmente olhando o ARM64 para o mercado de servidores. Energia / calor é uma preocupação em data centers 24/7.

Então, eu diria que o ecossistema que cresce em torno desses chips é tão importante quanto recursos como baixo consumo de energia. ARMtem se esforçado para obter baixo consumo de energia e computação de alto desempenho há algum tempo (meados da década de 1980) e eles têm muita gente a bordo.

Nota1: Vários chips precisam de drivers de barramento para se comunicarem em tensões e unidades conhecidas. Além disso, chips tipicamente separados precisam de capacitores de suporte e outros componentes de energia que podem ser compartilhados em um sistema SOC .


22

O ARM é como um carro esportivo italiano:

  • Motor bem equilibrado, bem ajustado. Dá boa aceleração e velocidade máxima.
  • Excelentes perseguições, freios e suspensão. Pode parar rapidamente, pode encurralar sem abrandar.

O x86 é como um muscle car americano:

  • Grande motor, grande bomba de combustível. Dá excelente velocidade máxima e aceleração, mas consome muito combustível.
  • Travões terríveis, você precisa marcar uma consulta em seu diário, se quiser desacelerar.
  • Direção terrível, é preciso diminuir a velocidade para a curva.

Em resumo: o x86 é baseado em um design de 1974 e é bom em uma linha reta (mas usa muito combustível). O braço usa pouco combustível, não diminui a velocidade nos cantos (galhos).


Metáfora acabou, aqui estão algumas diferenças reais.

  • Arm tem mais registros.
  • O Arm possui poucos registros de finalidade especial, x86 são todos os registros de finalidade especial (portanto, menos movimento).
  • Arm possui poucos comandos de acesso à memória, apenas carrega / armazena o registro.
  • Arm é internamente a arquitetura de Harvard, meu projeto.
  • O braço é simples e rápido.
  • As instruções de braço são um ciclo arquiteturalmente único (exceto carregar / armazenar vários).
  • As instruções do braço geralmente fazem mais de uma coisa (em um único ciclo).
  • Onde mais de uma instrução Arm é necessária, como a loja de loop e o incremento automático do x86, o Arm ainda faz isso em menos ciclos de clock.
  • Arm tem mais instruções condicionais.
  • O preditor de ramificação de Arm é trivialmente simples (se incondicional ou para trás, em seguida, assume ramificação, senão assume não ramificação) e executa melhor que o muito muito complexo no x86 (não há espaço suficiente aqui para explicar isso, não que eu pudesse )
  • O Arm possui um conjunto de instruções simples e consistente (você pode compilar manualmente e aprender rapidamente o conjunto de instruções).

7
Essa analogia quebra com o fato de que os carros esportivos italianos quebram a cada instante que podem, enquanto as CPUs ARM não o fazem e, embora isso possa ser feito com facilidade, você não pode realmente comprar uma única CPU ARM capaz de acelerar a CPU da área de trabalho , deixe uns e mainboards sozinho socketed para colocá-los em :).
Evi1M4chine

1
Em termos de desempenho, compete diretamente com alguns dos processadores Xeon maiores / mais rápidos (por exemplo, E5-2690 v3), mas com menor custo e energia. quora.com/…
ctrl-alt-delor 14/01

1
Para cargas de trabalho massivamente paralelas, como bancos de dados e servidores de E / S, com certeza. Para desempenho de thread único, ninguém projetou um núcleo ARM em qualquer lugar do tamanho de x86. Não há razão para que eles não pudessem, apenas ninguém tem. O "imposto x86" na área de energia e matriz não é tão grande em comparação com a quantidade de silício usada para máquinas com defeito em núcleos de CPU de alta potência. Certamente existem verrugas no x86, mas o RISC tem uma desvantagem de densidade de código (que geralmente não importa muito, mas ainda importa). Isso é discutido repetidamente nos fóruns do realworldtech.com .
Peter Cordes

1
@richard: Há muitas coisas que você não "precisa", mas isso aumenta a densidade do código. O truque é equilibrar a complexidade da decodificação com o tamanho do código / número de instruções. Aumentar a largura de um núcleo fora de ordem é extremamente caro em consumo de energia; portanto, é mais valioso empacotar mais trabalho em cada instrução. Um pequeno aumento na complexidade da decodificação é muito mais barato. As CPUs modernas do x86 já conseguem decodificar o x86 rapidamente. (Não é bastante rapidamente o suficiente para manter um 4-ampla OOO núcleo alimentados a partir dos descodificadores em vez de UOP-cache ou tampão de circuito, e, claro, a um custo elevado poder.)
Pedro Cordes

3
@ Evi1M4chine, também quebra o fato de que um carro esportivo italiano é extremamente caro, enquanto um carro americano é relativamente barato. E o muscle car é o que é porque é simples, enquanto algo como uma Ferrari é muito, muito complicado. Exatamente o oposto de CISC vs. RISC #
Lorenzo Dematté

15

A arquitetura ARM foi originalmente projetada para computadores pessoais Acorn (consulte Acorn Archimedes , por volta de 1987 e RiscPC ), que eram tanto computadores pessoais baseados em teclado quanto modelos IBM PC baseados em x86. Somente as implementações posteriores do ARM foram direcionadas principalmente para o segmento de mercado móvel e incorporado.

Originalmente, as simples CPUs RISC de desempenho aproximadamente equivalente podiam ser projetadas por equipes de engenharia muito menores (veja Berkeley RISC ) do que aquelas que trabalham no desenvolvimento x86 da Intel.

Atualmente, porém, os chips ARM mais rápidos possuem unidades de despacho de instruções com várias questões complexas e fora de ordem, projetadas por grandes equipes de engenharia, e os núcleos x86 podem ter algo como um núcleo RISC alimentado por uma unidade de tradução de instruções.

Portanto, quaisquer diferenças atuais entre as duas arquiteturas estão mais relacionadas às necessidades específicas do mercado dos nichos de produtos que as equipes de desenvolvimento estão visando. (Opinião aleatória: o ARM provavelmente ganha mais em taxas de licença de aplicativos incorporados que tendem a ser muito mais limitados em termos de energia e custo. E a Intel precisa manter uma margem de desempenho em PCs e servidores por suas margens de lucro. Assim, você vê diferentes otimizações de implementação.)


Ainda existem grandes diferenças arquitetônicas. No entanto, a Intel fez um trabalho maravilhoso e investiu uma grande quantidade de dinheiro, para fazer com que a CPU mal arquitetada funcionasse muito bem (se pergunta o que poderia ter sido feito, se todo esse esforço fosse colocado em uma CPU bem arquitetada).
ctrl-alt-delor
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.