Un procesador multinúcleo es un microprocesador en un solo circuito integrado con dos o más unidades de procesamiento separadas, llamadas núcleos, cada una de las cuales lee y ejecuta instrucciones de programa.[1] Las instrucciones son instrucciones ordinarias de CPU (como agregar, mover datos y bifurcar), pero el procesador único 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 solo chip de circuito integrado (conocido como chip multiprocesador o CMP) o en varios chips en un solo paquete de chip. Los microprocesadores que se utilizan actualmente en casi todas las computadoras personales son multinúcleo.
Un procesador multinúcleo implementa el multiprocesamiento en un solo paquete físico. Los diseñadores pueden acoplar núcleos en un dispositivo multinúcleo de forma ajustada o suelta. Por ejemplo, los núcleos pueden o no compartir cachés, y pueden implementar métodos de comunicación entre núcleos de memoria compartida o paso de mensajes. Las topologías de red comunes utilizadas para interconectar núcleos incluyen bus, anillo, malla bidimensional y barra transversal. Los sistemas homogéneos de múltiples núcleos incluyen solo núcleos idénticos; los sistemas multinúcleo heterogéneos tienen núcleos que no son idénticos (por ejemplo, big.LITTLE tienen núcleos heterogéneos que comparten el mismo conjunto de instrucciones, mientras que las unidades de procesamiento acelerado de 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 los sistemas de varios núcleos 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 de más de 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 en el rendimiento obtenida por el uso de un procesador multinúcleo depende en gran medida de los algoritmos de software utilizados y 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 es descrito por la ley de Amdahl. En el mejor de los casos, los llamados problemas vergonzosamente paralelos pueden generar factores de aceleración cercanos a la cantidad de núcleos, o incluso más si el problema se divide lo suficiente como para caber dentro de los cachés 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 esfuerzo en la refactorización.[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 arquitectura de red. La adaptabilidad dentro de modelos paralelos es una característica adicional de los sistemas que utilizan estos protocolos.[6]
Los términos multi-core y dual-core comúnmente se refieren a algún tipo de unidad central de procesamiento (CPU), pero a veces también se aplican a los procesadores de señales digitales (DSP) y al sistema en un chip (SoC). Los términos generalmente se usan solo para referirse a microprocesadores de múltiples núcleos que se fabrican en el mismo troquel de circuito integrado; los troqueles de microprocesador separados en el mismo paquete generalmente se denominan con otro nombre, como módulo de chips múltiples. 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.
En contraste con los sistemas multinúcleo, el término multi-CPU se refiere a múltiples unidades de procesamiento separadas físicamente (que a menudo contienen circuitos especiales para facilitar la comunicación entre ellas).
Los términos muchos núcleos y multinúcleo masivo se utilizan a veces para describir arquitecturas de varios núcleos con una cantidad especialmente alta de núcleos (de decenas a miles[7]).[8]
Algunos sistemas usan muchos núcleos de microprocesadores suaves colocados en un solo FPGA. Cada "núcleo" puede considerarse un "núcleo de propiedad intelectual de semiconductores", así como un núcleo de CPU.
Si bien 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 problemas significativos 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 instrucción (ILP), como la canalizació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 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 mayor TLP condujo 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 al reducir el área del circuito integrado (IC), lo que redujo el costo por dispositivo en el IC. Alternativamente, para la misma área de circuito, se podrían usar más transistores en el diseño, lo que aumentó la funcionalidad, especialmente para arquitecturas de computación de 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 la década de 1980 hasta varios gigahercios a principios de la década de 2000.
A medida que se ralentizaba el ritmo de las mejoras en la velocidad del reloj, se buscaba 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.[9][10]
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 la arquitectura de procesador de múltiples núcleos y el soporte con software son bien conocidos.
Además:
Con el fin de continuar brindando mejoras de rendimiento regulares para los procesadores de uso general, los fabricantes como Intel y AMD han recurrido a diseños de múltiples núcleos, 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 troquel permite que el circuito de coherencia de 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 indagación de caché (alternativa: indagación 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 breves y no es necesario repetirlas con tanta frecuencia.
Suponiendo que la matriz pueda encajar físicamente en el paquete, los diseños de CPU multinúcleo requieren mucho menos espacio en la placa de circuito impreso (PCB) que los diseños SMP de varios chips. Además, un procesador de doble núcleo usa un poco menos de energía que dos procesadores de un solo núcleo acoplados, principalmente debido a la menor energía requerida para impulsar señales externas al chip. Además, los núcleos comparten algunos circuitos, como la memoria caché L2 y la interfaz con el bus frontal (FSB). En términos de tecnologías competidoras 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é adolece de rendimientos decrecientes.
Los chips multinúcleo también permiten un mayor rendimiento con menos energía. Esto 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 generalmente es más eficiente energéticamente, el chip se vuelve más eficiente que tener un solo 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.[12]
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 varios subprocesos dentro de las aplicaciones.
La integración de un chip multinúcleo puede reducir los rendimientos de producción de chips. También son más difíciles de administrar térmicamente que los diseños de un solo núcleo de menor densidad. Intel ha contrarrestado parcialmente este primer problema mediante la creación de sus diseños de cuatro núcleos mediante la combinación de dos de doble núcleo en una sola matriz con un caché unificado, por lo tanto, se pueden usar dos matrices de doble núcleo que funcionen, en lugar de producir cuatro núcleos en una sola matriz. 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 una sola CPU pueden hacer un mejor uso del área de superficie de silicio que los núcleos de procesamiento múltiple, 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 restricción en el rendimiento del sistema. Dos núcleos de procesamiento que comparten el mismo bus del sistema y el ancho de banda de la memoria limitan la ventaja de rendimiento en el mundo real. En un informe de 2009, el Dr. Jun Ni mostró que si un solo núcleo está cerca de tener un ancho de banda de memoria limitado, pasar a dos núcleos podría brindar una mejora del 30% al 70%; si el ancho de banda de la memoria no es un problema, se puede esperar una mejora del 90%; sin embargo, la ley de Amdahl hace que esta afirmación sea dudosa.[13] Sería posible que una aplicación que usa dos CPU terminara ejecutándose más rápido en una de un solo núcleo si la comunicación entre las CPU fuera el factor limitante, lo que contaría como una mejora de más del 100%.
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.[14] Además, los chips multinúcleo combinados con subprocesos múltiples 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, el núcleo big.LITTLE incluye un núcleo de alto rendimiento (llamado 'big') y un núcleo de bajo consumo (llamado 'LITTLE'). También hay una tendencia hacia la mejora de la eficiencia energética centrándose en el rendimiento por vatio con gestión avanzada de energía de grano fino o ultrafino y 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 usan un diseño de núcleo repetido consistentemente ("homogéneo"), mientras que otras usan una combinación de diferentes núcleos, cada uno optimizado para una función diferente y "heterogénea".
La forma en que se implementan e integran varios 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.[15] 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.[16][17]
El artículo "Los diseñadores de CPU debaten el futuro multinúcleo" de Rick Merritt, EE Times 2008,[18] 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, un ingeniero jefe sénior en Renesas, generalmente estuvo de acuerdo. Sugirió que el uso del teléfono celular de muchos núcleos especiales trabajando en concierto es un buen modelo para futuros diseños de múltiples núcleos.
[...] Anant Agarwal, fundador y director ejecutivo de la startup Tilera, tomó el punto de vista opuesto. Dijo que los chips de múltiples núcleos deben ser colecciones homogéneas de núcleos de propósito general para mantener el modelo de software simple.
Una versión desactualizada de una aplicación antivirus puede crear un nuevo subproceso para un proceso de escaneo, mientras que su subproceso 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 único subproceso hace todo el trabajo pesado y la incapacidad de equilibrar el trabajo de manera uniforme en varios núcleos. La programación de código verdaderamente multiproceso a menudo requiere una coordinación compleja de los subprocesos y puede introducir fácilmente errores sutiles y difíciles de encontrar debido al entretejido del procesamiento de datos compartidos entre subprocesos (ver 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 se rompe. Se ha percibido una falta de motivación para escribir aplicaciones con subprocesos a nivel del consumidor debido a la relativa rareza de la demanda a nivel del consumidor para el 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 usa 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 adicional significativo en las velocidades de reloj del procesador, es probable que la medida en que el software pueda ser multiproceso para aprovechar estos nuevos chips sea la mayor limitación individual en el rendimiento de la computadora en el futuro. Si los desarrolladores no pueden diseñar software para aprovechar al máximo los recursos proporcionados por múltiples núcleos, finalmente 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 ruta 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[19] a los procesadores de red tradicionales que se basaban en microcódigo o picocódigo propietario.
Las técnicas de programación en paralelo pueden beneficiarse directamente de varios núcleos. Algunos modelos de programación paralela existentes, como Cilk Plus, OpenMP, OpenHMPP, FastFlow, Skandium, MPI y Erlang, se pueden usar 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 de desarrollo de software computacional moderno. Los desarrolladores que programan en lenguajes más nuevos pueden descubrir que sus lenguajes modernos no son compatibles con 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 que los lenguajes más nuevos como C#. MKL de Intel y ACML de AMD están escritos en estos idiomas 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 tratar 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.[20]
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, del lado del servidor, los procesadores multinúcleo son ideales porque permiten que muchos usuarios se conecten a un sitio simultáneamente y tienen 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 generar ambigüedad, porque un "procesador" puede consistir en un solo núcleo o en una combinación de núcleos.
La computación integrada opera en un área de tecnología de procesador distinta de la de las PC "convencionales". Los mismos impulsos tecnológicos hacia multinúcleo también se aplican aquí. De hecho, en muchos casos, la aplicación se adapta "naturalmente" a las tecnologías multinúcleo, si la tarea se puede dividir fácilmente entre los diferentes procesadores.
Además, el software incorporado 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 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.
En 2010, los procesadores de red multinúcleo se han convertido en la corriente principal, con empresas como Freescale, Cavium Networks, Wintegra y Broadcom, todas fabricando 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 ofrecen software portátil de procesamiento de paquetes 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.[23]
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 propósito general por chip, todas programables en C como un motor SIMD y Picochip con 300 procesadores en un solo troquel, enfocado en aplicaciones de comunicación.
En la computación heterogénea, donde un sistema utiliza más de un tipo de procesador o núcleos, 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. Las soluciones de software como OpenAMP se utilizan para ayudar con la comunicación entre procesadores.
Los dispositivos móviles pueden usar 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.[46]