Taxonomie de Flynn
Avec l’évolution des ordinateurs, plusieurs types d’architectures ont été imaginés. En 1966, Michael J. Flynn (docteur en génie électrique) propose une classification des architectures des ordinateurs en 4 catégories. Cette classification est connue sous le nom de Taxonomie de Flynn. Elle se base sur le flux des données et du flux des instructions entre les composants externes de l’ordinateur (mémoire centrale et contrôleurs de périphériques d’entrées/sorties) et les composants internes de l’unité centrale de traitement (d’un côté l’unité de contrôle et de l’autre l’unité arithmétique et logique et la banque de registres).
La classification de Flynn distingue 4 architectures ou type de classes:
- Architecture SISD : Single Instruction, Single Data (instruction unique, donnée unique)
- Architecture SIMD : Single Instruction, Multiple Data (instruction unique, données multiples)
- Architecture MISD : Multiple Instruction, Single Data (instructions multiples, donnée unique)
- Architecture MIMD : Multiple Instruction, Multiple Data (instructions multiples, données multiples)
Architecture SISD
Dans l’architecture SISD, il n’existe aucun parallélisme, ni pour le flux d’instructions ni pour le flux de données. Les µP de ce type sont des machines mono-CPU. Ils exécutent séquentiellement une seule instruction à la fois traitant une seule donnée.
La vitesse de traitement de l’information dans l’architecture SISD est fortement dépendante de la vitesse à laquelle le CPU peut transférer l’information stockée dans la mémoire externe (mémoire centrale ou périphérique) dans la mémoire interne (banque de registres pour les données ou unité de contrôle pour les instructions).
L’architecture SISD est à la base de la plupart des µP modernes. Il existe 2 architectures fondamentales, soit:
- Architecture Harvard
- Architecture von Neumann
Architecture Harvard
Dans l’architecture Harvard, élaborée en 1944 à l’Université Harvard, le programme et les données sont stockés dans deux mémoires distinctes et physiquement séparées.
Chacune de ces mémoires dispose de son propre bus d’accès. Cette architecture autorise le transfert simultané des données et des instructions, permettant ainsi d’augmenter les performances du µP et de réduire le temps de traitement de l’information. Le coût de ce gain en performance est au détriment d’une complexité accrue de sa structure.
Architecture von Neumann
L’architecture von Neumann, conçue en 1945 et baptisée du nom de son concepteur, stocke le programme et les données dans la mémoire centrale.
Dans cette architecture, un bus système commun (µP-Bus) connecte l’unité de contrôle, l’unité arithmétique et logique avec sa banque de registres à la mémoire centrale et aux contrôleurs de périphériques d’entrées/sorties. La mémoire quant à elle contient aussi bien les instructions du programme que les données. On utilisera plutôt une mémoire non volatile pour stocker le code et une mémoire volatile pour les données.
Cette architecture permet de diminuer les nombres de broches nécessaires pour interfacer la mémoire centrale et les contrôleurs de périphériques d’entrées/sorties avec le CPU. Cependant, ceci est au détriment de la performance. En effet, l’accès au code et l’accès aux données doivent s’exécuter séquentiellement contrairement à l’architecture Harvard.
Architecture moderne des µP SISD
Les processeurs modernes utilisent aussi bien l’architecture Harvard que von Neumann.
L’architecture Harvard permet d’interfacer les deux mémoires caches de premier niveau, le i-cache (les instructions) et le d-cache (les données). Tandis que l’architecture von Neumann sert à interfacer les mémoires et les contrôleurs de périphériques internes au µP ainsi que la mémoire centrale et les contrôleurs de périphériques externes à l’unité centrale.
Cette architecture se retrouve sur les µP ARM mono-coeur.
Architecture SIMD
Dans l’architecture SIMD, l’unité centrale de traitement dispose de plusieurs unités arithmétiques et logiques, permettant d’exécuter la même instruction sur plusieurs ALU. Cette architecture est particulièrement bien adaptée au calcul vectoriel et matriciel.
Le calcul vectoriel ou matriciel nécessite généralement d’effectuer la même opération en parallèle sur des données différentes, par exemple des additions, des soustractions, des multiplications.
Les processeurs graphiques (GPU - Graphics Processing Unit) utilisent cette architecture. On la retrouve également sur le coprocesseur mathématique NEON des µP ARM.
Architecture MISD
Dans l’architecture MISD, l’unité centrale de traitement dispose de plusieurs unités de contrôle et unités arithmétiques et logiques, permettant d’exécuter en parallèle des instructions sur la même donnée.
Étant donné que chaque ALU effectue la même opération sur la même donnée, cette architecture est capable de détecter des erreurs d’exécution et permet ainsi de construire des ordinateurs tolérants aux pannes. Cependant, il n’existe que très peu de processeurs de ce type. Le processeur IBM AP-101S, utilisé par la navette spatiale “Space Shuttle” comme ordinateur de contrôle, en est l’un des rares exemples.
Architecture MIMD
Dans l’architecture MIMD, le processeur est une machine composée de plusieurs unités centrales de traitement (CPU), lesquelles sont nommées coeur (core). Ces machines sont capables de traiter en parallèle plusieurs flux de données et d’instructions distincts de façon complètement asynchrone.
L’architecture MIMD distingue deux modèles, le MIMD à mémoire partagée (Shared Memory) et le MIMD à mémoire distribuée (Distributed Memory). Dans le modèle à mémoire partagée, les coeurs du processeur se partagent une même mémoire centrale. La communication entre les coeurs du processeur s’effectue au travers de la mémoire.
Dans le modèle à mémoire distribuée, chaque coeur dispose de sa propre mémoire centrale. La communication entre les coeurs s’effectue au travers d’un réseau d’interconnexion. Différentes topologies permettent de connecter les unités de traitement, dont la topologie en arbre, la topologie maillée ou la topologie hypercube.
Le modèle à mémoire partagée est plus simple à programmer que le modèle à mémoire distribuée. Tel GNU/Linux, de nombreux systèmes d’exploitation modernes supportent ce modèle. Par contre, le modèle à mémoire distribuée permet de réaliser des systèmes plus résistants aux pannes et des systèmes plus évolutifs.