El procesador

El procesador de un ordenador es un circuito integrado, un componente hardware, que se ocupa de controlarlo todo, es el que genera las instrucciones que indican al resto de componentes del ordenador lo que tienen que hacer. Es por ello que es conocido habitualmente como el cerebro del ordenador.

En ocasiones nos referiremos al procesador como la CPU (Central Process Unit), por sus siglas en inglés. Y es tan significativo, que a veces nos referimos a la totalidad del ordenador como la CPU.

Este circuito integrado tiene varias entradas y es capaz de ejecutar un amplio abanico de instrucciones con dichas entradas, pero para entender cómo funciona tenemos que echar un vistazo a su arquitectura.

Arquitectura de una CPU

La CPU tiene una serie de bloques funcionales que trabajan de forma coordinada. Estos bloques son:

Unidad de Control: El cerebro del microprocesador que genera todas las señales que lo gobiernan.

Unidad aritmético-lógica: conocida por sus siglas en inglés: ALU, es el bloque utilizado por la CPU para realizar los cálculos aritméticos o lógicos. La CPU se comunica con la ALU por medio del bus interno.

Buses internos: Empleados para comunicar todos los bloques de la CPU y para conectarse con los buses externos que dan a la CPU acceso al resto de componentes del ordenador.

Registros internos: Registros en los que se almacenan los datos para las operaciones y las direcciones de memoria a las que se quiera acceder.

Arquitectura de la CPU
Arquitectura de la CPU

Por ejemplo, si quisiéramos sumar dos números, pongamos 2 y 3. A alto nivel, una posible secuencia lógica sería:

  1. Previamente se han cargado los dos operandos en los registros de datos.
  2. La unidad de control va al registro adecuado y pone el primer operando en el bus interno
  3. La unidad de control se comunica con la ALU: le dice que tiene un operando en el bus interno.
  4. Hace lo mismo con el otro dato.
  5. Luego indica a la ALU la operación que quiere que realice, en este caso la suma.
  6. Le indica también en que registro quiere que deje el resultado.

Para quien quiera ampliar este tema, puede investigar sobre el ciclo de ejecución de una instrucción. En internet encontrará bastantes ejemplos de ejecuciones de distintas instrucciones, si bien es posible que, para comprenderlo bien, tenga antes que investigar la estructura de los bloques brevemente descritos arriba.

Núcleos e hilos de un procesador

Hemos visto los bloques básicos que constituyen la arquitectura de un procesador, y de paso nos hemos hecho una idea de alto nivel de como funciona la CPU. Sin embargo, los procesadores modernos son mucho más complejas e incluyen varios de estos bloques básicos, y aunque no voy a pasar a describir en profundidad la arquitectura de las CPUs modernas, si creo que es el momento de introducir dos conceptos que oiremos mucho: Los núcleos y los hilos.

Los núcleos (cores)

¿Qué es realmente un núcleo? Un núcleo es el componente que ejecuta las instrucciones, que es la función básica de la CPU. Si utilizamos la arquitectura de la CPU que vimos en el apartado anterior, el núcleo sería la unidad de control.

A principios de este siglo empezaron a llegar al mercado los procesadores con más de un núcleo, en inglés “core”, que fueron llamados Multi core. Lógicamente, los del siglo pasado quedaron con el nombre de Single core, ya que entonces sólo tenían un núcleo. Hoy en día encontramos procesadores con hasta 10 núcleos o más, y si hablamos de GPUs…, todavía muchos más.

Se puede ejecutar una instrucción por núcleo a la vez, con lo que si tengo varios núcleos podré ejecutar tantas instrucciones a la vez como núcleos tenga. Estaría procesando instrucciones en paralelo con un único procesador, anteriormente, antes de que existiera la CPU multicore, para realizar procesamiento paralelo estábamos obligados a utilizar varias CPUs. Y como podrás imaginarte, el procesamiento paralelo aumenta considerablemente el rendimiento.

Los Hilos (Thread)

¿Y los hilos?, ¿qué son y para que sirven? Un hilo puede ser definido como el flujo de instrucciones para realizar una tarea. Recordemos que un núcleo puede ejecutar sólo una instrucción a la vez.

