Los núcleos o cores de una CPU son un concepto que mencionamos continuamente a la hora de hablar de sus especificaciones. Más aún cuando en los últimos años hemos visto un gran incremento en su relevancia y cómo cada vez los procesadores incluyen más. ¿Pero qué es realmente el núcleo de un procesador y cuál es su importancia? Es algo que os aclararemos en este artículo. ¡Comenzamos!
Concurrencia frente a paralelismo: la ilusión de la ejecución en paralelo
Cuando pensamos en el funcionamiento de un PC a nivel de usuario, se nos viene claramente a la cabeza la posibilidad de ejecutar varias tareas a la vez, esto es, de forma paralela. Esta idea viene siendo así desde hace décadas, cuando solo encontrábamos un núcleo en un procesador. La realidad es que una CPU ejecuta cada proceso de manera concurrente, y no paralela.
Para explicar esto debemos saber dos cosas: primero, asumiremos (para simplificar) que cada programa de nuestro ordenador será un único proceso distinto; segundo, recordaremos el hecho de que cada proceso va ejecutando sus instrucciones de manera secuencial, una a una, y no de manera paralela. Aclarado esto, lo que también debemos saber es que en una CPU solo se puede ejecutar un proceso a la vez. Entonces, no hay ninguna forma de paralelismo en la ejecución.
Precisamente, lo que permite esta ejecución pseudoparalela que nosotros notamos es la concurrencia, que básicamente significa que haya varias tareas en ejecución en períodos de tiempo solapados, de manera que el tiempo se reparte entre varios procesos:
Vamos a plantearte esta idea de manera gráfica, imaginando un sistema que ejecuta 3 procesos, y dando una visión más o menos ideal de lo que sería una ejecución paralela frente a una concurrente:
Se ve clara la idea: en cada instante de tiempo solo habrá un proceso en ejecución, pero lo dividiremos en trozos tan pequeños que a ojos del usuario en realidad se estarán ejecutando a la vez.
Precisamente, en los sistemas operativos siempre hay un planificador de procesos que es el que se encarga de dividir este tiempo de manera acorde a las necesidades del usuario y de la máquina, aunque es algo que se escapa de lo que queremos explicar en este artículo.
Los núcleos traen el paralelismo
Lo que te acabamos de comentar se aplica para una CPU mononúcleo, algo que ya prácticamente no vemos en ordenadores. Y es que la llegada del multinúcleo trae consigo una forma de paralelismo real. Pero antes de comentar eso, entremos en materia: ¿qué es exactamente un núcleo de un procesador?
Básicamente, la idea del núcleo nace de multiplicar diversas partes destinadas a la lógica para así tener varios procesadores en uno. Así, en un solo paquete tendríamos lo que se comporta como varias CPUs separadas, lo cual se combina mediante técnicas de programación paralela para conseguir un paralelismo real de los programas, o simplemente para poder ejecutar varios programas distintos a la vez. Naturalmente, muchas partes serán compartidas, y tal y como os mostramos en el diagrama básico de arriba podemos compartir algunos niveles de caché, por poner un ejemplo.
Esto lo implementó por primera vez IBM con su POWER4 en 1996, y le siguieron AMD e Intel en 2004 y 2005 respectivamente, e inicialmente los núcleos se parecían bastante al concepto que os planteamos aquí, pareciendo más «CPU pegadas» que otra cosa. Hoy en día se ha avanzado mucho en el diseño de los procesadores, y la composición de las partes de cada core ha variado mucho.
Por ejemplo, en los últimos procesadores AMD Ryzen, podemos encontrarnos con núcleos en regiones físicas separadas dentro del chip, conocidas como ‘chiplets’, las cuales se interconectan mediante el bus Infinity Fabric.
Multithreading: dando dos núcleos lógicos a cada núcleo físico del procesador
Lo que muchos también habréis visto, además del número de núcleos del procesador, es su «número de hilos«, una cantidad que si es el doble del número de núcleos entonces indica que la CPU cuenta con HyperThreading (esto es un nombre comercial de Intel, en AMD se llamará Simultaneous Multithreading o SMT). Usaremos el concepto de multithreading (algunos libros en español lo traducen a «multihilamiento») para no entrar en nombres comerciales.
Pues bien, lo que el multithreading implica es básicamente una mejora por la cual la CPU puede mantener el estado de dos hilos de ejecución (threads) distintos, para así alternar entre uno y otro de una manera muchísimo más rápida de lo normal.
Para entender esta definición, también debéis saber que los hilos de ejecución o subprocesos son una especie de divisiones de un proceso que trabajan con una independencia parecida a la que tienen dos procesos diferentes, pero compartiendo recursos. Por ejemplo, un procesador de textos puede tener un hilo para recibir la entrada del usuario, otro para mostrarlo formateado en pantalla, otro para el autoguardado… Con el multithreading, un solo núcleo físico del procesador alberga dos de estos hilos (incluso si son de procesos diferentes) para acelerar la ejecución.
¿Y por qué se acelera la ejecución? Con las definiciones que hemos visto, será fácil entender que esta tecnología no otorga un paralelismo real dentro del núcleo, pues seguirá habiendo tan solo un proceso en ejecución a la vez. Pero la cuestión es que hará el cambio entre esos hilos varios órdenes de magnitud más rápido.
El hecho de mantener dos contextos de ejecución en un mismo núcleo y que el cambio entre ellos sea extremadamente rápido implica que se aprovechan mucho mejor los huecos «libres» en la ejecución. Es decir, esos momentos en los que un núcleo estaría esperando a que el subproceso haga algo o a alguna operación de entrada/salida. Con multithreading, ese tiempo se aprovecha para ejecutar el otro subproceso.
¡Seguro que te interesa esta comparativa sobre 6 cores vs 8 cores.
¿Qué mejora de rendimiento da el multithreading?
El número «mágico» del multithreading, se podría decir, es el 30%. Y es que normalmente la mejora media de rendimiento que permite ronda ese valor, no es algo que se mantenga siempre ni mucho menos, pero sí se puede decir que la mejora rondará el 30%. También nos sirve para ver que efectivamente las diferencias serán más modestas duplicando el número de hilos del procesador que el de núcleos, de tal forma que 6 núcleos y 6 hilos se suelen comportar de forma parecida o mejor que 4 núcleos y 8 hilos.
Todo dependerá también de cómo lo gestione el sistema operativo. Pensemos en una implementación primitiva: el SO vería cada núcleo lógico como una CPU distinta, y a la hora de planificarlos podría cometer el error (por desconocimiento) de darle dos procesos a un único núcleo físico, que está viendo como si fuesen 2 CPUs.
Afortunadamente, todos los sistemas están muy evolucionados y no cometen este tipo de errores, y precisamente en el administrador de tareas de Windows podréis ver cómo se identifican perfectamente vuestros núcleos físicos y lógicos.
¿Importa el número de núcleos hoy en día? La difícil elección entre el rendimiento mononúcleo y multinúcleo
En la práctica, no se puede afirmar con rotundidad que una CPU sea mejor que otra por tener un número mayor de núcleos. Pensándolo de manera intuitiva, ¿es mejor tener varios núcleos lentos o uno único especialmente rápido? Aquí entra en juego el rendimiento mononúcleo de cada procesador, que es básicamente lo que puede conseguir haciendo uso de tan solo uno de sus núcleos.
Además, debemos tener en cuenta que no todas las aplicaciones están pensadas para hacer uso de todos los núcleos del ordenador. Muchos programas de productividad no lo hacen, y lo mismo solía ocurrir con los juegos, aunque ahora por fin se ve una tendencia en la que empiezan a aprovechar mucho mejor todos los núcleos disponibles. El área típica donde la cantidad de cores es clave es la renderización por CPU, tanto para edición de vídeo, diseño 3D, etc, que casi siempre está pensada para aprovechar todos los núcleos disponibles.
Situación actual
Dentro de este contexto, durante los últimos años hubo un gran debate sobre cuáles son las CPUs más idóneas, teniendo en cuenta que AMD solía ofrecer un mayor número de núcleos con un rendimiento más pobre, mientras que en Intel ocurría lo contrario. Esto fue así particularmente con la llegada de los primeros Ryzen en 2017, que llevaron los 6 y 8 núcleos a precios muy bajos mientras que Intel no pasaba de 4.
En los 4 años que han pasado desde entonces hemos visto cómo AMD mejoraba drásticamente sus rendimientos mononúcleo mientras que Intel se ponía a la par en número de núcleos. Por ello, hoy en día alcanzar una elección de compromiso entre rendimiento mononúcleo y multinúcleo no es precisamente un problema, y lo realmente importante es el número de núcleos a elegir.
La recomendación generalizada que hay a este respecto es que lo mejor es apostar por una CPU de al menos 6 núcleos y 12 hilos si vamos a jugar, para aprovechar mejor el potencial de los últimos títulos que están saliendo, especialmente ya que estas CPU se encuentran en un segmento de precio que hace unos años correspondería a 4 núcleos y 4 hilos. Ya se recomienda ir de los 8 para arriba para aquellos usos de CPU más intensivos, y algunos también lo aconsejan para equipos gaming con un presupuesto holgado.
Palabras finales y conclusión sobre el núcleo de un procesador
El núcleo de un procesador es sin duda uno de los conceptos más importantes a tener en cuenta hoy en día. Estos nos permiten tener algo parecido a «varias CPUs en una», al multiplicar determinadas partes lógicas del procesador, para así conseguir un paralelismo en la ejecución que es imposible en un sistema mononúcleo. Los beneficios en rendimiento que esto habilita se han ido demostrando a lo largo de los años, y hoy en día es inconcebible una CPU mononúcleo salvo para alguna excepción concreta de muy bajo nivel.
Además, cada núcleo físico se puede dividir en dos núcleos lógicos gracias a las tecnologías de multithreading, como Intel HyperThreading o AMD Simultaneous Multithreading. Lo que estas consiguen es un intercambio extremadamente rápido entre dos subprocesos, ya que guardan el estado de cada uno de ellos, de forma que mientras uno está inactivo, se cambia muy rápidamente al otro, consiguiendo una mejora importante del rendimiento.
Te recomendamos la lectura de algunos de nuestros artículos sobre hardware:
Y si os interesa saber cuántos núcleos se deben tener hoy en día, la referencia para equipos «normales» son indudablemente los 4 núcleos, pero para equipos gaming ya pueden ser más que aprovechables los 6 núcleos, y en algunas aplicaciones de productividad o en tareas de renderizado incluso más. Eso sí, hay que tener siempre presentes dos cuestiones:
- No todos los programas aprovecharán lo suficientemente bien el tener varios núcleos, o directamente no lo harán.
- El rendimiento que tenga cada núcleo es algo muy importante, de tal forma que una CPU de 4 núcleos con un buen rendimiento mononúcleo podría ser mejor en todos los casos que otra de 6 u 8 que tenga rendimientos mononúcleos pobres. Por fortuna las últimas CPUs de Intel y AMD están muy bien posicionadas en este aspecto.
Esperamos que este artículo te haya servido para aclarar el concepto de núcleo de un procesador. No dudes dejarnos cualquier duda o sugerencia en los comentarios.