¿Cómo difiere la arquitectura ARM de x86? [cerrado]


192

¿La arquitectura x86 está especialmente diseñada para funcionar con un teclado mientras ARM espera ser móvil? ¿Cuáles son las diferencias clave entre los dos?


37
A menos que el x86 tenga un puerto ps / 2 que no conozco, no está más diseñado para teclados que un par de ropa interior sucia :-)
paxdiablo

66
Creo que el teclado se refiere a un rol típico de PC en lugar del dispositivo físico.
ruido

24
El x86 no fue diseñado; Evolucionó en una isla, con un extraño pájaro que comió todo y trató de rezar sobre él. Ahora parece más extraño que un ornitorrinco de pico de pato, y no le iría bien si apareciera un barco lleno de animales nuevos.
ctrl-alt-delor

55
@richard: lamentablemente, esta es la descripción históricamente más precisa de x86 que he visto. Dice mucho sobre la industria.
Leeor

66
@Leeor Lo siento, cometí un pequeño error en mi comentario, dije que el pájaro se comió depredadores del x86, donde como no se los comió, se sentó sobre ellos. También es digno de mención que las suaves plumas del pájaro estaban muy, muy, muy ordenadas.
ctrl-alt-delor

Respuestas:


305

ARMes una arquitectura RISC (Computación de conjunto de instrucciones reducidas) mientras que x86es una arquitectura CISC (Computación de conjunto de instrucciones complejas).

La diferencia principal entre aquellos en este aspecto es que las instrucciones ARM operan solo en registros con unas pocas instrucciones para cargar y guardar datos desde / a la memoria, mientras que x86 también puede operar directamente en la memoria. Hasta v8 ARM era una arquitectura nativa de 32 bits, que favorecía las operaciones de cuatro bytes sobre otras.

Por lo tanto, ARM es una arquitectura más simple, que conduce a un área de silicio pequeña y muchas funciones de ahorro de energía, mientras que x86 se convierte en una bestia de potencia en términos de consumo de energía y producción.

Acerca de la pregunta sobre " ¿Está la arquitectura x86 especialmente diseñada para funcionar con un teclado mientras ARM espera ser móvil? ". x86no está especialmente diseñado para funcionar con un teclado ni ARMpara dispositivos móviles. Sin embargo, una vez más, debido a las principales opciones arquitectónicas, en realidad x86 también tiene instrucciones para trabajar directamente, IOmientras que ARM no. Sin embargo, con buses IO especializados como USB, la necesidad de tales características también está desapareciendo.

Si necesita un documento para cotizar, esto es lo que la Guía de Programadores de la Serie Cortex-A (4.0) le informa sobre las diferencias entre las arquitecturas RISC y CISC:

Un procesador ARM es un procesador de computadora de conjunto de instrucciones reducido (RISC).

Los procesadores de computadora de conjunto de instrucciones complejas (CISC), como el x86, tienen un rico conjunto de instrucciones capaz de hacer cosas complejas con una sola instrucción. Dichos procesadores a menudo tienen cantidades significativas de lógica interna que decodifican las instrucciones de la máquina en secuencias de operaciones internas (microcódigo).

Las arquitecturas RISC, por el contrario, tienen un número menor de instrucciones de uso más general, que podrían ejecutarse con significativamente menos transistores, lo que hace que el silicio sea más barato y más eficiente. Al igual que otras arquitecturas RISC, los núcleos ARM tienen una gran cantidad de registros de propósito general y muchas instrucciones se ejecutan en un solo ciclo. Tiene modos de direccionamiento simples, donde todas las direcciones de carga / almacenamiento se pueden determinar a partir del contenido del registro y los campos de instrucciones.

La empresa ARM también proporciona un artículo titulado Arquitecturas, procesadores y artículos de desarrollo de dispositivos que describe cómo esos términos se aplican a su negocio.

Un ejemplo que compara la arquitectura del conjunto de instrucciones:

Por ejemplo, si necesita algún tipo de bloque de comparación de memoria bytewise en su aplicación (generado por el compilador, omitiendo detalles), así es como podría verse en x86

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

