En informática , la técnica de múltiples instrucciones, múltiples datos ( MIMD ) se emplea para lograr paralelismo. Las máquinas que utilizan MIMD tienen varios núcleos de procesador que funcionan de forma asincrónica e independiente. En cualquier momento, distintos procesadores pueden estar ejecutando distintas instrucciones en distintos datos.
Las arquitecturas MIMD se pueden utilizar en diversas áreas de aplicación, como diseño asistido por ordenador , fabricación asistida por ordenador , simulación , modelado y como conmutadores de comunicación. Las máquinas MIMD pueden ser de memoria compartida o de memoria distribuida . Estas clasificaciones se basan en cómo los procesadores MIMD acceden a la memoria. Las máquinas de memoria compartida pueden ser de tipo basado en bus , extendido o jerárquico . Las máquinas de memoria distribuida pueden tener esquemas de interconexión de hipercubo o malla .
Un ejemplo de sistema MIMD es Intel Xeon Phi , descendiente de la microarquitectura Larrabee . [2] Estos procesadores tienen múltiples núcleos de procesamiento (hasta 61 en 2015) que pueden ejecutar diferentes instrucciones en diferentes datos.
La mayoría de las computadoras paralelas, a partir de 2013, son sistemas MIMD. [3]
En el modelo de memoria compartida, todos los procesadores están conectados a una memoria "globalmente disponible", ya sea por software o por hardware. El sistema operativo suele mantener la coherencia de su memoria . [4]
Desde el punto de vista de un programador, este modelo de memoria se entiende mejor que el modelo de memoria distribuida. Otra ventaja es que la coherencia de la memoria la gestiona el sistema operativo y no el programa escrito. Dos desventajas conocidas son: la escalabilidad más allá de treinta y dos procesadores es difícil y el modelo de memoria compartida es menos flexible que el modelo de memoria distribuida. [4]
Existen numerosos ejemplos de memoria compartida (multiprocesadores): UMA ( acceso uniforme a memoria ), COMA ( acceso a memoria caché únicamente ). [5]
Las máquinas MIMD con memoria compartida tienen procesadores que comparten una memoria central común. En su forma más simple, todos los procesadores están conectados a un bus que los conecta a la memoria. Esto significa que cada máquina con memoria compartida comparte un CM específico, un sistema de bus común para todos los clientes.
Por ejemplo, si consideramos un bus con los clientes A, B, C conectados en un lado y P, Q, R conectados en el lado opuesto, cualquiera de los clientes se comunicará con el otro por medio de la interfaz de bus entre ellos.
Las máquinas MIMD con memoria compartida jerárquica utilizan una jerarquía de buses (como, por ejemplo, en un " árbol gordo ") para dar a los procesadores acceso a la memoria de los demás. Los procesadores de diferentes placas pueden comunicarse a través de buses internodales. Los buses admiten la comunicación entre placas. Con este tipo de arquitectura, la máquina puede admitir más de nueve mil procesadores.
En las máquinas MIMD (múltiples instrucciones, múltiples datos) con memoria distribuida, cada procesador tiene su propia ubicación de memoria individual. Cada procesador no tiene conocimiento directo sobre la memoria de otro procesador. Para compartir los datos, deben pasarse de un procesador a otro como un mensaje. Como no hay memoria compartida, la contención no es un problema tan grande con estas máquinas. No es económicamente viable conectar una gran cantidad de procesadores directamente entre sí. Una forma de evitar esta multitud de conexiones directas es conectar cada procesador a solo unos pocos más. Este tipo de diseño puede ser ineficiente debido al tiempo adicional requerido para pasar un mensaje de un procesador a otro a lo largo de la ruta del mensaje. La cantidad de tiempo que requieren los procesadores para realizar un enrutamiento de mensajes simple puede ser sustancial. Los sistemas se diseñaron para reducir esta pérdida de tiempo y el hipercubo y la malla se encuentran entre dos de los esquemas de interconexión más populares.
Entre los ejemplos de memoria distribuida (múltiples computadoras) se incluyen MPP (procesadores masivamente paralelos) , COW (grupos de estaciones de trabajo) y NUMA ( acceso a memoria no uniforme ). La primera es compleja y costosa: muchas supercomputadoras están acopladas mediante redes de banda ancha. Algunos ejemplos son las interconexiones de hipercubos y mallas. COW es la versión "casera" por una fracción del precio. [5]
En una máquina de memoria distribuida MIMD con una red de interconexión de sistemas de hipercubos que contiene cuatro procesadores, se colocan un procesador y un módulo de memoria en cada vértice de un cuadrado. El diámetro del sistema es el número mínimo de pasos que necesita un procesador para enviar un mensaje al procesador que está más alejado. Así, por ejemplo, el diámetro de un cubo de 2 es 2. En un sistema de hipercubos con ocho procesadores y cada procesador y módulo de memoria colocados en el vértice de un cubo, el diámetro es 3. En general, un sistema que contiene 2^N procesadores con cada procesador conectado directamente a otros N procesadores, el diámetro del sistema es N. Una desventaja de un sistema de hipercubos es que debe configurarse en potencias de dos, por lo que debe construirse una máquina que potencialmente podría tener muchos más procesadores de los que realmente se necesitan para la aplicación.
En una máquina de memoria distribuida MIMD con una red de interconexión en malla, los procesadores se colocan en una cuadrícula bidimensional. Cada procesador está conectado a sus cuatro vecinos inmediatos. Se pueden proporcionar conexiones envolventes en los bordes de la malla. Una ventaja de la red de interconexión en malla sobre el hipercubo es que el sistema en malla no necesita configurarse en potencias de dos. Una desventaja es que el diámetro de la red en malla es mayor que el del hipercubo para sistemas con más de cuatro procesadores.