De esta forma, si tuviéramos un núcleo con dos hilos, podríamos ejecutar dos tareas simultáneamente. En realidad, como ya he dicho varias veces, sólo ejecutamos una instrucción por núcleo a la vez, entonces, ¿Cómo podemos ejecutar dos tareas simultáneamente con dos hilos y un solo núcleo? Las tareas no se ejecutan simultáneamente, el núcleo va alternando las instrucciones que ejecuta de uno y otro hilo, y como lo hace a gran velocidad, tenemos la sensación de que ambos hilos se ejecutan a la vez, que ambas tareas se están ejecutando al mismo tiempo, aunque en realidad no es así.

Lo descrito en el párrafo anterior implementa la opción de multitarea por hardware, o si se prefiere, multihilo. Sin embargo, para aprovechar esta característica, el programa que ejecute las tareas tiene que haber sido programado haciendo uso de esta característica.

El multihilo puede activarse y desactivarse desde la BIOS.

Y un último apunte sobre este tema: Quizás estés pensando que tú ya tenías multitarea desde hace mucho tiempo, con tu ordenador de toda la vida, con un núcleo y un hilo. Vale, esa multitarea era por software, y sigue estando hoy en día. El sistema operativo se ocupa de distribuir el tiempo de procesador entre las distintas tareas de acuerdo a unas prioridades, pero de este tema ya hablaremos cuando tratemos la gestión de procesos por parte del Sistema Operativo.

Rendimiento del procesador

Una vez conocemos la arquitectura básica de la CPU y entendemos lo que significa que sea single-core o multi-core, inmediatamente pasamos a preguntarnos como de buena es la CPU de nuestro ordenador. Y la respuesta que habitualmente damos está directamente asociada al número de núcleos de nuestro procesador, a más núcleos mejor CPU.

Pues bien, aunque es cierto que cuantos más núcleos tenga nuestro procesador mejor rendimiento tendrá, no es este el único factor que hay que tener en cuenta. Para medir el rendimiento de una CPU emplearemos tres variables:

  1. Velocidad de reloj (GHz): Determina el número de ciclos por segundo con los que trabaja cada núcleo. A mayor velocidad, más instrucciones podrán procesarse por unidad de tiempo y lógicamente, tendremos mayor rendimiento.
  2. Número de bits que gobierna en cada ciclo de reloj: Condiciona el tamaño de instrucción de nuestro procesador. A mayor número de bits, mayor podrá ser el tamaño de la instrucción y mejor el rendimiento.
  3. Número de núcleos: Cada núcleo es en realidad un procesador, es decir, un componente que puede procesar instrucciones. A mayor número de núcleos, más instrucciones podremos procesar y mayor será el rendimiento.

Estos son los tres parámetros fundamentales a emplear cuando hablamos del rendimiento de una CPU, pero para poder comparar procesadores entre si, habría que definir la prueba a realizar. Normalmente esta gira en torno al tiempo que lleva al procesador la ejecución de un conjunto de instrucciones determinadas.

Los Sistemas Operativos suelen proveer información del rendimiento de la CPU del sistema, si bien no dan ningún número concreto, sino las características antes mencionadas. En Windows, puedes ver el rendimiento de la CPU del equipo en el “Administrador de tareas”, en la pestaña rendimiento.

Rendimiento de la CPU
Rendimiento de la CPU

La ley de Moore

La ley de Moore no es realmente una ley sino más bien una especie de predicción, que en su momento hizo Gordon Moore, uno de los fundadores de Intel, allá por 1965. Y que con el tiempo se ha demostrado una predicción bastante certera, quizás de ahí su fama.

Esta ley establece que más o menos cada dos años se duplica el número de transistores integrados en los microprocesadores. Dicho así no parece muy importante, pero si recordamos del post de “Generaciones de ordenadores”, en la segunda generación, lo que había supuesto la sustitución de las válvulas de vacío por los transistores, entenderemos la importancia vital de estos. Básicamente, cuantos más transistores tengamos más capacidad de computación, de tal forma que el número de transistores integrados en un procesador es un indicador de la potencia de este. Así que la Ley de Moore nos viene a indicar como va a evolucionar la potencia de los procesadores, es decir, la capacidad de computación.

En la siguiente figura puede observarse una gráfica que ilustra la ley de Moore.

La ley de Moore
La ley de Moore

No obstante, aunque las capacidades de miniaturización han mejorado tantísimo, el colocar todos estos componentes cada vez más juntos nos genera mucho más calor en el componente. Esto se ha venido solventando mejorando la disipación de la temperatura en los procesadores, pero tiene un límite físico que se estima alcanzaría en torno al 2026.

