Multiple instructions on multiple data
# Multiple instructions on multiple data

Multiple Instructions multiple data ou MIMD un des quatre modes de fonctionnement défini par la taxonomie de Flynn et désigne les machines multi-processeurs où chaque processeur exécute son code de manière asynchrone et indépendante. Pour assurer la cohérence des données, il est souvent nécessaire de synchroniser les processeurs entre eux, les techniques de synchronisation dépendent de l'organisation de la mémoire.

On distingue pour cela deux types d'architectures :

## MIMD à mémoire partagée

Les processeurs accèdent à une mémoire commune : la synchronisation peut se faire au moyen de:

* sémaphores
* verrous, ou Mutex (exclusion mutuelle)
* barrières de synchronisation

## MIMD à mémoire distribuée

Chaque processeur dispose de sa propre mémoire, et n'a pas accès à celle d'autres processeurs. Les informations sont communiquées en étant échangées entre les processeurs sous la forme de messages, de manière synchrone ou asynchrone. Chaque processeur ne peut être connecté directement à tous les autres, en raison du coût de ces connexions. Ainsi, chaque processeur n'est connecté qu'à quelques autres et un message entre deux processeurs n'étant pas immédiatement voisins empruntera un chemin constitué d'une séquence de processeurs. Certaines architectures sont particulièrement efficaces pour le temps et la façon dont les messages peuvent être transmis, par exemple l'hypercube.