mientras que en la ARMforma más corta podría verse (sin verificación de errores, 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                 */

lo que debería darle una pista sobre cómo los conjuntos de instrucciones RISC y CISC difieren en complejidad.


9
ARMv8-A tiene una arquitectura de 64 bits llamada AArch64.
kyrias

9
Aunque el x86 tiene algunas instrucciones muy poderosas, el brazo aún puede vencerlo en una pelea (si ambos tienen la misma velocidad de reloj). Esto se debe en parte a que el brazo tiene un buen conjunto de registros, donde a medida que el x86 pasa la mitad de su tiempo moviendo datos dentro y fuera de su conjunto limitado de registros (esto es menos cierto para x86-64, es que tiene más registros ) Y en parte porque la simplicidad de Arm deja espacio para un caché más grande y tiene todas las instrucciones condicionales (lo que hace que el caché pierda menos). Y la instrucción múltiple de movimiento del brazo (la única instrucción que no es RISC), le permite mover datos rápidamente.
ctrl-alt-delor

44
Podría escribir código ARM más rápido, aunque más grande, usando más registros. Si miro esta implementación, el x86 toma 5 + 9 × N relojes, el ARM toma 4 × N relojes (ambas cifras son para no perder caché). El x86 obtiene mejores resultados para los bytes de instrucción en este ejemplo: x86 = 2 bytes, arm = 16 bytes. ARM obtiene una puntuación mucho mejor en esta métrica en pruebas más realistas, por ejemplo, al salir del bucle r2 tendrá información sobre si las cadenas son iguales / cuáles son más grandes, también lo harán los códigos de condición. El brazo puede ejecutar otras instrucciones antes de verificar los códigos de condición. El brazo no tiene que bifurcarse al verificar los códigos de condición.
ctrl-alt-delor

2
@JeremyFelix Parece que esta stackoverflow.com/questions/13106297/… Hay diferentes canalizaciones para diferentes tipos de instrucciones, incluso hay duplicados. La CPU divide las instrucciones en microinstrucciones y pueden ejecutarse en paralelo entre tuberías.
auselen

2
Usted dice "mientras que x86 también puede operar directamente en la memoria". sin embargo, para el x86 (pre x86-64), tiene tan pocos registros que no hubo "también", tuvo que almacenar todo en la memoria; aproximadamente la mitad de las instrucciones en un programa donde simplemente mover las cosas. Mientras que en ARM se necesitan muy pocas instrucciones para mover datos.
ctrl-alt-delor

93

Ninguno de los dos tiene nada específico para el teclado o el móvil, aparte del hecho de que durante años ARM ha tenido una ventaja bastante sustancial en términos de consumo de energía, lo que lo hizo atractivo para todo tipo de dispositivos que funcionan con baterías.

En cuanto a las diferencias reales: ARM tiene más registros, predicción admitida para la mayoría de las instrucciones mucho antes de que Intel lo agregue, y ha incorporado durante mucho tiempo todo tipo de técnicas (llámelas "trucos", si lo prefiere) para ahorrar energía en casi todas partes.

También hay una diferencia considerable en cómo codifican las dos instrucciones. Intel utiliza una codificación de longitud variable bastante compleja en la que una instrucción puede ocupar desde 1 hasta 15 bytes. Esto permite que los programas sean bastante pequeños, pero hace que la decodificación de instrucciones sea relativamente difícil (como en: decodificar rápidamente las instrucciones en paralelo es más como una pesadilla completa).

ARM tiene dos modos de codificación de instrucciones diferentes: ARM y THUMB. En el modo ARM, obtiene acceso a todas las instrucciones, y la codificación es extremadamente simple y rápida de decodificar. Desafortunadamente, el código del modo ARM tiende a ser bastante grande, por lo que es bastante común que un programa ocupe aproximadamente el doble de memoria que el código Intel. El modo de pulgar intenta mitigar eso. Todavía utiliza una codificación de instrucciones bastante regular, pero reduce la mayoría de las instrucciones de 32 bits a 16 bits, como reducir el número de registros, eliminar la predicación de la mayoría de las instrucciones y reducir el rango de ramas. Al menos en mi experiencia, esto todavía no suele dar bastantetan denso de codificación como puede llegar a ser el código x86, pero está bastante cerca, y la decodificación sigue siendo bastante simple y directa. Una densidad de código más baja significa que generalmente necesita al menos un poco más de memoria y (generalmente más en serio) una memoria caché más grande para obtener un rendimiento equivalente.

Hubo un tiempo en que Intel puso mucho más énfasis en la velocidad que en el consumo de energía. Comenzaron a enfatizar el consumo de energía principalmente en el contexto de las computadoras portátiles. Para las computadoras portátiles, su objetivo de energía típico era del orden de 6 vatios para una computadora portátil bastante pequeña. Más recientemente ( mucho más recientemente) comenzaron a apuntar a dispositivos móviles (teléfonos, tabletas, etc.) Para este mercado, están buscando un par de vatios más o menos. Parece que les está yendo bastante bien en eso, aunque su enfoque ha sido sustancialmente diferente al de ARM, enfatizando la tecnología de fabricación donde ARM ha enfatizado principalmente la microarquitectura (no es sorprendente, considerando que ARM vende diseños y deja la fabricación a otros).

Dependiendo de la situación, el consumo de energía de una CPU a menudo es más importante que su consumo de energía. Al menos mientras uso los términos, el consumo de energía se refiere al uso de energía de forma instantánea (más o menos). Sin embargo, el consumo de energía se normaliza para la velocidad, por lo que si (por ejemplo) la CPU A consume 1 vatio durante 2 segundos para realizar un trabajo, y la CPU B consume 2 vatios durante 1 segundo para realizar el mismo trabajo, ambas CPU consumen la misma cantidad total de energía (dos vatios segundos) para hacer ese trabajo, pero con la CPU B, obtienes resultados el doble de rápido.

Los procesadores ARM tienden a funcionar muy bien en términos de consumo de energía. Entonces, si necesita algo que necesita la "presencia" de un procesador casi constantemente, pero que realmente no está haciendo mucho trabajo, pueden funcionar bastante bien. Por ejemplo, si está haciendo videoconferencia, reúne unos pocos milisegundos de datos, los comprime, los envía, recibe datos de otros, los descomprime, los reproduce y repite. Incluso un procesador realmente rápido no puede pasar mucho tiempo durmiendo, por lo que para tareas como esta, ARM funciona muy bien.

Los procesadores de Intel (especialmente sus procesadores Atom, que en realidad están destinados a aplicaciones de baja potencia) son extremadamente competitivos en términos de consumo de energía. Mientras corren cerca de su velocidad máxima, consumirán más energía que la mayoría de los procesadores ARM, pero también terminan el trabajo rápidamente, por lo que pueden volver a dormir antes. Como resultado, pueden combinar una buena duración de la batería con un buen rendimiento.

Entonces, al comparar los dos, debe tener cuidado con lo que mide, para asegurarse de que refleje lo que honestamente le importa. ARM funciona muy bien en el consumo de energía, pero dependiendo de la situación, es posible que le importe más el consumo de energía que el consumo de energía instantáneo.


es por eso que ? RISC necesita más RAM, mientras que CISC hace hincapié en el tamaño de código más pequeño y usa menos RAM en general que RISC
Waqar Naeem

El modo de pulgar (longitud variable que permite codificaciones cortas) no es una diferencia ; así es como x86 siempre funciona (pero más aún, con una longitud de instrucción que varía de 1 a 15 bytes, y mucho más difícil de decodificar que Thumb2). ¡El modo ARM (codificación de ancho fijo con instrucciones no destructivas de 3 operandos) es la diferencia con x86!
Peter Cordes

Tener un procesador mucho más rápido no es una gran ayuda : la videoconferencia podría ser un mejor ejemplo: la baja latencia significa que no puede simplemente hacer una ráfaga de decodificación en un búfer de tamaño decente y volver a un estado de suspensión de nivel medio o profundo . "Carrera para dormir" es un concepto clave en el consumo de energía para una cantidad fija de cómputo, dado que las CPU modernas pueden ahorrar una gran cantidad de energía cuando están completamente inactivas (reloj parado, o incluso apagar partes del núcleo. después de la reescritura.) ... y ese es el punto que haces en el siguiente párrafo, por supuesto. >. <
Peter Cordes

@PeterCordes: la codificación en modo Thumb no es muy parecida a la codificación x86. Aunque no es tan regular como la codificación ARM, sigue siendo un formato bastante fijo. El aumento de la densidad se debe principalmente a la eliminación de bits que rara vez se usan en la codificación ARM. Por ejemplo, prácticamente todas las instrucciones ARM son condicionales, pero las condiciones solo se usan un porcentaje bastante pequeño del tiempo (por lo que la mayoría de las instrucciones THUMB no ramificadas son incondicionales).
Jerry Coffin

@PeterCordes: Tienes razón: la videoconferencia es un mejor ejemplo, lo he editado. Gracias.
Jerry Coffin

39

Adicional al primer párrafo de Jerry Coffin . Es decir, el diseño ARM ofrece un menor consumo de energía.

La compañía ARM, solo licencia la tecnología de CPU. No hacen chips físicos. Esto permite que otras compañías agreguen varias tecnologías periféricas, típicamente llamadas SOC o sistema en chip. Si el dispositivo es una tableta, un teléfono celular o un sistema de entretenimiento en el automóvil. Esto permite a los proveedores de chips adaptar el resto del chip a una aplicación en particular. Esto tiene beneficios adicionales,

  1. Menor costo de la junta
  2. Baja potencia (nota1)
  3. Fabricación más fácil
  4. Factor de forma más pequeño

ARMapoya a los proveedores de SOC con AMBA , lo que permite a los implementadores de SOC comprar módulos de terceros disponibles; como una Ethernet, memoria y controladores de interrupción. Algunas otras plataformas de CPU admiten esto, como MIPS , pero MIPS no es tan consciente de la energía.

Todos estos son beneficiosos para un diseño portátil / con batería. Algunos son buenos por todas partes. Además, ARMtiene un historial de dispositivos que funcionan con baterías; Apple Newton , Organizadores Psion . La infraestructura del software PDA fue aprovechada por algunas compañías para crear dispositivos de tipo teléfono inteligente . Aunque, quienes reinventaron la GUI tuvieron más éxito para usarla con un teléfono inteligente .

El auge de los Open sourceconjuntos de herramientas y operating systemstambién facilitó los diversos SOCchips. Una organización cerrada tendría problemas para tratar de admitir todos los dispositivos disponibles para ARM. Las dos plataformas celulares más populares, Andriod y OSx / IOS, están basadas en sistemas operativos Linux y FreeBSD, Mach y NetBSD . Open Sourceayuda a los SOCproveedores a proporcionar soporte de software para sus conjuntos de chips.

Con suerte, por qué x86 se usa para el teclado es evidente. Tiene el software y, lo que es más importante, personas capacitadas para usar ese software. Netwinder es un ARMsistema que fue diseñado originalmente para el teclado . Además, los fabricantes actualmente están buscando ARM64 para el mercado de servidores. La energía / calor es una preocupación en los centros de datos 24/7.

Entonces diría que el ecosistema que crece alrededor de estos chips es tan importante como características como el bajo consumo de energía. ARMha estado luchando por la computación de bajo consumo y alto rendimiento durante algún tiempo (mediados a fines de la década de 1980) y tienen mucha gente a bordo.

Nota 1: varios chips necesitan controladores de bus para comunicarse entre sí a voltajes y unidades conocidas. Además, típicamente los chips separados necesitan condensadores de soporte y otros componentes de potencia que se pueden compartir en un sistema SOC .


22

El ARM es como un auto deportivo italiano:

  • Bien equilibrado, bien ajustado, motor. Da buena aceleración y velocidad máxima.
  • Excelentes persecuciones, frenos y suspensión. Puede detenerse rápidamente, puede arrinconarse sin disminuir la velocidad.

El x86 es como un muscle car estadounidense:

  • Gran motor, gran bomba de combustible. Proporciona excelente velocidad máxima y aceleración, pero usa mucho combustible.
  • Frenos espantosos, debe poner una cita en su diario, si desea reducir la velocidad.
  • Terrible dirección, tienes que reducir la velocidad a la esquina.

En resumen: el x86 se basa en un diseño de 1974 y es bueno en línea recta (pero consume mucho combustible). El brazo usa poco combustible, no disminuye la velocidad en las esquinas (ramas).


Metáfora terminada, aquí hay algunas diferencias reales.

  • El brazo tiene más registros.
  • El brazo tiene pocos registros de propósito especial, x86 es todo registros de propósito especial (por lo tanto, menos cosas en movimiento).
  • El brazo tiene pocos comandos de acceso a la memoria, solo carga / almacena el registro.
  • Brazo es la arquitectura interna de Harvard mi diseño.
  • El brazo es simple y rápido.
  • Las instrucciones de armado son arquitectónicamente de ciclo único (excepto cargar / almacenar múltiples).
  • Las instrucciones de armado a menudo hacen más de una cosa (en un solo ciclo).
  • Cuando se necesita más de una instrucción de Armado, como el almacenamiento en bucle del x86 y el incremento automático, el Armado todavía lo hace en menos ciclos de reloj.
  • El brazo tiene más instrucciones condicionales.
  • El predictor de bifurcación de brazo es trivialmente simple (si es incondicional o al revés, entonces asume bifurcación, de lo contrario asume no bifurcación), y funciona mejor que el muy muy complejo en el x86 (no hay suficiente espacio aquí para explicarlo, no es que yo pueda )
  • Arm tiene un conjunto de instrucciones simple y consistente (puede compilar a mano y aprender el conjunto de instrucciones rápidamente).

77
Esta analogía se rompe con el hecho de que los autos deportivos italianos se descomponen en cada instante que pueden obtener mientras que las CPU ARM no, y que si bien se puede hacer fácilmente, en realidad no se puede comprar una sola CPU ARM que pueda hacer velocidades de CPU de escritorio , mucho menos los enchufados y las placas base para colocarlos. :)
Evi1M4chine

