Estudio detallado que contraste las arquitecturas ARM/x86.
Dado que vamos a tratar una comparativa entre ARM/x86 lo primero es tener claro que caracterizan a ambas arquitecturas.
ARM
ARM es una
arquitectura RISC de 32 bits desarrollada por ARM Holdings (pero licenciable).
Se llamó Advanced RISC Machine, y anteriormente Acorn RISC Machine.
La arquitectura ARM es el conjunto de instrucciones de 32
bits más ampliamente utilizado.
La relativa
simplicidad de los procesadores ARM los hace ideales para aplicaciones de baja
potencia. Como resultado, se han convertido en dominante en el mercado de la
electrónica móvil e integrada, encarnados en microprocesadores
y microcontroladores pequeños,
de bajo consumo y relativamente bajo coste.
En 2005, alrededor del 98% de los más de mil
millones de teléfonos móviles vendidos utilizaban al menos un procesador
ARM.
Desde 2009, los
procesadores ARM son aproximadamente el 90% de todos los procesadores RISC de
32 bits integrados.
Diseño
El juego de instrucciones del ARM es similar al del MOS 6502
(microprocesador de 8 bits), pero este incluye características adicionales que permiten conseguir un mejor rendimiento en su ejecución.
Otra característica única del juego de instrucciones es la
posibilidad de añadir shifts y rotar en el procesamiento de datos (aritmético-lógicos y movimiento de registros).
El procesador ARM
también tiene algunas características que son raras en otras arquitecturas
también consideradas RISC, como son el direccionamiento relativo, y el pre/post
incremento en el modo de direccionamiento.
Tecnologías
Thumb: Los
procesadores más recientes traen un conjunto de instrucciones adicional de 16
bits (2 bytes) de longitud por instrucción, en lugar de 32 bits (4 bytes) como el juego de instrucciones estándar de ARM.
Thumb es un
subconjunto formado por las instrucciones que se usan con más frecuencia.
El primer procesador
con la tecnología Thumb fue
el ARM7TDMI. Toda la familia posterior al ARM9, incluyendo el procesador Intel XScale, traen incorporada esta tecnología en su núcleo.
El modo Thumb es más
limitado que el modo ARMI (en el cual sus instrucciones ocupan 4 bytes), pero
como en el modo Thumb las instrucciones solo ocupan 2 bytes, esto conlleva un menor consumo de corriente y de
memoria, lo que lo convierte a la tecnologia Thumb en ideal para cualquier tipo de dispositivo móvil.
Jazelle: ARM tiene implementada una tecnología que
permite a ciertos tipos de arquitecturas ejecuten Java bytecode nativamente en el
hardware.
El
primer procesador en usar Jazelle fue el ARM926EJ-S, utilizando una J en el nombre de todos los
procesadores que soportaran esta tecnología.
x86
x86 es una
arquitectura CISC de 32 bits desarrollada por Intel (pero licenciable al igual
que ARM). Esta arquitectura define el conjunto de instrucciones para la familia
de microprocesadores instalados en la gran mayoría de ordenadores en el
mundo.
Esta
arquitectura es notablemente no limpia, por mantener compatibilidad con la
línea de procesadores de 16 bits de Intel, que a su vez
también eran compatibles con una familia de procesadores de 8 bits. A
pesar de ello, la popularidad comercial de esta arquitectura hizo que muchos
fabricantes empezaran a fabricar en masa microprocesadores compatibles (AMD,
Cyrix, etc).
Existen dos sucesores de 64 bits para esta arquitectura:
- IA64, empleada en los procesadores Itanium de Intel y no compatible con X86, excepto bajo emulación.
- AMD64 o x86-64, de AMD, que es básicamente una extensión de 64 bits de la familia x86.
Registros
Después del juego de instrucciones, lo más reseñable de esta
arquitectura es que incluye 8 registros de propósitos generales también
accesibles en 8 y 16 bits.
EAX (acumulador)
- Donde ocurren la mayoría de cálculos
- Optimizado para la mayoría de instrucciones aritmeticos-logicas
- La arquitectura posee operaciones especiales para la entrada/salida de datos de este registro
EBX (base)
- En 16 bits, es el registros usado como puntero. Junto a ESI, EDI y EBP, era el único que podía aparecer entre corchetes ("operador de indirección")
- Actualmente no tiene función específica, así que se considera almacenamiento extra
ECX (contador)
- Todas las instrucciones de x86 que precisan de un contador usan este registro
- Es un contador descendente, al contrario de lo que suele ocurrir en alto nivel
EDX (datos)
- Es el registro más ligado al acumulador (EAX)
- Operaciones que trabajan con datos grandes los 32 bits más significativos en EDX
- Suele usarse para almacenar datos relacionados con el acumulador
ESI (índice
fuente)
- Tiene las mismas propiedades que EDI. Sin embargo, se usa como puntero a la dirección donde se encuentra el dato fuente (con el que vamos a operar)
EDI (índice de
destino)
- Cada vez que necesitamos acceder a memoria para almacenar datos, necesitamos de una dirección (puntero). Este registro se encarga de ello
- Instrucciones que se encarguen de almacenar datos en la memoria usan este registro para direccionarla
ESP y EBP (punteros de
manejo de la pila)
- Son los únicos que mantienen su función original
- ESP es especifico para el manejo de la pila
- EBP se puede reutilizar en programas que no precisen de ella
En definitiva, grosso modo:
ARM - Es un conjunto de instrucciones de 32 bits de
arquitectura RISC (Reduced Instruction Set Computer = Computador con Conjunto
de Instrucciones Reducidas).
x86 - Es un conjunto de instrucciones de 32 bits de
arquitectura CISC (Complex Instruction Set Computer = Computador con Conjunto
de Instrucciones Complejas).
Vistas las 2 definiciones, la primera cuestión se reduce a
comparar las arquitecturas RISC y CISC.
Pero, ¿por que surge esta comparativa?
La respuesta parece simple, pero saber que terminara
ocurriendo en un futuro no esta tan claro.
Hoy en día, los programas cada vez son más grandes y complejos,
por lo que estos demandan mayor velocidad en el procesamiento de información,
lo que implica buscar microprocesadores más rápidos y eficientes.
Los avances y progresos en las tecnología de
semiconductores, han reducido las diferencias en las velocidades de
procesamiento de los microprocesadores con las velocidades de las memorias, lo
que ha repercutido en nuevas tecnologías en el desarrollo de microprocesadores.
¿Que significa esto?
Que con tecnologías de semiconductores comparables y bajo la
misma frecuencia de reloj, un procesadores RISC tiene una capacidad de
procesamiento de 2 a 4 veces mayor que la de un CISC, pero su estructura
hardware es tan simple, que se puede realizar en una fracción de la superficie
ocupada por el circuito integrado de un procesador CISC.
Por este hecho, se supone que la arquitectura RISC
reemplazará a la CISC, pero la respuesta como dijimos antes, no es tan simple,
porque hay que tener en cuenta más factores:
- Costes (tanto hardware, como en el desarrollo del software)
- Compatibilidades (dado que ambas arquitecturas generan binarios que otras arquitecturas son incapaces de interpretar)
Aun así, todo
esto lleva a pensar que dentro de muy poco los usuarios dejaran de hacerse la
pregunta ¿RISC o CISC?, puesto que la tendencia futura, nos lleva a pensar a que no existirán los CISC 100% puros.
La meta
principal es incrementar el rendimiento del procesador, ya sea optimizando
alguno que ya exista o si se desee crear uno. Para esto se deben considerar tres
áreas principales a cubrir en el diseño del procesador y estas son:
- La arquitectura
- La tecnologia de proceso
- El encapsulado
La tecnología
de proceso hace referencia a los materiales y técnicas utilizadas en la fabricación
del circuito integrado.
El encapsulado se refiere a cómo se integra un procesador con lo que lo rodea un sistema funcional, que de alguna manera determina la velocidad total del sistema.
El encapsulado se refiere a cómo se integra un procesador con lo que lo rodea un sistema funcional, que de alguna manera determina la velocidad total del sistema.
Aunque la
tecnología de proceso y de encapsulado son vitales en la elaboración de
procesadores más rápidos, es en la arquitectura del
procesador donde podemos encontrar diferencia entre el rendimiento de una CPU y otra.
Dependiendo
de cómo el procesador almacena los operandos de las instrucciones de la CPU,
existen tres tipos de juegos de instrucciones:
- Juego de instrucciones para arquitecturas basadas en pilas
- Juego de instrucciones para arquitecturas basadas en acumulador
- Juego de instrucciones para arquitecturas basadas en registros
Las arquitecturas RISC y CISC son ejemplos de CPU con un conjunto de
instrucciones para arquitecturas basadas en registros.
Arquitectura CISC
Los microprocesadores CISC tienen un conjunto de instrucciones
caracterizado por ser muy amplio y por permitir operaciones complejas entre
operandos situados en la memoria o en los registros internos, en contraposición
a la arquitectura RISC.
Este tipo de arquitectura dificulta el paralelismo entre
instrucciones, por lo que, en la actualidad, la mayoría de los sistemas CISC de
alto rendimiento implementan un sistema que convierte a estas instrucciones
complejas en varias instrucciones simples del tipo RISC, llamadas
microinstrucciones.
Ventajas de las arquitecturas CISC:
- Reduce la dificultad de crear compiladores
- Permite reducir el costo total del sistema
- Reduce los costos de creación de software
- Mejora la compactación de código
- Facilita la depuración de errores
Desventajas de las arquitecturas CISC:
- La velocidad de procesamiento con el paso del tiempo se fue quedando corta, se necesitaba más velocidad. (Accesos a memoria disminuyen la velocidad de ejecución)
- Las instrucciones requieren varios ciclos de reloj (para realizar una sola instrucción un chip CISC requiere de 4 a 10 ciclos) para ejecutarse
- Los desarrolladores de software creaban sus propias instrucciones más simples
- Se solían utilizar siempre las mismas instrucciones, por lo que un gran número de instrucciones prácticamente no se utilizaban casi nunca o nunca
- Direccionamientos complejos
- Poco aprovechamiento de parte de los compiladores: no es fácil encontrar la mejor instrucción para ejecutar una tarea
Ejemplos de arquitecturas CISC:
| Familia x86 |
| Motorola 68000, 68010, 68020, 68030, 68040 |
Arquitectura RISC
En las
arquitecturas RISC la filosofía que persigue es la de diseñar CPU's a favor de un conjunto de instrucciones pequeñas
y simples que toman menor tiempo para ejecutarse, cuyas características
fundamentales son:
- Instrucciones de tamaño fijo y presentadas en un reducido número de formatos
- Sólo las instrucciones de carga y almacenamiento acceden a la memoria de datos
- Disponen de muchos registros de propósito general
El objetivo de diseñar maquinas con esta arquitectura es la
de dar soporte a la segmentación y al paralelismo a nivel de instrucción, y
reducir los acceso a memoria. Todo esto se traduce en una mayor velocidad de
procesamiento.
En pocas palabras, un chip RISC tendrá menos transistores dedicados a la lógica
principal. Esto permite a los diseñadores una flexibilidad considerable; así
pueden, por ejemplo:
- Incrementar el tamaño del conjunto de registros
- Mayor velocidad en la ejecución de instrucciones
- Implementar medidas para aumentar el paralelismo interno
- Añadir cachés enormes
- Añadir otras funcionalidades, como E/S y relojes para minicontroladores
- Construir los chips en líneas de producción antiguas que de otra manera no serían utilizables
- No ampliar las funcionalidades, y por lo tanto ofrecer el chip para aplicaciones de bajo consumo de energía o de tamaño limitado
Las características que generalmente encontramos en los diseños RISC
son:
- Codificación uniforme de instrucciones (ejemplo: el codigo de operacion se encuentra siempre en la misma posición en cada instrucción, la cual es siempre una palabra), lo que permite una decodificación más rápida
- Un conjunto de registros homogéneo, permitiendo que cualquier registro sea utilizado en cualquier contexto y así simplificar el diseño del compilador (aunque existen muchas formas de separar los ficheros de registro de entero y coma flotante)
- Modos de direccionamiento simple con modos más complejos reemplazados por secuencias de instrucciones aritméticas simples
- Los tipos de datos soportados por el hardware (por ejemplo, algunas máquinas CISC tiene instrucciones para tratar con tipos byte, cadena) no se encuentran en una máquina RISC
Ventajas de las arquitecturas RISC:
- Microarquitectura más simples
- Instrucciones más cortas, menos tiempo de acceso a memoria
- Compiladores más sencillos y eficientes
RISC ofrece soluciones donde se requiere una
elevada capacidad de procesamiento y donde se presente una orientación hacia
los lenguajes de alto nivel.o
Desventajas
de las arquitecturas RISC:
- Mayor numero de lineas de código para una función
- Compatibilidad con arquitecturas antiguas es más difícil de mantener
Ejemplos
de arquitecturas RISC:
![]() |
| MIPS (Microprocessor without Interlocked Pipeline Stages) |
![]() |
| PA-RISC (Hewlett Packard - HP) |
![]() |
| SPARC (Scalable Processor Architecture - Sun Microsystems) |
![]() |
| POWER PC (Apple, Motorola e IBM) |
Pero, a la hora de ejecutarse una instrucción RISC y otra
CISC actual, ¿donde está la diferencia?
Se podría decir a groso modo, la arquitectura CISC actúa
como si tuviera en su interior una arquitectura RISC, en el cual la instrucción
CISC cuando se ejecuta, se "convierte" en varias microinstrucciones
más simples (instrucciones RISC) y estas microinstrucciones son las que se
ejecutan.
Esto quiere decir, que en la actualidad los CISC de los que
disponemos aprovechan el gran numero de instrucciones que poseen la
arquitectura CISC, mas la segmentación (pipelining) que ofrece la arquitectura
RISC.
En conclusión, aunque las diferencias entre las
arquitecturas RISC y CISC son cada vez mas borrosas... las principales diferencias se pueden apreciar
en el siguiente cuadro:
|
CISC
|
RISC
|
|
Instrucciones de varios ciclos
|
Instrucciones de un único ciclo
|
|
Carga/Almacenamiento incorporadas en otras instrucciones
|
Carga/Almacenamiento son instrucciones separadas
|
|
Arquitectura memoria-registro
|
Arquitectura registro-registro
|
|
Instrucciones de tamaño variable
|
Instrucciones de tamaño fijo
|
|
Buffer intermedio para las microinstrucciones
|
Instrucciones implementadas directamente
|
|
Se enfatiza la versatilidad del repertorio de instrucciones
|
Se añaden instrucciones nuevas solo si son de uso frecuente y no
reducen el rendimiento de las más importantes
|
|
Facilita la implementación de compiladores
|
Compiladores más difíciles de implementar
|
|
|
Elimina microcódigo y la decodificación de instrucciones complejas
|
A nivel de rendimiento, el objetivo primordial del uso de ARM es el
bajo consumo de energía frente a otras arquitecturas como puede ser x86.
Por este hecho, ARM se ha convertido en la arquitectura
dominante en innumerables dispositivos electrónicos que son de baja potencia
como pueden ser smartphones, tablets, Raspberries Pi, algunas consolas portátiles e incluso algunos
periféricos del ordenador.
Además, ARM no necesita refrigeración, pero ya empezamos a
ver SoC ARM con disipadores. Todo parece indicar que ARM terminara sustituyendo a
los procesadores x86 de bajo consumo.
Los últimos procesadores ARM alcanzan rendimientos cercanos e incluso superiores a los de la gama móvil de Intel (x86), con consumos menores.
El estado actual del uso de ambas arquitecturas queda muy bien resumido en la siguiente gráfica:
Los últimos procesadores ARM alcanzan rendimientos cercanos e incluso superiores a los de la gama móvil de Intel (x86), con consumos menores.
El estado actual del uso de ambas arquitecturas queda muy bien resumido en la siguiente gráfica:





No hay comentarios:
Publicar un comentario