Aquí os dejo un enlace a un video muy chulo en el que, de forma gráfica y animada, puede observarse como ha ido creciendo a lo largo de los años, el número de transistores integrados en los microprocesadores. Desde los 40 de 1945 hasta los 23.000 millones de 2019.

Moore´s Law vs actual transistor count: https://www.youtube.com/watch?v=7uvUiq_jTLM

El efecto de la Temperatura

En el apartado anterior hablaba de la Ley de Moore, que daba buena cuenta del increíble desarrollo de las técnicas de fabricación de circuitos integrados, que hoy en día nos permiten integrar hasta 23.000 millones de transistores en un diminuto chip. Pero claro, hay que preguntarse, ¿hasta dónde podemos llegar?, ¿no hay límites para la miniaturización?

Lógicamente, en estos circuitos integrados que cada vez incorporan más componentes, la distancia entre estos es cada vez menor, y las pistas que los conectan están cada vez más juntas. La única manera de colocar más componentes en el mismo espacio es apretarlos un poco más.

En estas condiciones, el gran número de componentes y el aumento de la frecuencia de trabajo del procesador, hacen que se origine más calor que habrá que disipar. Además, la disminución de las distancias entre los componentes, dificulta la disipación de dicho calor y hace que pueda llegar a alcanzarse la temperatura máxima que soporta el microprocesador sin llegar a la ruptura.

La solución: aumentar la eficiencia de la disipación. Los ordenadores actuales logran esta mejora en la disipación del calor de la CPU, acoplando a esta un disipador y un ventilador. Para poner en contacto físico el disipador y el procesador, se utiliza un gel conductor térmico que favorece el traspaso del calor. Además, es habitual que la caja del ordenador incorpore otro ventilador que algo ayuda en estos menesteres.

En los microprocesadores antiguos, que no tenían el nivel de integración de los actuales, el calor generado podría disiparse a temperatura ambiente, sencillamente utilizando el ventilador de la caja del ordenador. En la imagen siguiente pueden apreciarse ambos casos:

Disipación del calor
Disipación del calor

Quien quiera profundizar en estos temas puede investigar sobre las prácticas de overclocking y descubrir como influye la frecuencia de trabajo en el calor generado y las necesidades de disipación consecuentes.

Acceso a Memoria

Podemos disponer de un procesador capaz de trabajar a muy alta velocidad y procesar muchas instrucciones en muy poco tiempo, pero al final esas instrucciones estarán en la memoria RAM, así como los datos que necesitan las mismas. Entonces, nos encontramos que para tener un buen rendimiento en nuestro equipo no nos llega sólo con una excelente CPU, sino que la velocidad de acceso a la Memoria es otro factor determinante.

Los programas, que al final son los que contienen las instrucciones que vamos a ejecutar, se encuentran almacenados en el disco duro, en la memoria secundaria o permanente. Pero el tiempo de acceso a esta memoria es muy alto, y si la CPU tuviera que ir a leer los programas y los datos al disco duro para ejecutarlos, se ralentizaría muchísimo y bajaría considerablemente el rendimiento. Es por ello, que cuando vamos a ejecutar un programa, lo primero que se hace es cargarlo en la memoria RAM, cuyo acceso por la CPU es considerablemente más rápido que al disco duro.

Pero como sabemos, la RAM es una memoria volátil, no es permanente, tenemos que estar alimentándola continuamente para que no pierda los datos almacenados en ella. Por otro lado, el disco duro es más barato y tiene más capacidad de almacenamiento que la RAM. A poco que tengamos una cantidad razonable de programas, nos resultará imposible tener todos los programas al mismo tiempo en la RAM. Ambas circunstancias hacen que almacenemos los programas y los datos en el disco duro cuando ya no vayamos a usarlos, y así guardar los datos de manera permanente.

Conexión básica de los elementos

Como hemos visto, el procesador va a usar la memoria RAM por ser más rápida que el disco duro. Pero a parte de la velocidad de la memoria, también es determinante en el acceso a los datos la conexión de la CPU con esta memoria.

Los dos elementos, la RAM y el procesador, están en la placa base, el primero conectado a través de las ranuras de la RAM y el segundo a través del zócalo de la CPU. Para facilitar la conexión entre ambos, se colocan muy próximos en la placa base, y se conectan con las denominadas trazas, que son como diminutos cables integrados en la placa base, que constituyen los buses.

Sin embargo, esta conexión CPU – RAM, no es directa. La placa base incorpora un chip, conocido como Northbridge (Puente norte) que actúa intermediando en las comunicaciones entre la CPU y la memoria, facilitando la tarea a la primera.

