El multiprocesamiento es un modelo de arquitectura de cómputo en el cual dos o más procesadores (CPU) trabajan de manera conjunta en un mismo sistema para ejecutar múltiples procesos de forma simultánea.
Este paradigma surge como respuesta a las limitaciones de los sistemas clásicos (Von Neumann, Harvard) y segmentados (pipeline).
Cuando ya no era suficiente aumentar la frecuencia de reloj o profundizar el pipeline, se recurrió a añadir más procesadores para obtener mayor rendimiento.
Un sistema multiprocesador se caracteriza por:
Poseer varias CPU interconectadas que comparten recursos.
Ejecutar procesos en paralelo, ya sea sobre diferentes datos o diferentes tareas.
Utilizar mecanismos de coordinación y comunicación entre procesadores (buses, redes de interconexión, memoria compartida o distribuida).
Paralelismo real: varias instrucciones se ejecutan al mismo tiempo en distintos procesadores.
Mayor rendimiento: incremento en el throughput (instrucciones por unidad de tiempo).
Escalabilidad: se pueden añadir más procesadores según la arquitectura.
Concurrencia: capacidad de atender varios procesos o hilos de ejecución simultáneamente.
Comunicación y sincronización: fundamentales para evitar inconsistencias entre procesadores.
Existen distintos criterios de clasificación, pero los más comunes son los siguientes:
SMP (Symmetric Multiprocessing)
Todos los procesadores comparten una misma memoria principal y tienen acceso equitativo a ella.
Requiere un bus de sistema o interconexión eficiente.
Ventaja: simplicidad de programación (todos los procesos “ven” la misma memoria).
Desventaja: el bus compartido puede ser un cuello de botella.
Ejemplo: servidores de 2, 4 o 8 procesadores.
NUMA (Non-Uniform Memory Access)
Cada procesador tiene su propia memoria local, pero puede acceder a la memoria de otros procesadores.
El acceso a la memoria local es más rápido que a la remota.
Se necesita un sistema operativo avanzado para optimizar el acceso.
Ejemplo: servidores multiprocesador de alta gama (SGI Origin, AMD EPYC).
Michael Flynn clasificó los sistemas de procesamiento en función del flujo de instrucciones y datos:
SISD (Single Instruction, Single Data)
Arquitectura clásica secuencial (Von Neumann).
Una instrucción sobre un solo dato en cada ciclo.
Ejemplo: computadoras tradicionales de un solo procesador.
SIMD (Single Instruction, Multiple Data)
Una instrucción se aplica de forma simultánea sobre múltiples datos.
Ideal para operaciones vectoriales y gráficas.
Ejemplo: GPUs, extensiones MMX, SSE, AVX en CPUs.
MISD (Multiple Instruction, Single Data)
Varios procesadores ejecutan diferentes instrucciones sobre un mismo dato.
Poco implementada en la práctica.
Usos en sistemas de control tolerantes a fallos.
MIMD (Multiple Instruction, Multiple Data)
Varios procesadores ejecutan diferentes instrucciones sobre diferentes datos simultáneamente.
Es el modelo más usado en multiprocesadores modernos.
Ejemplo: servidores multinúcleo, clústeres, supercomputadoras.
Multiprocesadores en un chip (Multicore)
Varios núcleos de CPU integrados en un mismo chip.
Comunicación más rápida y eficiente que sistemas separados.
Ejemplo: procesadores Intel i7, AMD Ryzen, ARM Cortex.
Multiprocesadores de tarjeta o módulo
Varios procesadores en una misma placa base compartiendo memoria.
Clústeres y Grids
Varios sistemas completos interconectados a través de redes de alta velocidad.
Ejemplo: supercomputadoras como Summit o Fugaku.
Ventajas del Multiprocesamiento
Mayor velocidad de procesamiento al ejecutar varias tareas simultáneamente.
Escalabilidad: es posible añadir más procesadores para aumentar la capacidad.
Fiabilidad: algunos sistemas permiten redundancia; si un procesador falla, otros continúan.
Mejor aprovechamiento de recursos: balanceo de carga entre CPUs.
Desventajas del Multiprocesamiento
Complejidad en hardware: interconexiones y control de memoria son más difíciles de diseñar.
Costos elevados: tanto en hardware como en sistemas de refrigeración y energía.
Dificultad en software: los programas deben ser paralelizados para aprovechar los múltiples procesadores.
Problemas de sincronización: evitar condiciones de carrera, bloqueos y garantizar coherencia de memoria.
Ejemplos de Aplicación
Supercomputación: simulaciones científicas, predicción climática, investigación espacial.
Servidores empresariales: bases de datos, sistemas de transacciones, big data.
Procesamiento gráfico: renderizado 3D, videojuegos, GPUs con miles de núcleos.
Inteligencia artificial y machine learning: entrenamiento de redes neuronales.
Sistemas en tiempo real: aeronáutica, automotriz, telecomunicaciones.