arm vs aarch64 vs amd64 vs x86_64: ¿Cuál es la diferencia?
Hay muchísimos términos cuando se trata de CPU: aarch64, x86_64, amd64, arm y más. Aprenda qué son y en qué se diferencian entre sí.
¿Es usted alguien que se confunde con términos como ARM
, AArch64
, x86_64
, i386
, etc. cuando ve una hoja de datos? o página de descargas de un software? Estas se denominan arquitecturas de CPU y lo ayudaré a sumergirse en este tema de la informática.
A continuación se muestra una tabla que le proporcionará un buen resumen de lo que significa cada cadena:
x86_64
/x86
/amd64
Mismo nombre para CPU AMD/Intel de 64 bits
AArch64
/arm64
/ARMv8
/ARMv9
Mismo nombre para CPU ARM de 64 bits
i386
-
CPU AMD/Intel de 32 bits
AArch32
/arm
/ARMv1
toARMv7
Mismo nombre para CPU ARM de 32 bits
rv64gc
/rv64g
Mismo nombre para CPU RISC-V de 64 bits
ppc64le
CPU PowerPC de 64 bits
con ordenamiento de memoria little-endian
Leer de izquierda a derecha es la preferencia de usar ese término para describir la arquitectura de la CPU sobre los otros términos usados alternativamente a su derecha.
Si eres un nerd como yo y quieres una explicación más detallada, ¡sigue leyendo!
Descripción general: arquitecturas de CPU
Los términos que enumeré anteriormente, en términos generales, son arquitecturas de CPU. Aunque, hablando pedantemente, esto es lo que un ingeniero informático llama CPU ISA (Arquitectura de conjunto de instrucciones).
Una CPU ISA es lo que define cómo su CPU interpreta los 1 y 0 del binario.
Hay algunos superconjuntos de estos ISA de CPU.
x86 (AMD/Intel)
-
BRAZO
RISC-V
PowerPC (aún vivo en IBM)
Hay más ISA de CPU como MIPS, SPARC, DEC Alpha, etc. Pero los que mencioné anteriormente son los que todavía se usan ampliamente en la actualidad (en cierta medida).
Las ISA enumeradas anteriormente tienen al menos dos subconjuntos. Esto se basa principalmente en el ancho del bus de memoria. El ancho del bus de memoria indica cuántos bits se pueden transferir entre la CPU y la RAM de una sola vez. Hay varios anchos para el bus de memoria, pero los dos anchos más importantes son el bus de memoria de 32 bits y el bus de memoria de 64 bits.
x86 (AMD/Intel)
La CPU ISA x86 proviene principalmente de Intel, ya que Intel fue quien la creó en primer lugar con el microprocesador 8085. El microprocesador 8085 tenía un bus de memoria de 16 bits de ancho. Más tarde, AMD entró en el juego y siguió los pasos de Intel hasta que AMD creó su propia arquitectura superconjunto de 64 bits, superando a Intel.
Los subconjuntos de la arquitectura x86 son los siguientes:
i386
: si posee una CPU anterior a 2007, es probable que esta sea la arquitectura de su CPU. Se trata de la "variante" de 32 bits de la arquitectura x86 actualmente conocida de AMD/Intel.x86_64
/x86
/amd64
: los tres términos se usan indistintamente según el proyecto que analice. Pero todos se refieren a la "variante" de 64 bits de la arquitectura x86 AMD/Intel. De todos modos, la cadenax86_64
se usa ampliamente (y se prefiere) sobrex86
yamd64
. Un ejemplo de esto es que el proyecto FreeBSD se refiere a la arquitectura x86 de 64 bits comoamd64
mientras que Linux y macOS se refieren a ella comox86_64
.
La cadena x86
para CPU ISA es especial. Verá, durante la transición de x86 de 32 bits (i386
) a x86 de 64 bits (x86_64
), los proveedores de CPU se aseguraron de que la CPU pudiera ejecutar ambos, 32 Instrucciones de -bit y de 64 bits. Por lo tanto, a veces cuando lees x86
, también puede significar "Se ejecutará solo en una computadora de 64 bits, pero si esa computadora puede ejecutar instrucciones de 32 bits, puedes ejecutar software de usuario de 32 bits". en eso."
Esta ambigüedad de x86, es decir, procesadores de 64 bits que también pueden ejecutar código de 32 bits, se debe principalmente a los sistemas operativos que se ejecutan en procesadores de 64 bits, pero permiten al usuario de dicho sistema operativo ejecutar 32 bits. software. Windows hace uso de esto con una característica llamada "modo de compatibilidad".
Recapitulemos, existen dos arquitecturas de CPU para las CPU diseñadas por AMD e Intel. Son de 32 bits (i386
) y de 64 bits (x86_84
).
inteligencia adicional
(¡Sí! Soy gracioso)
El ISA x86_64
también tiene subconjuntos. Todos estos subconjuntos son de 64 bits pero tienen varias características agregadas. Especialmente instrucciones SIMD (Instrucción única de datos múltiples).
x86_64-v1
: El ISAx86_64
base con el que casi todo el mundo está familiarizado. Cuando alguien dicex86_64
, lo más probable es que se esté refiriendo al ISAx86_64-v1
.x86_64-v2
: esto agrega más instrucciones como SSE3 (Streaming SIMD Extensions 3) como extensiones.x86_64-v3
: ¡Agrega instrucciones como AVX (Advance Vector eXtensions) y AVX2 que pueden usar registros de CPU de hasta 256 bits de ancho! Esto puede paralelizar enormemente sus cálculos si puede aprovecharlo.x86_64-v4
: itera sobre el ISAx86_64-v3
agregando más instrucciones SIMD como extensiones. Como AVX256 y AVX512. ¡Este último puede utilizar registros de CPU de hasta 512 bits de ancho!
BRAZO
ARM es una empresa que crea su propia especificación para una CPU ISA, diseña y licencia sus propios núcleos de CPU y también permite a otras empresas diseñar sus propios núcleos de CPU utilizando ARM CPU ISA. (¡La última parte parecía una consulta SQL!)
Es posible que haya oído hablar de ARM debido a los SBC (computadoras de placa única) como la línea de SBC Raspberry Pi. Pero sus CPU también se utilizan mucho en teléfonos móviles. Recientemente, Apple pasó de los procesadores x86_64
a utilizar su propio diseño de procesadores ARM en sus ofertas de computadoras portátiles y de escritorio.
Como cualquier arquitectura de CPU, existen dos subconjuntos según el ancho del bus de memoria.
Los nombres oficialmente reconocidos para las arquitecturas ARM de 32 y 64 bits son AArch32
y AArch64
respectivamente. La cadena 'AArch' significa 'Arquitectura de brazo'. Estos son modos en los que puede estar una CPU para ejecutar instrucciones.
La especificación real de una instrucción que cumple con la CPU ISA de ARM se denomina ARMvX
donde X
se refiere a una generación. número de una especificación. Hasta la fecha, ha habido 9 versiones principales de esta especificación. Desde ARMv1
hasta ARMv7
, que define una especificación de arquitectura de CPU para CPU de 32 bits. Mientras que ARMv8
y ARMv9
son especificaciones para las CPU ARM de 64 bits. (Más información aquí.)
Quizás se pregunte por qué algunas personas lo llaman arm64
incluso cuando AArch64
es el nombre oficialmente reconocido para la arquitectura ARM de 64 bits. La razón es doble:
El nombre
arm64
se popularizó antes de que ARM decidieraAArch64
. (ARM también se refiere a la arquitectura ARM de 64 bits comoarm64
en parte de su documentación oficial... 😬)A Linus Torvalds no le gusta el nombre
AArch64
. Por lo tanto, el código base de Linux se refiere en gran medida aAArch64
comoarm64
. Pero seguirá informandoaarch64
cuando hagas ununame -m
.
Por lo tanto, para CPU ARM de 32 bits, debe buscar la cadena AArch32
pero a veces también puede ser arm
o armv7
. De manera similar, para las CPU ARM de 64 bits, debe buscar la cadena AArch64
pero a veces también puede ser arm64
o ARMv8
o . ARMv9
.
RISC-V
RISC-V es una especificación de código abierto de una CPU ISA. ¡Esto no significa que las CPU en sí sean de código abierto! Es un estándar, algo así como Ethernet. La especificación Ethernet es de código abierto, pero los cables, enrutadores y conmutadores que usted compra cuestan dinero. Lo mismo ocurre con las CPU RISC-V. :)
Sin embargo, esto no ha impedido que las personas creen núcleos RISC-V que están disponibles gratuitamente (como diseños; no como núcleos físicos/SoC) bajo una licencia de código abierto. He aquí uno de esos esfuerzos.
Al igual que cualquier arquitectura de CPU, RISC-V tiene arquitecturas de CPU de 32 y 64 bits. Dado que RISC-V es muy nuevo (en términos de CPU ISA), todos los principales núcleos de CPU en el lado del consumidor/cliente suelen ser CPU de 64 bits. Los diseños de 32 bits son en su mayoría microcontroladores que tienen un caso de uso muy específico.
En lo que sí se diferencian son en las extensiones de CPU. La extensión mínima absoluta que uno necesita implementar para ser llamado CPU RISC-V es el 'Conjunto de instrucciones de entero base' (rv64i
).
Una tabla de algunas extensiones y la descripción es la siguiente:
rv64i
Conjunto de instrucciones de enteros básicos de 64 bits (obligatorio)
m
Instrucciones de multiplicación y división.
a
instrucciones atómicas
f
Instrucciones de punto flotante de precisión simple
d
Instrucciones de punto flotante de doble precisión
g
Alias; Una colección de extensiones necesarias para ejecutar un sistema operativo gde uso general (incluye
imafd
)c
Instrucciones comprimidas
En la cadena rv64i
, rv
significa RISC-V, 64
indica que se trata de una arquitectura de CPU de 64 bits y i
es la extensión para el conjunto de instrucciones de entero base obligatorio. La razón por la que rv64i
se escribe junto es porque, aunque la extensión i
es una "extensión", es obligatoria.
La convención es tener el nombre de la extensión en el orden específico indicado anteriormente. Entonces rv64g
se expande a rv64imafd
, no a rv64adfim
.
Entonces, técnicamente (al momento de escribir este artículo) rv64g es en realidad rv64imafdZicsrZifencei. risa malvada
PowerPC
PowerPC era una arquitectura de CPU muy popular en los primeros días de la asociación entre Apple, IBM y Motorola. Fue la arquitectura de CPU que Apple utilizó en toda su línea de consumo hasta que cambiaron de PowerPC al x86 de Intel.
PowerPC inicialmente tenía ordenamiento de memoria big-endian. Más tarde, cuando se introdujo una arquitectura de 64 bits, se agregó una opción para usar little-endianness. Esto se hizo para ser compatible con el orden de memoria de Intel (para evitar errores de software), que siempre ha sido little-endian. Podría seguir y seguir sobre el endianismo, pero será mejor que le sirva este documento de Mozilla para aprender más sobre el endianismo.
Dado que la endianidad también es un factor aquí, existen 3 arquitecturas de PowerPC:
powerpc
: La arquitectura PowerPC de 32 bits.ppc64
: la arquitectura PowerPC de 64 bits con ordenación de memoria big-endian.ppc64le
: la arquitectura PowerPC de 64 bits con ordenamiento de memoria little-endian.
A partir de ahora, ppc64le
se usa ampliamente.
Conclusión
Existen muchas arquitecturas de CPU disponibles. Para cada arquitectura de CPU, existen subconjuntos de 32 y 64 bits. Hay CPU que ofrecen arquitecturas x86, ARM, RISC-V y PowerPC.
El x86 es la arquitectura de CPU más amplia y fácilmente disponible, ya que es la que utilizan Intel y AMD. También hay ofertas de ARM que se utilizan casi exclusivamente en teléfonos móviles y SBC accesibles.
RISC-V realiza un esfuerzo continuo para hacer que el hardware sea más accesible. Tengo un SBC que tiene una CPU RISC-V;)
PowerPC se encuentra principalmente en servidores, al menos por el momento.