Una vez que sabes de qué se compone un SoC, es hora de tratar cada uno de los componentes, al menos los que yo considero más importantes. En esta segunda parte comenzaré por el Procesador.

Procesador

Este chip es el “cerebro” del sistema y el más complejo de todos, se encarga de ejecutar los programas (sistema operativo, aplicaciones de usuario, etc), sólo ejecuta algoritmos en lenguaje de bajo nivel mediante la realización de operaciones aritméticas y lógicas simples (sumar, restar, multiplicar, dividir y las lógicas binarias) y también se encarga de los accesos a memoria.

Siguiendo el ejemplo del capítulo 1 de este monográfico, el SoC Snapdragon 801 monta una CPU Kait basada en la arquitectura ARM Cortex-A15™, aunque con modificaciones por parte de la propia Qualcomm. Este procesador está basado en el juego de instrucciones ARMv7-A. Las características principales son:

  • Hasta 4 núcleos con tecnología MPCore™ y una frecuencia de reloj máxima de 2.5 GHz.
  • Gran poder de procesamiento, con un 40% más de rendimiento que un Cortex-A9.
  • Alta eficiencia energética.
  • Tecnología multimedia NEON™, extensiones DSP & SIMD y soporte para operaciones en punto flotante.
  • Capacidad para redireccionar 1 TB de memoria RAM.
  • Soporte para tecnología de procesamiento big.LITTLE.
Arquitectura de un procesador Cortex A-15 MP Core de cuatro núcleos.

Arquitectura de un procesador Cortex A-15 MP Core de cuatro núcleos.

Como he mencionado en alguna ocasión, los procesadores ARM™ están basados en el juego de instrucciones ARMv7-A, pero.. ¿sabemos lo que es realmente un juego de instrucciones?

Juego de instrucciones

Todos los programas que se encuentran en cualquier dispositivo (ordenador, tablet, smartphone, etc) están formados por instrucciones y datos, y son las instrucciones las que se encargarán de decirle al procesador que hacer con esos datos. Dicho de una manera más técnica, un juego de instrucciones o ISA (Instruction Set Architecture – Arquitectura del Conjunto de Instrucciones) es una especificación que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. Una vez entendido esto, hay que dejar claro que las instrucciones del procesador de un ordenador de sobremesa no serán las mismas que las de un smartphone o tablet.

Básicamente existen tres tipos de juegos de instrucciones:

  • SISC (Specific Instruction Set Computer – Computadora con Conjunto de Instrucciones Específicas).
  • RISC (Reduced Instruction Set Computer – Computadora con Conjunto de Instrucciones Reducidas).
  • CISC (Complex Instruction Set Computer – Computadora con Conjunto de Instrucciones Complejas).

Los procesadores basados en ARM™ usan el juego de instrucciones RISC, de ahí el nombre de la compañía (Advanced RISC Machines).

Las frecuencias, los núcleos, o los juegos de instrucciones no son lo único que compone un procesador, sino que que también tiene buses de datos, transistores, electrónica y los importantísimos algoritmos de ejecución. Estos algoritmos se dividen básicamente en dos: Secuencial y Paralelo.

Secuencial

Un algoritmo secuencial es aquel que sigue un orden concreto, esto quiere decir que habrá que completar cada una de las tareas en el orden señalado, una por una, empezando por la primera, terminando en la última e iniciando un paso únicamente cuando se haya completado el anterior. Para comprender esto un poco más, voy a poneros un famoso ejemplo que circula por toda la red: el algoritmo de cómo hacer una tortilla de patatas.

1. Preparar cuatro patatas medianas.
2. Preparar una cebolla de tamaño medio.
3. Pelar las patatas.
4. Pelar la cebolla.
5. Trocear las patatas en trozos muy finos y pequeños.
6. Repetir el proceso con la cebolla a gusto de los comensales.
7. Juntar la patata y la cebolla en un bol de grandes dimensiones. Remover el conjunto.
8. Preparar la sartén adecuada.
9. Verter una generosa cantidad de aceite.
10. Calentar la sartén a fuego medio y esperar a que coja la temperatura adecuada.
11. Verter el contenido del bol a la sartén.
12. Remover cada tres minutos hasta que la patata esté bien blanda.
13. Extraer el contenido de la sartén a un bol de grandes dimensiones intentando mover la menor cantidad de aceite posible.
14. Preparar cuatro huevos, cascarlos y verter su contenido en otro bol. Batirlo hasta que quede un líquido ciertamente espeso y uniforme.
15. Unir el contenido de los dos boles y mezclar el conjunto hasta que el resultado sea uniforme.
16. Calentar de nuevo la sartén, esta vez al máximo.
17. Cuando la sartén haya cogido temperatura, verter el contenido del bol.
18. Cuando los bordes de la tortilla estén cuajados, darle la vuelta a la tortilla con ayuda de un plato.
19. Volver a insertar la tortilla a medio hacer en la sartén para que termine de hacerse por el otro lado.
20. Cuando esté cuajada por completo, sacar a un plato.

El algoritmo arriba descrito sería una aproximación a una tarea secuencial ejecutada por un procesador de un sólo núcleo.

Paralelo