1
En cuanto al rendimiento, compite directamente con algunos de los procesadores Xeon más grandes / rápidos (p. Ej. E5-2690 v3) pero a menor costo y potencia. quora.com/…
ctrl-alt-delor

1
Para cargas de trabajo paralelas masivas como bases de datos y servidores de E / S, seguro. Para un rendimiento de subproceso único, nadie ha diseñado un núcleo ARM en ningún lugar tan grande como x86. No hay razón para que no puedan, simplemente nadie lo ha hecho. El "impuesto x86" en el área de alimentación y troquel no es tan grande en comparación con la cantidad de silicio utilizado para la maquinaria fuera de servicio en los núcleos de CPU de alta potencia. Ciertamente hay verrugas en x86, pero RISC tiene una desventaja de densidad de código (que generalmente no importa mucho, pero aún importa). Esto se discute repetidamente en los foros de realworldtech.com .
Peter Cordes

1
@richard: Hay muchas cosas que no "necesitas", pero eso aumenta la densidad del código. El truco es equilibrar la complejidad de la decodificación con el tamaño del código / número de instrucciones. Aumentar el ancho de un núcleo fuera de servicio es extremadamente costoso en consumo de energía, por lo que es valioso incluir más trabajo en cada instrucción. Un pequeño aumento en la complejidad de decodificación es mucho más barato. Las CPU x86 modernas ya logran decodificar x86 rápidamente. (No lo suficientemente rápido como para mantener un núcleo OOO de 4 anchos alimentado desde los decodificadores en lugar de uop-cache o loop buffer, y por supuesto a un alto costo de energía)
Peter Cordes