Las conexiones entre la CPU, el Northbridge y la RAM, se conocen como el bus frontal, que se compone de dos buses: el datos y el de direcciones. Por el primero se comunican todos los datos y programas, mientras que por el segundo se indica la dirección de la memoria a la que se quiere acceder.

 El tráfico del bus frontal es tan intenso que el Northbridge normalmente incorpora un disipador para poder disipar el exceso de temperatura. Aquí dejo dos imágenes, una con el disipador sin que pueda verse el chip, y la otra con el disipador retirado donde se aprecia el chip.

Disipación de calor en el chip Northbridge
Disipación de calor en el chip Northbridge

La CPU cuenta con otro chip, el Southbridge (Puente sur) que intermedia en las comunicaciones de esta con otros componentes de expansión, entre ellos el disco duro. Ambos chips de intermediación, Northbridge y Southbridge, son conocidos con el chipset.

La GPU

Hasta este punto hemos hablado de la CPU como el cerebro del ordenador, y quizás, se haya podido sacar la conclusión de que es el único componente con capacidad de procesamiento, es decir, de ejecutar instrucciones. Pues bien, también la GPU (Graphics process unit) es capaz de ejecutar instrucciones. En realidad, se trata de un procesador especializado en el renderizado, en el dibujo de gráficos.

Aquí te dejo una imagen de una GPU, que como puedes apreciar es idéntica a una CPU, prácticamente sólo puedes adivinar que se trata de una GPU por la palabra “GRAPHICS” escrita sobre ella:

La GPU
La GPU

Inicialmente, la GPU aparece como un coprocesador integrado en la CPU para liberar a esta de la alta carga de computación que suponía el renderizado de imágenes. El asunto era que, con la evolución tan increíble de los gráficos, especialmente en los juegos, el proceso de renderizado se había convertido en el que más capacidad de computación requería con diferencia, por lo que se optó por colocar un coprocesador en la CPU, dedicado a este menester.

Hoy en día, encontramos GPUs integradas en CPUs y también GPUs independientes, actuando como procesadores completos. La captura de pantalla que se muestra abajo, es del administrador de tareas en un portátil de gama media, donde puede apreciarse la “GPU 0” y la “GPU 1”. La primera integrada en la CPU del ordenador y la segunda es un procesador independiente en la tarjeta gráfica.

GPUs del ordenador
GPUs del ordenador

Acceso a la memoria

Lógicamente la GPU, como buen procesador que es, necesita instrucciones y datos, los cuales va a buscar a la memoria RAM. Y aquí, nos encontramos todo tipo de arquitecturas:

  • Memoria dedicada: La GPU cuenta con su propia RAM para ella solita. Es lo habitual en las tarjetas de video modernas, que incluyen GPU y RAM.
  • Memoria del Sistema: En el otro extremo, tenemos las GPUs que comparten con la CPU la RAM del sistema. Esta situación es lo más habitual para las GPUs, coprocesadores integrados en la CPU.
  • Uso de ambas memorias: Como no podría ser de otra forma, también nos encontramos con la situación intermedia. Algunas GPUs disponen de una memoria limitada que utilizan para las tareas más urgentes, disminuyendo la latencia que tendrían si sólo funcionaran con la RAM del Sistema.

Diferencias entre una CPU y una GPU

Las CPUs están diseñadas para funcionar a altas frecuencias de reloj e integran unos pocos núcleos, mientras que las GPUs funcionan a velocidades sensiblemente más bajas pero tienen centenares de núcleos. Algo así como lo que muestro en la siguiente figura:

CPU vs GPU
CPU vs GPU

Los fabricantes de GPUs, además diseñan sus núcleos pensando en que puedan ejecutar la mayor cantidad de cálculos simultáneamente.

Otros usos de las GPUs

El gran número de núcleos de los que disponen las GPUs , está haciendo que estas se empleen para otras funciones distintas del tratamiento gráfico. La alta capacidad de computo las hace idóneas para aplicaciones como la inteligencia artificial o la minería de criptomonedas.

Te dejo aquí un gráfico en el que puedes apreciar la subida de precios de este componente durante el boom de las criptomonedas:

Subida de los precios de las GPUs
Subida de los precios de las GPUs

Para aquellos que queráis profundizar en este tema, os recomiendo que investiguéis sobre los CUDA Core de Nvidia y los procesadores Stream de AMD.

NOTA:

Este post es parte de la colección “Arquitectura de Ordenadores” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.