Un procesador multinúcleo ( MCP ) es un microprocesador en un solo circuito integrado (CI) con dos o más unidades centrales de procesamiento (CPU) separadas, llamadas núcleos para enfatizar su multiplicidad (por ejemplo, núcleo dual o núcleo cuádruple ). Cada núcleo lee y ejecuta instrucciones de programa , [1] específicamente instrucciones de CPU ordinarias (como agregar, mover datos y bifurcar). Sin embargo, el MCP puede ejecutar instrucciones en núcleos separados al mismo tiempo, lo que aumenta la velocidad general para programas que admiten subprocesos múltiples u otras técnicas de computación paralela . [2] Los fabricantes generalmente integran los núcleos en una sola matriz de CI , conocida como multiprocesador de chip (CMP), o en múltiples matrices en un solo paquete de chip . A partir de 2024, los microprocesadores utilizados en casi todas las computadoras personales nuevas son multinúcleo.
Un procesador multinúcleo implementa el multiprocesamiento en un único paquete físico. Los diseñadores pueden acoplar núcleos en un dispositivo multinúcleo de forma estrecha o flexible. Por ejemplo, los núcleos pueden o no compartir cachés y pueden implementar métodos de comunicación entre núcleos mediante paso de mensajes o memoria compartida . Las topologías de red comunes que se utilizan para interconectar núcleos incluyen bus , anillo , malla bidimensional y barra transversal . Los sistemas multinúcleo homogéneos incluyen solo núcleos idénticos; los sistemas multinúcleo heterogéneos tienen núcleos que no son idénticos (por ejemplo, big.LITTLE tiene núcleos heterogéneos que comparten el mismo conjunto de instrucciones , mientras que las unidades de procesamiento acelerado AMD tienen núcleos que no comparten el mismo conjunto de instrucciones). Al igual que con los sistemas de un solo procesador, los núcleos en sistemas multinúcleo pueden implementar arquitecturas como VLIW , superscalar , vector o multithreading .
Los procesadores multinúcleo se utilizan ampliamente en muchos dominios de aplicación, incluidos los de propósito general , los integrados , las redes , el procesamiento de señales digitales (DSP) y los gráficos (GPU). El número de núcleos llega incluso a docenas, y en el caso de chips especializados, más de 10 000 [3], y en supercomputadoras (es decir, clústeres de chips), el número puede superar los 10 millones (y en un caso, hasta 20 millones de elementos de procesamiento en total, además de los procesadores host). [4]
La mejora del rendimiento que se obtiene con el uso de un procesador multinúcleo depende en gran medida de los algoritmos de software utilizados y de su implementación. En particular, las posibles ganancias están limitadas por la fracción del software que puede ejecutarse en paralelo simultáneamente en varios núcleos; este efecto se describe mediante la ley de Amdahl . En el mejor de los casos, los llamados problemas vergonzosamente paralelos pueden generar factores de aceleración cercanos al número de núcleos, o incluso más si el problema se divide lo suficiente para que quepa en la memoria caché de cada núcleo, evitando el uso de la memoria principal del sistema, que es mucho más lenta. Sin embargo, la mayoría de las aplicaciones no se aceleran tanto a menos que los programadores inviertan esfuerzo en refactorizarlas . [5]
La paralelización del software es un tema de investigación importante y en curso. La cointegración de aplicaciones multiprocesador proporciona flexibilidad en el diseño de la arquitectura de red. La adaptabilidad dentro de los modelos paralelos es una característica adicional de los sistemas que utilizan estos protocolos. [6]
En el mercado de consumo, los procesadores de doble núcleo (es decir, microprocesadores con dos unidades) comenzaron a ser comunes en las computadoras personales a fines de la década de 2000. [7] Los procesadores de cuatro núcleos también se adoptaron en esa época para sistemas de gama alta antes de convertirse en estándar. A fines de la década de 2010, los procesadores hexa-core (seis núcleos) comenzaron a ingresar al mercado general [8] y desde principios de la década de 2020 han superado a los procesadores de cuatro núcleos en muchos espacios. [9]
Los términos multinúcleo y doble núcleo se refieren más comúnmente a algún tipo de unidad central de procesamiento (CPU), pero a veces también se aplican a procesadores de señales digitales (DSP) y sistemas en un chip (SoC). Los términos se utilizan generalmente solo para referirse a microprocesadores multinúcleo que se fabrican en la misma matriz de circuito integrado ; las matrices de microprocesadores separadas en el mismo encapsulado generalmente se denominan con otro nombre, como módulo multichip . Este artículo utiliza los términos "multinúcleo" y "doble núcleo" para CPU fabricadas en el mismo circuito integrado, a menos que se indique lo contrario.
A diferencia de los sistemas multinúcleo, el término multiCPU se refiere a múltiples unidades de procesamiento físicamente separadas (que a menudo contienen circuitos especiales para facilitar la comunicación entre sí).
Los términos "multinúcleo" y "multinúcleo masivo" se utilizan a veces para describir arquitecturas multinúcleo con una cantidad especialmente alta de núcleos (decenas a miles [10] ). [11]
Algunos sistemas utilizan muchos núcleos de microprocesadores blandos colocados en un único FPGA . Cada "núcleo" puede considerarse un " núcleo de propiedad intelectual de semiconductores " así como un núcleo de CPU. [ cita requerida ]
A medida que la tecnología de fabricación mejora, reduciendo el tamaño de las puertas individuales, los límites físicos de la microelectrónica basada en semiconductores se han convertido en una preocupación importante en el diseño. Estas limitaciones físicas pueden causar problemas significativos de disipación de calor y sincronización de datos. Se utilizan otros métodos para mejorar el rendimiento de la CPU. Algunos métodos de paralelismo a nivel de instrucción (ILP), como la segmentación superescalar , son adecuados para muchas aplicaciones, pero son ineficientes para otras que contienen código difícil de predecir. Muchas aplicaciones se adaptan mejor a los métodos de paralelismo a nivel de subproceso (TLP), y se utilizan comúnmente varias CPU independientes para aumentar el TLP general de un sistema. Una combinación de mayor espacio disponible (debido a procesos de fabricación refinados) y la demanda de mayor TLP condujo al desarrollo de CPU de múltiples núcleos.
Varios motivos comerciales impulsan el desarrollo de arquitecturas multinúcleo. Durante décadas, fue posible mejorar el rendimiento de una CPU reduciendo el área del circuito integrado (CI), lo que redujo el costo por dispositivo en el CI. Alternativamente, para la misma área del circuito, se podían usar más transistores en el diseño, lo que aumentaba la funcionalidad, especialmente para arquitecturas de computación con conjuntos de instrucciones complejos (CISC). Las velocidades de reloj también aumentaron en órdenes de magnitud en las décadas de finales del siglo XX, desde varios megahercios en la década de 1980 a varios gigahercios a principios de la década de 2000.
A medida que se redujo el ritmo de mejora de la velocidad de reloj, se ha buscado un mayor uso de la computación paralela en forma de procesadores multinúcleo para mejorar el rendimiento general del procesamiento. Se utilizaron múltiples núcleos en el mismo chip de CPU, lo que podría conducir a mejores ventas de chips de CPU con dos o más núcleos. Por ejemplo, Intel ha producido un procesador de 48 núcleos para la investigación en computación en la nube; cada núcleo tiene una arquitectura x86 . [12] [13]
Dado que los fabricantes de computadoras han implementado desde hace mucho tiempo diseños de multiprocesamiento simétrico (SMP) utilizando CPU discretas, los problemas relacionados con la implementación de una arquitectura de procesador multinúcleo y su soporte con software son bien conocidos.
Además:
Para seguir ofreciendo mejoras regulares de rendimiento para procesadores de uso general, fabricantes como Intel y AMD han recurrido a diseños multinúcleo, sacrificando menores costos de fabricación a cambio de un mayor rendimiento en algunas aplicaciones y sistemas. Se están desarrollando arquitecturas multinúcleo, pero también alternativas. Una opción especialmente fuerte para los mercados establecidos es la mayor integración de funciones periféricas en el chip.
La proximidad de múltiples núcleos de CPU en el mismo chip permite que el circuito de coherencia de caché funcione a una velocidad de reloj mucho más alta que la que es posible si las señales tienen que viajar fuera del chip. La combinación de CPU equivalentes en un solo chip mejora significativamente el rendimiento de las operaciones de espionaje de caché (alternativa: espionaje de bus ). En pocas palabras, esto significa que las señales entre diferentes CPU viajan distancias más cortas y, por lo tanto, esas señales se degradan menos. Estas señales de mayor calidad permiten enviar más datos en un período de tiempo determinado, ya que las señales individuales pueden ser más cortas y no necesitan repetirse con tanta frecuencia.
Suponiendo que el chip puede encajar físicamente en el encapsulado, los diseños de CPU multinúcleo requieren mucho menos espacio en la placa de circuito impreso (PCB) que los diseños SMP multichip . Además, un procesador de doble núcleo utiliza un poco menos de energía que dos procesadores de un solo núcleo acoplados, principalmente debido a la menor energía necesaria para impulsar señales externas al chip. Además, los núcleos comparten algunos circuitos, como la caché L2 y la interfaz con el bus frontal (FSB). En términos de tecnologías que compiten por el área disponible del chip de silicio, el diseño multinúcleo puede hacer uso de diseños probados de bibliotecas de núcleos de CPU y producir un producto con un menor riesgo de error de diseño que idear un nuevo diseño de núcleo más ancho. Además, agregar más caché sufre de rendimientos decrecientes.
Los chips multinúcleo también permiten un mayor rendimiento con un menor consumo de energía. Esto puede ser un factor importante en los dispositivos móviles que funcionan con baterías. Dado que cada núcleo de una CPU multinúcleo suele ser más eficiente energéticamente, el chip resulta más eficiente que si tuviera un único núcleo monolítico grande. Esto permite un mayor rendimiento con menos energía. Sin embargo, un desafío en esto es la sobrecarga adicional que supone escribir código en paralelo. [15]
Para maximizar el uso de los recursos informáticos que ofrecen los procesadores multinúcleo es necesario realizar ajustes tanto en la compatibilidad con el sistema operativo (OS) como en el software de aplicación existente. Además, la capacidad de los procesadores multinúcleo para aumentar el rendimiento de las aplicaciones depende del uso de múltiples subprocesos dentro de las aplicaciones.
La integración de un chip multinúcleo puede reducir el rendimiento de producción de chips. También son más difíciles de gestionar térmicamente que los diseños de núcleo único de menor densidad. Intel ha contrarrestado parcialmente este primer problema creando sus diseños de cuatro núcleos combinando dos núcleos duales en un solo chip con una memoria caché unificada, por lo que se pueden utilizar dos chips de núcleo dual cualesquiera en funcionamiento, en lugar de producir cuatro núcleos en un solo chip y requerir que los cuatro funcionen para producir una CPU de cuatro núcleos. Desde un punto de vista arquitectónico, en última instancia, los diseños de CPU única pueden hacer un mejor uso del área de superficie de silicio que los núcleos de multiprocesamiento, por lo que un compromiso de desarrollo con esta arquitectura puede conllevar el riesgo de obsolescencia. Finalmente, la potencia de procesamiento bruta no es la única limitación en el rendimiento del sistema. Dos núcleos de procesamiento que comparten el mismo bus de sistema y ancho de banda de memoria limitan la ventaja de rendimiento en el mundo real.
La tendencia en el desarrollo de procesadores ha sido hacia un número cada vez mayor de núcleos, ya que los procesadores con cientos o incluso miles de núcleos se vuelven teóricamente posibles. [16] Además, los chips multinúcleo combinados con multihilo simultáneo , memoria en chip y núcleos "heterogéneos" (o asimétricos) de propósito especial prometen mayores ganancias de rendimiento y eficiencia, especialmente en el procesamiento de aplicaciones multimedia, de reconocimiento y de redes. Por ejemplo, un núcleo big.LITTLE incluye un núcleo de alto rendimiento (llamado "big") y un núcleo de bajo consumo (llamado "LITTLE"). También existe una tendencia hacia la mejora de la eficiencia energética centrándose en el rendimiento por vatio con una gestión avanzada de la energía de grano fino o ultrafino y un escalado dinámico de voltaje y frecuencia (es decir, computadoras portátiles y reproductores multimedia portátiles ).
Los chips diseñados desde el principio para una gran cantidad de núcleos (en lugar de haber evolucionado a partir de diseños de un solo núcleo) a veces se denominan diseños de muchos núcleos , lo que enfatiza las diferencias cualitativas.
La composición y el equilibrio de los núcleos en la arquitectura multinúcleo muestran una gran variedad. Algunas arquitecturas utilizan un diseño de núcleo que se repite de forma consistente ("homogéneo"), mientras que otras utilizan una mezcla de diferentes núcleos, cada uno optimizado para una función diferente, " heterogénea ".
La forma en que se implementan e integran múltiples núcleos afecta significativamente tanto las habilidades de programación del desarrollador como las expectativas del consumidor sobre las aplicaciones y la interactividad en comparación con el dispositivo. [17] Un dispositivo publicitado como octa-core solo tendrá núcleos independientes si se publicita como True Octa-core o un estilo similar, en lugar de ser simplemente dos conjuntos de cuatro núcleos, cada uno con velocidades de reloj fijas. [18] [19]
El artículo "Los diseñadores de CPU debaten el futuro de los núcleos múltiples" de Rick Merritt, EE Times 2008, [20] incluye estos comentarios:
Chuck Moore [...] sugirió que las computadoras deberían ser como los teléfonos celulares, utilizando una variedad de núcleos especializados para ejecutar software modular programado por una interfaz de programación de aplicaciones de alto nivel.
[...] Atsushi Hasegawa, ingeniero jefe de Renesas , estuvo de acuerdo en general. Sugirió que el uso de muchos núcleos especializados que funcionan en conjunto en el teléfono celular es un buen modelo para futuros diseños de múltiples núcleos.
[...] Anant Agarwal , fundador y director ejecutivo de la empresa emergente Tilera , adoptó la opinión contraria. Dijo que los chips multinúcleo deben ser conjuntos homogéneos de núcleos de uso general para mantener la simplicidad del modelo de software.
Una versión desactualizada de una aplicación antivirus puede crear un nuevo hilo para un proceso de escaneo, mientras que su hilo GUI espera comandos del usuario (por ejemplo, cancelar el escaneo). En tales casos, una arquitectura multinúcleo es de poco beneficio para la aplicación en sí debido a que el hilo único hace todo el trabajo pesado y la incapacidad de equilibrar el trabajo de manera uniforme entre múltiples núcleos. La programación de código verdaderamente multihilo a menudo requiere una coordinación compleja de hilos y puede introducir fácilmente errores sutiles y difíciles de encontrar debido al entrelazamiento del procesamiento en datos compartidos entre hilos (ver seguridad de hilos ). En consecuencia, dicho código es mucho más difícil de depurar que el código de un solo hilo cuando se rompe. Se ha percibido una falta de motivación para escribir aplicaciones con hilos a nivel de consumidor debido a la relativa rareza de la demanda a nivel de consumidor de un uso máximo del hardware de la computadora. Además, las tareas en serie como la decodificación de los algoritmos de codificación de entropía utilizados en los códecs de video son imposibles de paralelizar porque cada resultado generado se utiliza para ayudar a crear el siguiente resultado del algoritmo de decodificación de entropía.
Dado el creciente énfasis en el diseño de chips multinúcleo, derivado de los graves problemas térmicos y de consumo de energía que plantea cualquier aumento significativo en las velocidades de reloj de los procesadores, es probable que la medida en que el software pueda ser multiproceso para aprovechar estos nuevos chips sea la mayor limitación para el rendimiento de las computadoras en el futuro. Si los desarrolladores no pueden diseñar software que aproveche al máximo los recursos proporcionados por los múltiples núcleos, entonces llegarán a un límite de rendimiento insuperable.
El mercado de las telecomunicaciones ha sido uno de los primeros en necesitar un nuevo diseño de procesamiento de paquetes en rutas de datos paralelas, debido a que se produjo una adopción muy rápida de estos procesadores de múltiples núcleos para la ruta de datos y el plano de control. Estas MPU van a reemplazar [21] a los procesadores de red tradicionales que se basaban en microcódigo propietario o picocódigo .
Las técnicas de programación paralela pueden beneficiarse directamente de múltiples núcleos. Algunos modelos de programación paralela existentes , como Cilk Plus , OpenMP , OpenHMPP , FastFlow , Skandium, MPI y Erlang , se pueden utilizar en plataformas de múltiples núcleos. Intel presentó una nueva abstracción para el paralelismo de C++ llamada TBB . Otros esfuerzos de investigación incluyen Codeplay Sieve System , Cray's Chapel , Sun's Fortress y X10 de IBM .
El procesamiento multinúcleo también ha afectado la capacidad del desarrollo de software computacional moderno. Los desarrolladores que programan en lenguajes más nuevos pueden encontrar que sus lenguajes modernos no admiten la funcionalidad multinúcleo. Esto requiere el uso de bibliotecas numéricas para acceder al código escrito en lenguajes como C y Fortran , que realizan cálculos matemáticos más rápido [ cita requerida ] que los lenguajes más nuevos como C# . MKL de Intel y ACML de AMD están escritos en estos lenguajes nativos y aprovechan el procesamiento multinúcleo. Equilibrar la carga de trabajo de la aplicación entre procesadores puede ser problemático, especialmente si tienen diferentes características de rendimiento. Existen diferentes modelos conceptuales para abordar el problema, por ejemplo, utilizando un lenguaje de coordinación y bloques de construcción de programas (bibliotecas de programación o funciones de orden superior). Cada bloque puede tener una implementación nativa diferente para cada tipo de procesador. Los usuarios simplemente programan utilizando estas abstracciones y un compilador inteligente elige la mejor implementación según el contexto. [22]
La gestión de la concurrencia adquiere un papel central en el desarrollo de aplicaciones paralelas. Los pasos básicos para el diseño de aplicaciones paralelas son:
Por otro lado, en el lado del servidor , los procesadores multi-core son ideales porque permiten que muchos usuarios se conecten a un sitio simultáneamente y tengan hilos de ejecución independientes. Esto permite que los servidores web y de aplicaciones tengan un rendimiento mucho mejor .
Los proveedores pueden conceder licencias para algunos programas informáticos "por procesador", lo que puede generar ambigüedades, ya que un "procesador" puede estar formado por un solo núcleo o por una combinación de núcleos.
La informática integrada opera en un área de la tecnología de procesadores distinta a la de los PC "convencionales". Aquí también se aplican los mismos impulsos tecnológicos hacia los procesadores multinúcleo. De hecho, en muchos casos la aplicación se adapta "naturalmente" a las tecnologías multinúcleo, si la tarea se puede repartir fácilmente entre los diferentes procesadores.
Además, el software integrado suele desarrollarse para una versión de hardware específica, lo que hace que los problemas de portabilidad del software , código heredado o soporte para desarrolladores independientes sean menos críticos que en el caso de la informática empresarial o de PC. Como resultado, es más fácil para los desarrolladores adoptar nuevas tecnologías y, como resultado, hay una mayor variedad de arquitecturas y proveedores de procesamiento multinúcleo.
A partir de 2010 , los procesadores de red[actualizar] multinúcleo se han convertido en algo común, y empresas como Freescale Semiconductor , Cavium Networks , Wintegra y Broadcom fabrican productos con ocho procesadores. Para el desarrollador de sistemas, un desafío clave es cómo explotar todos los núcleos de estos dispositivos para lograr el máximo rendimiento de red a nivel de sistema, a pesar de las limitaciones de rendimiento inherentes a un sistema operativo de multiprocesamiento simétrico (SMP). Empresas como 6WIND proporcionan software de procesamiento de paquetes portátil diseñado para que el plano de datos de red se ejecute en un entorno de ruta rápida fuera del sistema operativo del dispositivo de red. [25]
En el procesamiento de señales digitales se aplica la misma tendencia: Texas Instruments tiene el TMS320C6488 de tres núcleos y el TMS320C5441 de cuatro núcleos, Freescale el MSC8144 de cuatro núcleos y el MSC8156 de seis núcleos (y ambos han declarado que están trabajando en sucesores de ocho núcleos). Entre las novedades se incluyen la familia Storm-1 de Stream Processors, Inc. con 40 y 80 ALU de propósito general por chip, todas programables en C como motor SIMD y Picochip con 300 procesadores en una sola matriz, centrados en aplicaciones de comunicación.
En la computación heterogénea , donde un sistema utiliza más de un tipo de procesador o núcleo, las soluciones multinúcleo son cada vez más comunes: Xilinx Zynq UltraScale+ MPSoC tiene un ARM Cortex-A53 de cuatro núcleos y un ARM Cortex-R5 de dos núcleos. Se están utilizando soluciones de software como OpenAMP para facilitar la comunicación entre procesadores.
Los dispositivos móviles pueden utilizar la arquitectura ARM big.LITTLE .
La investigación y el desarrollo de procesadores multinúcleo a menudo comparan muchas opciones y se desarrollan pruebas comparativas para facilitar dichas evaluaciones. Las pruebas comparativas existentes incluyen SPLASH-2, PARSEC y COSMIC para sistemas heterogéneos. [49]
Los teléfonos inteligentes Galaxy funcionan con procesadores Octa-core (2.3GHz Quad + 1.6GHz Quad) o Quad-core (2.15GHz + 1.6GHz Dual)