3
@ Evi1M4chine, también se rompe con el hecho de que un auto deportivo italiano es enormemente caro, mientras que un muscle car de Estados Unidos es relativamente barato. Y el muscle car es lo que es porque es simple, mientras que algo como un Ferrari es muy muy complicado. Todo lo contrario de CISC vs. RISC
Lorenzo Dematté

15

La arquitectura ARM se diseñó originalmente para computadoras personales Acorn (consulte Acorn Archimedes , circa 1987 y RiscPC ), que eran tanto computadoras personales basadas en teclado como modelos de PC IBM x86. Solo las implementaciones posteriores de ARM se dirigieron principalmente al segmento de mercado móvil e integrado.

Originalmente, las CPU RISC simples de rendimiento más o menos equivalente podrían ser diseñadas por equipos de ingeniería mucho más pequeños (ver Berkeley RISC ) que aquellos que trabajan en el desarrollo x86 en Intel.

Pero, hoy en día, los chips ARM más rápidos tienen unidades de despacho de instrucciones fuera de orden de múltiples problemas muy complejas diseñadas por grandes equipos de ingeniería, y los núcleos x86 pueden tener algo así como un núcleo RISC alimentado por una unidad de traducción de instrucciones.

Por lo tanto, cualquier diferencia actual entre las dos arquitecturas está más relacionada con las necesidades específicas del mercado de los nichos de productos a los que se dirigen los equipos de desarrollo. (Opinión aleatoria: ARM probablemente gane más en las tarifas de licencia de las aplicaciones integradas que tienden a ser mucho más limitadas en cuanto a potencia y costo. E Intel necesita mantener una ventaja de rendimiento en PC y servidores por sus márgenes de beneficio. Por lo tanto, usted ve diferentes optimizaciones de implementación).


Todavía hay grandes diferencias arquitectónicas. Sin embargo, Intel hizo un trabajo maravilloso e invirtió una gran cantidad de dinero para hacer que la CPU mal diseñada funcione muy bien (uno se pregunta qué podría haberse hecho si todo este esfuerzo se hubiera puesto en una CPU bien diseñada).
ctrl-alt-delor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.