# MIMD

Architetture correlate (Tassonomia di Flynn) :
| | Istruzione Singola | Istruzioni Multiple |
| Dato Singolo | SISD | MISD |
| Dati Multipli | SIMD | MIMD |
Multiple Instruction stream Multiple Data stream (MIMD) è un'architettura parallela in cui unità di elaborazione distinte eseguono simultaneamente elaborazioni su flussi di dati diversi. Esempi di questa architettura sono i sistemi multiprocessore, i transputer o i computer collegati in rete per le elaborazioni distribuite. In configurazione multiprocessor le CPU possono condividere dati allocati in memoria comune accessibile via bus di sistema.

## Architettura MIMD

Nel modello di calcolo MIMD ci sono più processori che operano in parallelo in modo asincrono. Ciascun processore esegue un programma (o istruzione) diverso su dati diversi. In un singolo (ma grande) problema, ogni processore risolve un sotto-problema. La comunicazione tra i vari processori avviene sia mediante la memoria condivisa (si parla di processori "tightly coupled", strettamente accoppiati), sia per mezzo di una rete di interconnessione (multi computer debolmente accoppiati o "loosely coupled").

## Architettura MIMD multiprocessore

Nell'architettura MIMD multiprocessore, i processori condividono le variabili (o strutture di dati) in una memoria comune. La comunicazione avviene mediante la condivisione della memoria. Per questo motivo i processori necessitano di alcuni meccanismi di controllo che risolvano il probabile conflitto di scrittura in memoria da parte di due o più processori contemporaneamente. In questa architettura il calcolo è molto veloce in quanto tutti i processori accedono simultaneamente alla memoria condivisa, però c'è da dire che tale architettura è anche molto complessa in quanto devono essere presenti numerosi circuiti di decodifica tra i processori, ma soprattutto ci vuole una memoria molto grande e quindi molto costosa.

## Architettura MIMD multi computer

Nell'architettura MIMD multi computer ogni processore ha una memoria propria. I vari processori comunicano tra loro mediante uno scambio di messaggi definito "message passing". La comunicazione tra i vari processori è affidata a una rete di interconnessione che consente a ciascun processore di trasmettere dati a qualunque altro processore presente nella stessa rete. I processori possono anche essere fisicamente lontani, come capita nei sistemi distribuiti. Però siccome le prestazioni calano in funzione della qualità di comunicazione tra i processori, non è consigliato creare una rete che copra enormi distanze, pena la velocità di scambio dei dati. È,comunque, molto complicato progettare una rete per molti processori. La rete viene progettata come una macchina special-purpose dove la sua topologia intrinseca è una caratteristica distintiva di un tipo di multi computer. La complessità della rete è valutata in gradi (numero di connessioni che si dipartono da ogni nodo) e in diametro (distanza minima, espressa in numero di nodi, tra 2 nodi più lontani). Più il grado è elevato e più piccolo è il diametro, implicano rispettivamente un elevato parallelismo nella comunicazione e velocità di comunicazione più elevata.
Sono esempi di reti multi computer le reti a stella, ad albero, a cubo, a griglia, ad anello, a mesh e la rete completa (tutte le tipologie di rete fuse insieme).