Como consecuencia de la implementación de varios núcleos en un mismo chip, fruto de los avances tecnológicos, ha ido tomando importancia la paralelización de los algoritmos. Es más difícil incrementar la capacidad de procesamiento con un único procesador que aumentar su capacidad de cómputo mediante la inclusión de unidades en paralelo.

Un algoritmo paralelo es un algoritmo que puede ser ejecutado por partes en el mismo instante de tiempo por varias unidades de procesamiento, para finalmente unir todas las partes y obtener el resultado correcto.

Siguiendo con el ejemplo del algoritmo cómo hacer una tortilla de patatas, esta vez se usará un procesador de dos núcleos, cuyo símil en la vida real sería como si hubiesen dos cocineros.

Cocinero 1 Cocinero 2
1. Preparar cuatro patatas medianas. 1. Preparar una cebolla de tamaño medio.
2. Pelar las patatas. 2. Pelar la cebolla.
3. Trocear las patatas en trozos muy finos y pequeños. 3. Repetir el proceso con la cebolla a gusto de los comensales.
4. Juntar la patata y la cebolla en un bol de grandes dimensiones. Removemos el conjunto. 4. Preparar la sartén adecuada.
5. 5. Verter una generosa cantidad de aceite.
6. 6. Calentar la sartén a fuego medio y esperar a que coja la temperatura adecuada.
7. Verter el contenido del bol a la sartén. 7.
8. Remover cada tres minutos hasta que la patata esté bien blanda. 8. Preparar cuatro huevos, cascarlos y verter su contenido en otro bol. Batirlo hasta que quede un líquido ciertamente espeso y uniforme.
9. Extraer el contenido de la sartén al bol de los huevos intentando mover la menor cantidad de aceite posible. 9. Calentar de nuevo la sartén, esta vez al máximo.
10. Cuando la sartén haya cogido temperatura, verter el contenido del bol. 10.
11. Cuando los bordes de la tortilla estén cuajados, darle la vuelta a la tortilla con ayuda de un plato. 11.
12. Volver a insertar la tortilla a medio hacer en la sartén para que termine de hacerse por el otro lado. 12.
13. Cuando esté cuajada por completo, sacar a un plato. 13.

Como habrás podido observar, la diferencia entre un algoritmo y otro es notable, ya que se han utilizado 13 filas en vez de 20, que en un procesador sería el equivalente a usar trece ciclos de CPU en vez de veinte, en torno a un 35% menos de instrucciones, lo cual es una mejora considerable.

Otra cosa que se ha podido comprobar gracias al querido ejemplo del algoritmo de la tortilla de patatas, es que hay tareas que no se pueden paralelizar. Esto demuestra que un procesador con dos núcleos no duplica la potencia de un procesador con un sólo núcleo, ni cuatro núcleos tampoco van a cuadruplicar la potencia de un sólo núcleo.

La ejecución fuera de orden: adelantando trabajo

Es necesario tener en cuenta que los procesadores se encargan de gestionar cientos o miles de tareas simultáneamente, de la misma forma que en una cocina se suelen preparar varios platos a la vez y, por ello, esos huecos que en la tabla se ven vacíos podrían aprovecharse en otras “recetas”.

La ejecución fuera de orden (Out of Order Execution, OoOE, OOE) es un concepto que silenciosamente se ha introducido en el algoritmo paralelo de la tortilla de patatas, y básicamente consiste en adelantar el trabajo que prevemos que vamos a realizar más adelante. Esta es una técnica implementada prácticamente en todos los procesadores, obviamente en muchos de los actuales ARM™.

Una vez que sabemos que compone un procesador, he de decir que hay tecnologías que potencian las capacidades de éstos, un claro ejemplo es la tecnología multimedia NEON™.

Tecnología Multimedia NEON™

La tecnología NEON™ es una extensión de la arquitectura SIMD de 128 bits (Single Instruction, Multiple Data – Instrucción Única, Datos Múltiples) para la serie de procesadores ARM Cortex™-A, diseñados para proporcionar una aceleración potente y flexible en aplicaciones multimedia de consumo, ofreciendo una experiencia de usuario significativamente mejorada.

La tecnología NEON™ puede acelerar las aplicaciones multimedia y la señal de procesamiento de los algoritmos, como la codificación/decodificación de vídeo, los gráficos 2D/3D, juegos, audio y procesamiento de voz, procesamiento de imágenes, telefonía, y la síntesis de sonido en por lo menos 3 veces el rendimiento de ARMv5 y al menos 2 veces el rendimiento de ARMv6 con el motor SIMD.

Qualcomm Snapdragon 800 series.

Qualcomm Snapdragon 800 series.

Conclusión

En el rendimiento y eficiencia de un procesador influyen muchos factores, no es suficiente con añadir núcleos y aumentar la velocidad de reloj. Hay que ver las CPU como un todo, entender que hay software y hardware que se complementan. De nada sirve tener 8 núcleos sin un buen algoritmo, sin unas buenas instrucciones que lo controlen de forma eficiente.

Enlaces de interés

SoC – Arquitectura, Proceso de Diseño y Fabricación (1)

SoC – Memorias y Chip Gráfico (3)

Fuentes

Qualcomm

ARM

ARM NEON™

Wikipedia

Xataka

Autoría de las imágenes

Autor: ARM – Cortex-A15

Autor: Qualcomm – Snapdragon 801 series

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.