Un procesador multinúcleo es un microprocesador en un único circuito integrado con dos o más unidades de procesamiento separadas , llamadas núcleos (por ejemplo, de doble núcleo o de cuatro núcleos ), cada una de las cuales lee y ejecuta instrucciones de programa . [1] Las instrucciones son instrucciones ordinarias de la CPU (como agregar, mover datos y bifurcar), pero un único procesador puede ejecutar instrucciones en núcleos separados al mismo tiempo, lo que aumenta la velocidad general de los programas que admiten subprocesos múltiples u otras técnicas de computación paralela . [2] Los fabricantes suelen integrar los núcleos en un único chip de circuito integrado (conocido como multiprocesador de chip o CMP) o en varios troqueles en un solo paquete de chip . Los microprocesadores que se utilizan actualmente en casi todos los ordenadores personales 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 de múltiples núcleos de manera firme o suelta. Por ejemplo, los núcleos pueden compartir o no cachés y pueden implementar métodos de comunicación entre núcleos de memoria compartida o de paso de mensajes . Las topologías de red comunes utilizadas para interconectar núcleos incluyen bus , anillo , malla bidimensional y barra transversal . Los sistemas multinúcleo homogéneos incluyen sólo 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 de los sistemas multinúcleo pueden implementar arquitecturas como VLIW , superescalar , vectorial o multiproceso .
Los procesadores multinúcleo se utilizan ampliamente en muchos dominios de aplicaciones, incluidos los de uso general , integrados , de red , de procesamiento de señales digitales (DSP) y de gráficos (GPU). El recuento de núcleos llega incluso a docenas, y para chips especializados superiores a 10.000, [3] y en supercomputadoras (es decir, grupos de chips) el recuento puede superar los 10 millones (y en un caso hasta 20 millones de elementos de procesamiento en total, además del host). procesadores). [4]
La mejora del rendimiento obtenida mediante 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 múltiples 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 como para caber en el caché de cada núcleo, evitando el uso de una memoria del sistema principal mucho más lenta. . Sin embargo, la mayoría de las aplicaciones no se aceleran tanto a menos que los programadores inviertan esfuerzos en refactorizarlas . [5]
La paralelización del software es un importante tema de investigación en curso. La cointegración de aplicaciones multiprocesador proporciona flexibilidad en el diseño de la arquitectura de red. La adaptabilidad dentro de 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 convertirse en algo común en las computadoras personales a finales de la década de 2000. [7] Los procesadores de cuatro núcleos también se estaban adoptando en esa época para sistemas de gama alta antes de convertirse en estándar. A finales de la década de 2010, el hexa-core (seis núcleos) comenzó a entrar en la corriente principal [8] y desde principios de la década de 2020 ha superado al quad-core 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 sólo para referirse a microprocesadores multinúcleo que se fabrican en el mismo circuito integrado ; Los microprocesadores separados en el mismo paquete generalmente reciben otro nombre, como módulo de múltiples chips . Este artículo utiliza los términos "multinúcleo" y "doble núcleo" para las CPU fabricadas en el mismo circuito integrado, a menos que se indique lo contrario.
A diferencia de los sistemas multinúcleo, el término multi-CPU 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 masivo y multinúcleo masivo se utilizan a veces para describir arquitecturas multinúcleo con un número especialmente elevado de núcleos (de decenas a miles [10] ). [11]
Algunos sistemas utilizan muchos núcleos de microprocesador blandos colocados en una única FPGA . Cada "núcleo" puede considerarse un " núcleo de propiedad intelectual de semiconductores ", así como un núcleo de CPU. [ cita necesaria ]
Mientras 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 importante preocupación de diseño. Estas limitaciones físicas pueden causar importantes problemas de disipación de calor y sincronización de datos. Se utilizan varios otros métodos para mejorar el rendimiento de la CPU. Algunos métodos de paralelismo a nivel de instrucciones (ILP), como la canalización superescalar , son adecuados para muchas aplicaciones, pero son ineficaces para otras que contienen código difícil de predecir. Muchas aplicaciones se adaptan mejor a los métodos de paralelismo a nivel de subprocesos (TLP) y comúnmente se utilizan 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 un mayor TLP llevaron al desarrollo de CPU multinúcleo.
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 (IC), lo que redujo el costo por dispositivo en el IC. Alternativamente, para la misma área del circuito, se podrían usar más transistores en el diseño, lo que aumentaría la funcionalidad, especialmente para arquitecturas de computación con conjuntos de instrucciones complejas (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 los años 1980 a varios gigahercios a principios de los años 2000.
A medida que el ritmo de mejora de la velocidad del reloj disminuyó, 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 varios 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 durante 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 periódicas de rendimiento para los procesadores de uso general, fabricantes como Intel y AMD han recurrido a diseños multinúcleo, sacrificando menores costos de fabricación por un mayor rendimiento en algunas aplicaciones y sistemas. Se están desarrollando arquitecturas multinúcleo, pero también las alternativas. Un competidor 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 la caché funcione a una velocidad de reloj mucho más alta de lo 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 es necesario repetirlas con tanta frecuencia.
Suponiendo que la matriz pueda caber físicamente en el paquete, los diseños de CPU de múltiples núcleos requieren mucho menos espacio en la placa de circuito impreso (PCB) que los diseños SMP de múltiples chips . 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 requerida para controlar 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 competitivas para el área de matriz de silicio disponible, el diseño multinúcleo puede hacer uso de diseños probados de bibliotecas de núcleos de CPU y producir un producto con 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é genera rendimientos decrecientes.
Los chips multinúcleo también permiten un mayor rendimiento con menor energía. Este puede ser un factor importante en los dispositivos móviles que funcionan con baterías. Dado que cada núcleo en una CPU multinúcleo es generalmente más eficiente energéticamente, el chip se vuelve más eficiente que tener 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 de escribir código paralelo. [15]
Maximizar el uso de los recursos informáticos proporcionados por los procesadores multinúcleo requiere ajustes tanto en el soporte del sistema operativo (SO) 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 la producción del chip. También son más difíciles de gestionar térmicamente que los diseños de un solo núcleo de menor densidad. Intel ha contrarrestado parcialmente este primer problema creando sus diseños de cuatro núcleos combinando dos de doble núcleo en un solo chip con un caché unificado, por lo que se pueden usar dos troqueles de doble núcleo que funcionen cualesquiera, en lugar de producir cuatro núcleos en un mismo chip. un solo troquel y requiere 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 de la superficie de silicio que los núcleos multiprocesamiento, por lo que un compromiso de desarrollo con esta arquitectura puede conllevar el riesgo de obsolescencia. Por último, la potencia bruta de procesamiento no es la única limitación del rendimiento del sistema. Dos núcleos de procesamiento que comparten el mismo bus del 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, a medida que teóricamente son posibles procesadores con cientos o incluso miles de núcleos. [16] Además, los chips multinúcleo combinados con múltiples subprocesos simultáneos , 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 'grande') y un núcleo de bajo consumo (llamado 'LITTLE'). También existe una tendencia a mejorar 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 escalamiento 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 repetido consistentemente ("homogéneo"), mientras que otras usan una mezcla de diferentes núcleos, cada uno optimizado para una función diferente y " 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 frente al dispositivo. [17] Un dispositivo anunciado como octa-core solo tendrá núcleos independientes si se anuncia 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 teléfonos celulares, utilizando una variedad de núcleos especiales para ejecutar software modular programado por una interfaz de programación de aplicaciones de alto nivel.
[...] Atsushi Hasegawa, ingeniero jefe senior de Renesas , estuvo de acuerdo en general. Sugirió que el uso por parte del teléfono móvil de muchos núcleos especiales trabajando en conjunto es un buen modelo para futuros diseños de múltiples núcleos.
[...] Anant Agarwal , fundador y director ejecutivo de la startup Tilera , adoptó la opinión contraria. Dijo que los chips multinúcleo deben ser colecciones homogéneas de núcleos de uso general para mantener simple el modelo de software.
Una versión obsoleta de una aplicación antivirus puede crear un nuevo hilo para un proceso de análisis, mientras su hilo GUI espera comandos del usuario (por ejemplo, cancelar el análisis). En tales casos, una arquitectura multinúcleo es de poco beneficio para la aplicación en sí debido a que un solo subproceso 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 multiproceso a menudo requiere una coordinación compleja de subprocesos y puede introducir fácilmente errores sutiles y difíciles de encontrar debido al entrelazamiento del procesamiento de datos compartidos entre subprocesos (consulte seguridad de subprocesos ). En consecuencia, dicho código es mucho más difícil de depurar que el código de un solo subproceso cuando falla. Se ha percibido una falta de motivación para escribir aplicaciones con subprocesos a nivel de consumidor debido a la relativa rareza de la demanda por parte de los consumidores de un uso máximo del hardware informático. 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 vídeo 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 énfasis cada vez mayor 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 adicional en las velocidades de reloj del procesador, es probable que se determine hasta qué punto el software puede ser multiproceso para aprovechar estos nuevos chips. la mayor limitación para el rendimiento de los ordenadores en el futuro. Si los desarrolladores no pueden diseñar software para explotar plenamente los recursos proporcionados por múltiples núcleos, en última instancia alcanzarán un techo de rendimiento insuperable.
El mercado de las telecomunicaciones fue uno de los primeros que necesitó un nuevo diseño de procesamiento de paquetes de rutas de datos en paralelo porque hubo 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 o picocódigo propietario .
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 multinúcleo. Intel introdujo 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 IBM's X10 .
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 descubrir que sus lenguajes modernos no admiten la funcionalidad multinúcleo. Esto requiere entonces 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 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 resultar 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 usando 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 en el diseño de aplicaciones paralelas son:
Por otro lado, en el lado del servidor , los procesadores multinúcleo 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 los servidores de aplicaciones tengan un rendimiento mucho mejor .
Los proveedores pueden licenciar algún software "por procesador". Esto puede dar lugar a ambigüedad, porque un "procesador" puede consistir en un único núcleo o en una combinación de núcleos.
La informática integrada opera en un área de tecnología de procesador distinta de la de las PC "convencionales". Aquí también se aplican los mismos impulsos tecnológicos hacia el multinúcleo. De hecho, en muchos casos la aplicación es una opción "natural" para tecnologías multinúcleo, si la tarea puede dividirse fácilmente entre los diferentes procesadores.
Además, el software integrado generalmente se desarrolla para una versión de hardware específica, lo que hace que los problemas de portabilidad del software , código heredado o soporte a desarrolladores independientes sean menos críticos que en el caso de las PC o la informática empresarial. Como resultado, es más fácil para los desarrolladores adoptar nuevas tecnologías y, como resultado, existe una mayor variedad de proveedores y arquitecturas 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 del 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 la 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). Las entradas más recientes incluyen la familia Storm-1 de Stream Processors, Inc con 40 y 80 ALU de uso general por chip, todas programables en C como motor SIMD y Picochip con 300 procesadores en un solo chip, enfocados en aplicaciones de comunicación.
En la informática heterogénea , donde un sistema utiliza más de un tipo de procesador o núcleos, las soluciones multinúcleo se están volviendo más comunes: Xilinx Zynq UltraScale+ MPSoC tiene un ARM Cortex-A53 de cuatro núcleos y un ARM Cortex-R5 de doble núcleo. Se están utilizando soluciones de software como OpenAMP para ayudar con 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 puntos de referencia para ayudar en dichas evaluaciones. Los puntos de referencia existentes incluyen SPLASH-2, PARSEC y COSMIC para sistemas heterogéneos. [49]
Los teléfonos inteligentes Galaxy funcionan con procesadores Octa-core (2,3 GHz Quad + 1,6 GHz Quad) o Quad-core (2,15 GHz + 1,6 GHz Dual)