El multiprocesamiento simétrico o multiprocesamiento de memoria compartida [1] ( SMP ) implica una arquitectura de hardware y software de computadora multiprocesador donde dos o más procesadores idénticos están conectados a una única memoria principal compartida , tienen acceso total a todos los dispositivos de entrada y salida y están controlados por una única instancia del sistema operativo que trata a todos los procesadores por igual, sin reservar ninguno para fines especiales. La mayoría de los sistemas multiprocesador actuales utilizan una arquitectura SMP. En el caso de los procesadores multinúcleo , la arquitectura SMP se aplica a los núcleos, tratándolos como procesadores separados.
El profesor John D. Kubiatowicz considera que los sistemas SMP tradicionalmente contienen procesadores sin cachés. [2] Culler y Pal-Singh en su libro de 1998 "Arquitectura de computadoras paralelas: un enfoque de hardware/software" mencionan: "El término SMP se usa ampliamente pero causa un poco de confusión. [...] La descripción más precisa de lo que se pretende con SMP es un multiprocesador de memoria compartida donde el costo de acceder a una ubicación de memoria es el mismo para todos los procesadores; es decir, tiene costos de acceso uniformes cuando el acceso realmente es a la memoria. Si la ubicación está en caché, el acceso será más rápido, pero los tiempos de acceso a la caché y los tiempos de acceso a la memoria son los mismos en todos los procesadores". [3]
Los sistemas SMP son sistemas multiprocesadores estrechamente acoplados con un conjunto de procesadores homogéneos que funcionan de forma independiente entre sí. Cada procesador, que ejecuta distintos programas y trabaja con distintos conjuntos de datos, tiene la capacidad de compartir recursos comunes (memoria, dispositivo de E/S, sistema de interrupción, etc.) que están conectados mediante un bus de sistema o una barra transversal .
Los sistemas SMP cuentan con una memoria compartida centralizada denominada memoria principal (MM) que opera bajo un único sistema operativo con dos o más procesadores homogéneos. Normalmente cada procesador tiene asociada una memoria privada de alta velocidad conocida como memoria caché (o caché) para acelerar el acceso a los datos de la memoria principal y reducir el tráfico del bus del sistema.
Los procesadores pueden interconectarse mediante buses, conmutadores de barras cruzadas o redes en malla en el chip. El obstáculo para la escalabilidad de SMP mediante buses o conmutadores de barras cruzadas es el ancho de banda y el consumo de energía de la interconexión entre los distintos procesadores, la memoria y las matrices de discos. Las arquitecturas en malla evitan estos obstáculos y proporcionan una escalabilidad casi lineal a un número mucho mayor de procesadores a costa de la programabilidad:
Este tipo de arquitectura plantea serios desafíos de programación porque requiere dos modos distintos de programación: uno para las CPU en sí y otro para la interconexión entre ellas. Un único lenguaje de programación tendría que ser capaz no solo de dividir la carga de trabajo, sino también de comprender la ubicación de la memoria, lo cual es complicado en una arquitectura basada en malla. [4]
Los sistemas SMP permiten que cualquier procesador trabaje en cualquier tarea sin importar dónde se encuentren los datos correspondientes a esa tarea en la memoria, siempre que cada tarea del sistema no se esté ejecutando en dos o más procesadores al mismo tiempo. Con el soporte adecuado del sistema operativo , los sistemas SMP pueden mover tareas fácilmente entre procesadores para equilibrar la carga de trabajo de manera eficiente.
El primer sistema de producción con múltiples procesadores idénticos fue el Burroughs B5000 , que estaba en funcionamiento alrededor de 1961. Sin embargo, en tiempo de ejecución era asimétrico , con un procesador restringido a programas de aplicación mientras que el otro procesador manejaba principalmente el sistema operativo y las interrupciones de hardware. El Burroughs D825 implementó por primera vez SMP en 1962. [5] [6]
IBM ofrecía sistemas informáticos de doble procesador basados en su System/360 Modelo 65 y en los estrechamente relacionados Model 67 [7] y 67–2. [8] Los sistemas operativos que se ejecutaban en estas máquinas eran OS/360 M65MP [9] y TSS/360 . Otro software desarrollado en universidades, en particular el Michigan Terminal System (MTS), utilizaba ambas CPU. Ambos procesadores podían acceder a los canales de datos e iniciar E/S. En OS/360 M65MP, los periféricos podían conectarse generalmente a cualquiera de los procesadores, ya que el núcleo del sistema operativo se ejecutaba en ambos procesadores (aunque con un "gran candado" alrededor del controlador de E/S). [10] El supervisor MTS (UMMPS) tiene la capacidad de ejecutarse en ambas CPU del IBM System/360 modelo 67–2. Los bloqueos del supervisor eran pequeños y se utilizaban para proteger estructuras de datos comunes individuales a las que se podía acceder simultáneamente desde cualquiera de las CPU. [11]
Otros mainframes que soportaban SMP incluían el UNIVAC 1108 II , lanzado en 1965, que soportaba hasta tres CPU, y el GE-635 y GE-645 , [12] [13] aunque GECOS en sistemas multiprocesador GE-635 se ejecutaba de manera asimétrica maestro-esclavo, a diferencia de Multics en sistemas multiprocesador GE-645, que se ejecutaban de manera simétrica. [14]
A partir de su versión 7.0 (1972), el sistema operativo TOPS-10 de Digital Equipment Corporation implementó la función SMP; el primer sistema que ejecutó SMP fue el sistema con procesador dual KI10 DECSystem 1077. [15] El sistema KL10 posterior podía agregar hasta 8 CPU de manera SMP. En contraste, el primer sistema VAX multiprocesador de DEC , el VAX-11/782, era asimétrico, [16] pero los sistemas multiprocesador VAX posteriores eran SMP. [17]
Las primeras implementaciones comerciales de Unix SMP incluyeron el Sequent Computer Systems Balance 8000 (lanzado en 1984) y el Balance 21000 (lanzado en 1986). [18] Ambos modelos se basaban en procesadores National Semiconductor NS32032 de 10 MHz , cada uno con una pequeña caché de escritura directa conectada a una memoria común para formar un sistema de memoria compartida . Otra implementación comercial temprana de Unix SMP fue el Honeywell Information Systems Italy XPS-100 basado en NUMA diseñado por Dan Gielan de VAST Corporation en 1985. Su diseño admitía hasta 14 procesadores, pero debido a limitaciones eléctricas, la versión comercializada más grande fue un sistema de doble procesador. El sistema operativo fue derivado y portado por VAST Corporation a partir del código AT&T 3B20 Unix SysVr3 utilizado internamente dentro de AT&T.
Anteriormente existían puertos UNIX de multiprocesamiento no comerciales, incluido un puerto llamado MUNIX creado en la Escuela de Postgrado Naval en 1975. [19]
Los sistemas de tiempo compartido y de servidor a menudo pueden usar SMP sin realizar cambios en las aplicaciones, ya que pueden tener múltiples procesos ejecutándose en paralelo, y un sistema con más de un proceso en ejecución puede ejecutar diferentes procesos en diferentes procesadores.
En las computadoras personales , SMP es menos útil para aplicaciones que no han sido modificadas. Si el sistema rara vez ejecuta más de un proceso a la vez, SMP es útil solo para aplicaciones que han sido modificadas para procesamiento multiproceso (multitarea). El software programado a medida se puede escribir o modificar para usar múltiples subprocesos, de modo que pueda hacer uso de múltiples procesadores.
Los programas multiproceso también se pueden utilizar en sistemas de tiempo compartido y de servidor que admiten subprocesos múltiples, lo que les permite hacer un mayor uso de múltiples procesadores.
En los sistemas SMP actuales, todos los procesadores están estrechamente acoplados dentro de la misma caja con un bus o un conmutador; en los sistemas SMP anteriores, una sola CPU ocupaba un gabinete entero. Algunos de los componentes que se comparten son la memoria global, los discos y los dispositivos de E/S. Solo se ejecuta una copia de un SO en todos los procesadores, y el SO debe estar diseñado para aprovechar esta arquitectura. Algunas de las ventajas básicas implican formas rentables de aumentar el rendimiento. Para resolver diferentes problemas y tareas, SMP aplica múltiples procesadores a ese único problema, conocido como programación paralela .
Sin embargo, existen algunos límites en la escalabilidad de SMP debido a la coherencia de la caché y los objetos compartidos.
Los sistemas monoprocesador y SMP requieren métodos de programación diferentes para lograr el máximo rendimiento. Los programas que se ejecutan en sistemas SMP pueden experimentar un aumento en el rendimiento incluso cuando se han escrito para sistemas monoprocesador. Esto se debe a que las interrupciones de hardware generalmente suspenden la ejecución del programa mientras que el núcleo que las maneja puede ejecutarlo en un procesador inactivo en su lugar. El efecto en la mayoría de las aplicaciones (por ejemplo, juegos) no es tanto un aumento del rendimiento como la apariencia de que el programa se ejecuta mucho mejor. Algunas aplicaciones, en particular las de creación de software y algunos proyectos de computación distribuida , se ejecutan más rápido por un factor de (casi) la cantidad de procesadores adicionales. (Los compiladores por sí mismos son de un solo subproceso, pero, al crear un proyecto de software con múltiples unidades de compilación, si cada unidad de compilación se maneja de forma independiente, esto crea una situación vergonzosamente paralela en todo el proyecto de múltiples unidades de compilación, lo que permite un escalamiento casi lineal del tiempo de compilación. Los proyectos de computación distribuida son inherentemente paralelos por diseño).
Los programadores de sistemas deben incorporar soporte para SMP en el sistema operativo ; de lo contrario, los procesadores adicionales permanecen inactivos y el sistema funciona como un sistema monoprocesador.
Los sistemas SMP también pueden generar una mayor complejidad en lo que respecta a los conjuntos de instrucciones. Un sistema de procesador homogéneo normalmente requiere registros adicionales para "instrucciones especiales" como SIMD (MMX, SSE, etc.), mientras que un sistema heterogéneo puede implementar distintos tipos de hardware para distintas instrucciones o usos.
Cuando se ejecuta más de un programa al mismo tiempo, un sistema SMP tiene un rendimiento considerablemente mejor que un sistema monoprocesador, porque diferentes programas pueden ejecutarse en diferentes CPU simultáneamente. Por el contrario, el multiprocesamiento asimétrico (AMP) generalmente permite que solo un procesador ejecute un programa o una tarea a la vez. Por ejemplo, AMP se puede utilizar para asignar tareas específicas a la CPU en función de la prioridad y la importancia de la finalización de la tarea. AMP se creó mucho antes de SMP en términos de manejo de múltiples CPU, lo que explica la falta de rendimiento según el ejemplo proporcionado.
En los casos en que un entorno SMP procesa muchos trabajos, los administradores suelen experimentar una pérdida de eficiencia del hardware. Se han desarrollado programas de software para programar trabajos y otras funciones del equipo de modo que la utilización del procesador alcance su máximo potencial. Los buenos paquetes de software pueden lograr este máximo potencial programando cada CPU por separado, además de poder integrar múltiples máquinas y clústeres SMP.
El acceso a la RAM está serializado; esto y los problemas de coherencia de la memoria caché hacen que el rendimiento quede ligeramente por detrás del número de procesadores adicionales en el sistema.
SMP utiliza un único bus de sistema compartido que representa uno de los primeros estilos de arquitecturas de máquinas multiprocesador, normalmente utilizado para construir computadoras más pequeñas con hasta 8 procesadores.
Los sistemas informáticos más grandes pueden utilizar arquitecturas más nuevas, como NUMA (acceso a memoria no uniforme), que dedica distintos bancos de memoria a distintos procesadores. En una arquitectura NUMA, los procesadores pueden acceder a la memoria local rápidamente y a la memoria remota más lentamente. Esto puede mejorar drásticamente el rendimiento de la memoria siempre que los datos estén localizados en procesos específicos (y, por lo tanto, en procesadores). En el lado negativo, NUMA hace que el costo de mover datos de un procesador a otro, como en el caso del equilibrio de carga de trabajo, sea más caro. Los beneficios de NUMA se limitan a cargas de trabajo particulares, especialmente en servidores donde los datos suelen estar fuertemente asociados con ciertas tareas o usuarios.
Por último, existe el multiprocesamiento en clúster (como Beowulf ), en el que no toda la memoria está disponible para todos los procesadores. Las técnicas de agrupamiento se utilizan de forma bastante extensa para construir supercomputadoras de gran tamaño.
El multiprocesamiento simétrico variable (vSMP) es una tecnología específica para casos de uso en dispositivos móviles iniciada por NVIDIA. Esta tecnología incluye un quinto núcleo adicional en un dispositivo de cuatro núcleos, llamado núcleo Companion, diseñado específicamente para ejecutar tareas a una frecuencia más baja durante el modo de espera activo en dispositivos móviles, la reproducción de videos y la reproducción de música.
El proyecto Kal-El ( Tegra 3 ), [20] patentado por NVIDIA, fue el primer SoC (sistema en chip) en implementar esta nueva tecnología vSMP. Esta tecnología no solo reduce el consumo de energía móvil durante el estado de espera activo, sino que también maximiza el rendimiento de cuatro núcleos durante el uso activo para aplicaciones móviles intensivas. En general, esta tecnología aborda la necesidad de aumentar el rendimiento de la vida útil de la batería durante el uso activo y en espera al reducir el consumo de energía en los procesadores móviles.
A diferencia de las arquitecturas SMP actuales, el núcleo vSMP Companion es transparente para el sistema operativo, lo que significa que el sistema operativo y las aplicaciones que se ejecutan no son conscientes de este núcleo adicional, pero pueden aprovecharlo. Algunas de las ventajas de la arquitectura vSMP incluyen la coherencia de la memoria caché, la eficiencia del sistema operativo y la optimización de la energía. Las ventajas de esta arquitectura se explican a continuación:
Estas ventajas hacen que la arquitectura vSMP se beneficie considerablemente [ prosa de pavo real ] con respecto a otras arquitecturas que utilizan tecnologías de reloj asincrónico.