Multiprocesamiento ( Multiprocessing , Multiprocessing , English Multiprocessing ) - el uso de un par o más de procesadores físicos en un sistema informático .
Un dispositivo se llama multiprocesador si tiene dos o más procesadores físicos .
Un sistema operativo o programa se llama multiprocesador si es capaz de distribuir tareas entre procesadores (ver multiproceso ).
Hay muchas variantes de este concepto, y la definición de multiprocesamiento puede variar según el contexto, principalmente según cómo se definan los procesadores ( muchos núcleos en un chip , muchos chips en un paquete, muchos paquetes en un módulo de sistema, etc. ).
A veces se hace referencia al multiprocesamiento como la ejecución de múltiples procesos de software paralelos en un sistema en lugar de la ejecución de un solo proceso en un momento dado. Sin embargo, los términos multitarea o multiprogramación son más apropiados para describir este concepto, que se implementa mayoritariamente en software , mientras que multiprocesamiento es más apropiado para describir el uso de múltiples procesadores de hardware. Un sistema no puede ser a la vez multiprocesador y multiprogramado, solo uno de los dos, o ninguno.
En un sistema multiprocesador, todas las CPU pueden ser iguales o algunas pueden reservarse para fines especiales. La combinación de consideraciones de diseño de hardware y software del sistema operativo determina la simetría (o la falta de ella) en un sistema dado. Por ejemplo, las consideraciones de hardware o software pueden requerir que solo un procesador central responda a todas las interrupciones de hardware, mientras que el resto del trabajo en el sistema puede distribuirse equitativamente entre los procesadores; o bien, la ejecución del código de modo privilegiado puede estar restringida a un solo procesador (o un procesador particular, o solo un procesador a la vez), mientras que el código de modo no privilegiado puede ejecutarse en cualquier combinación de procesadores. A menudo, los sistemas multiprocesador son más fáciles de diseñar si se imponen tales restricciones , pero tienden a ser menos eficientes que los sistemas que usan todas las CPU.
Los sistemas que tratan todas las CPU de la misma manera se denominan sistemas de multiprocesamiento simétrico (SMP). En los sistemas en los que no todas las CPU son iguales, los recursos del sistema se pueden compartir de muchas maneras, incluido el multiprocesamiento asimétrico ( ASMP ), el multiprocesamiento de acceso a memoria no uniforme (NUMA) y el multiprocesamiento en clúster (qq.v.).
En el multiprocesamiento, los procesadores se pueden usar para ejecutar una sola secuencia de instrucciones en múltiples contextos ( instrucción de máquina única , datos múltiples o SIMD , a menudo utilizado en el procesamiento de vectores), secuencias de instrucciones múltiples en un solo contexto ("flujo de instrucciones múltiples, flujo de datos único " o arquitectura MISD , utilizada para la redundancia en sistemas tolerantes a fallas y, a veces, utilizada para describir procesadores canalizados o hiperprocesamiento ), o múltiples secuencias de instrucciones en múltiples contextos ("flujo de instrucciones múltiples, flujo de datos múltiples" o MIMD ).
Los sistemas multiprocesador estrechamente acoplados contienen múltiples procesadores que están conectados a nivel de bus . Estos procesadores pueden tener acceso a una memoria compartida central (SMP o UMA), o pueden participar en una jerarquía de memoria tanto con memoria local como compartida (NUMA). El IBM p690 Regatta es un ejemplo de un potente sistema SMP. El procesador Intel Xeon dominó el mercado de multiprocesadores para PC comerciales y fue la única opción x86 hasta el lanzamiento de la línea de procesadores Opteron de AMD en 2004. Ambas líneas de procesadores tenían su propia memoria caché en el chip , pero brindan acceso a la memoria compartida de diferentes maneras: los procesadores Xeon a través de un canal común y los procesadores Opteron a través de autopistas independientes a la RAM del sistema.
Los chips multiprocesador (multinúcleo) incluyen más de un procesador colocado en un solo chip y pueden considerarse la forma más extrema de multiprocesamiento estrechamente acoplado. Los sistemas mainframe con múltiples procesadores suelen ser sistemas altamente acoplados.
Los sistemas de multiprocesadores débilmente acoplados , a menudo denominados clústeres , se basan en varias computadoras individuales o duales independientes conectadas a través de un sistema de comunicaciones de alta velocidad (como Gigabit Ethernet ) . Un clúster Beowulf que ejecuta Linux es un ejemplo de un sistema conectado de manera flexible.
Los sistemas estrechamente acoplados funcionan mejor y son físicamente más pequeños que los sistemas acoplados flexiblemente, pero históricamente han requerido una gran inversión inicial y pueden depreciarse rápidamente ; los nodos en un sistema conectado de manera flexible suelen ser computadoras económicas y se pueden usar como máquinas independientes cuando se eliminan del clúster.
Los sistemas fuertemente acoplados tienden a ser mucho más eficientes energéticamente que los clústeres. Se logra una eficiencia energética significativa al tener los componentes en dichos sistemas prediseñados para funcionar en un sistema particular, mientras que los sistemas acoplados de manera flexible a menudo usan componentes diseñados para funcionar en una clase más amplia de sistemas.
En una computadora con un solo flujo de instrucciones y un solo flujo de datos, un procesador procesa las instrucciones secuencialmente; cada instrucción de máquina procesa un elemento de datos. Un ejemplo es la arquitectura de von Neumann .
En una computadora con un solo flujo de instrucciones y múltiples flujos de datos, un procesador procesa un flujo de instrucciones, cada uno de los cuales puede realizar cálculos paralelos en un conjunto de datos.
El multiprocesamiento SIMD es muy adecuado para el procesamiento paralelo o vectorial, en el que un gran conjunto de datos se puede dividir en partes que se procesan mediante operaciones idénticas pero independientes. Un solo flujo de instrucciones dirige la operación de los módulos de multiprogramación para realizar manipulaciones similares simultáneamente en una cantidad potencialmente grande de datos.
Para ciertos tipos de aplicaciones informáticas, este tipo de arquitectura puede brindar un aumento significativo en el rendimiento en términos de tiempo empleado. Sin embargo, la desventaja de esta arquitectura es que la mayor parte del sistema queda inactivo mientras se ejecutan programas o tareas del sistema que no se pueden dividir en módulos (subtareas) que se pueden procesar en paralelo.
Además, los programas deben escribirse de forma cuidadosa y específica para poder aprovechar al máximo las capacidades de la arquitectura. A menudo, hay compiladores de optimización especiales diseñados para producir código específicamente para su uso en este entorno. Algunos compiladores de esta categoría proporcionan construcciones o extensiones especiales para permitir a los programadores definir directamente las operaciones que se ejecutarán en paralelo (por ejemplo, las declaraciones DO FOR ALL en Fortran , utilizadas en ILLIAC IV , que era una supercomputadora multiprocesador de arquitectura SIMD).
El multiprocesamiento SIMD tiene una amplia aplicación en algunas áreas, como las simulaciones por computadora , pero es de poca utilidad en aplicaciones comerciales y de escritorio de propósito general.
El multiprocesamiento con flujo de instrucciones múltiples y flujo de datos único ofrece principalmente la ventaja de la redundancia, ya que los módulos de multiprogramación realizan las mismas tareas en los mismos datos, lo que reduce la posibilidad de resultados incorrectos si uno de los módulos falla. La arquitectura MISD le permite comparar los resultados de los cálculos para detectar fallas. Aparte de la redundancia y la tolerancia a fallas, este tipo de multiprocesamiento tiene pocas ventajas. Además, es muy caro. No aumenta el rendimiento.
La arquitectura de multiprocesamiento MIMD es adecuada para una amplia variedad de tareas que implementan una ejecución completamente independiente y paralela de instrucciones con respecto a diferentes conjuntos de datos. Por esta razón, y porque es simple de implementar, MIMD domina el multiprocesamiento.
El procesamiento se divide en múltiples subprocesos, cada uno con su propio estado de hardware de procesador, dentro de un solo proceso definido por software o en múltiples procesos. Debido a que el sistema tiene varios subprocesos esperando para ejecutarse (subprocesos del sistema o del usuario), esta arquitectura hace un uso eficiente de los recursos de hardware.
En MIMD, pueden surgir problemas de interbloqueo y contención de recursos porque los subprocesos que intentan acceder a los recursos pueden colisionar de formas impredecibles. MIMD requiere una codificación especial en el sistema operativo de la computadora, pero no requiere cambios en los programas de aplicación, a menos que los propios programas usen varios subprocesos (MIMD es transparente para los programas de un solo subproceso en la mayoría de los sistemas operativos, si los programas mismos no rechazan el control del SO). Tanto el software del sistema como el del usuario pueden necesitar usar construcciones de programación como semáforos para evitar que un subproceso interfiera con otro si tienen una referencia a los mismos datos. Si lo hace, aumenta la complejidad del código, reduce el rendimiento y aumenta en gran medida la cantidad de pruebas necesarias, aunque por lo general no es suficiente para negar los beneficios del multiprocesamiento.
Dichos conflictos pueden surgir a nivel de hardware entre procesadores y, por lo general, deben resolverse en hardware o con una combinación de software y hardware.