Architecture Parallèle2333
Architecture Parallèle2333
Ministère de l’enseignement supérieur et de la recherche scientifique وزارة التعليم العالي والبحث العلمي
Département d'Informatique
Filière : Informatique
Support de cours
Architectures parallèles
Avant-propos.................................................................................................................. 9
Introduction .................................................................................................................. 10
1. Introduction ..................................................................................................... 11
2. Préhistorique ................................................................................................... 11
5. Question de révision........................................................................................ 25
6. Conclusion ........................................................................................................ 27
1. Introduction ..................................................................................................... 28
2
2.2 Approche de programmation ..................................................................... 36
6. Conclusion ........................................................................................................... 70
Conclusion ................................................................................................................... 79
3
Liste des figures
Figure 1 : Le calculateur Mark I. ................................................................................. 12
Figure 2 : Une vue partielle de l’ENIAC. ................................................................... 13
Figure 3 : Une vue partielle de l’EDVAC. .................................................................. 14
Figure 4 : Carte perforée. ............................................................................................. 15
Figure 5 : Tubes à vide................................................................................................. 15
Figure 6 : Les transistors utilisés pour les machines de la seconde génération. .......... 17
Figure 7: Les premiers circuits intégrés. ...................................................................... 18
Figure 8 : L’IBM 360 de INRA en 1980. .................................................................... 18
Figure 9 : Le premier microprocesseur commercialisé « Intel 4004 ». ....................... 20
Figure 10 : L’ordinateur personnel « IBM PC » , modèle 5150. ................................. 20
Figure 11 : Les besoins en performances (Flops) ........................................................ 30
Figure 12 : Les organisations de processeurs. ............................................................. 32
Figure 13 : L’architecture SISD. .................................................................................. 32
Figure 14 : L’architecture SIMD. ................................................................................ 33
Figure 15 : l’architecture d’un processeur vectoriel. ................................................... 36
Figure 16: L’étape 1 de l’addition de 16 nombres sur 4 processeurs SIMD. .............. 38
Figure 17: L’étape 2 de l’addition de 16 nombres sur 4 processeurs SIMD. .............. 38
Figure 18: L’étape 3 de l’addition de 16 nombres sur 4 processeurs SIMD. .............. 39
Figure 19: L’étape 4 de l’addition de 16 nombres sur 4 processeurs SIMD. .............. 39
Figure 20 : L’architecture MISD. ................................................................................ 41
Figure 21 : L’étape 1 de la somme, soustraction, produit et la division de ces
nombressur 4 processeurs MISD. ................................................................................ 43
Figure 22 : L’étape 2 de la somme, soustraction, produit et la division de ces
nombressur 4 processeurs MISD. ................................................................................ 43
Figure 23 : L’étape 3 de la somme, soustraction, produit et la division de ces
nombressur 4 processeurs MISD. ................................................................................ 44
Figure 24: l’architecture MIMD. ................................................................................. 46
Figure 25: MIMD à mémoire partagée ........................................................................ 47
Figure 26: MIMD à mémoire distribuée ...................................................................... 48
Figure 27: Le réseaux d’interconnexion dans une architecture MIMD à mémoire
distribué........................................................................................................................ 49
Figure 28: Clusters à liens directs sans disques partagés ............................................. 51
4
Figure 29: Clusters avec disques partagés ................................................................... 51
Figure 30: architecture d’un processeur SMP. ............................................................. 52
Figure 31:architecture d’un processeur NUMA. ......................................................... 53
Figure 32 : MIMD à bus. ............................................................................................. 54
Figure 33 : MIMD en réseau. ....................................................................................... 55
Figure 34 : Topologie en bus unique (cas MIMD distribué). ...................................... 57
Figure 35 : Topologie en réseau complètement connecté. ........................................... 58
Figure 36 : topologie en crossbar. ................................................................................ 59
Figure 37 : Exemple de la topologie en maillage. ....................................................... 60
Figure 38 : Exemple de topologie avec un seul cube................................................... 61
Figure 39: étape 1 de l’addition de 16 nombres sur 4 processeurs MIMD à bus unique.
...................................................................................................................................... 63
Figure 40 : étape 2 de l’addition de 16 nombres sur 4 processeurs MIMD à bus unique.
...................................................................................................................................... 63
Figure 41 : étape 3 de l’addition de 16 nombres sur 4 processeurs MIMD à bus unique.
...................................................................................................................................... 64
Figure 42 : étape 1 de l’addition de 16 nombres sur 4 processeurs MIMD en réseau . 65
Figure 43 : étape 2 de l’addition de 16 nombres sur 4 processeurs MIMD en réseau . 66
Figure 44 : étape 3 de l’addition de 16 nombres sur 4 processeurs MIMD en réseau . 66
Figure 45 : étape 4 de l’addition de 16 nombres sur 4 processeurs MIMD en réseau. 67
5
Liste des tables
6
Liste des algorithmes
Programme 1: l’addition de 16 nombres sur 4 processeurs SIMD. ............................ 40
Programme 2 : calcul de la somme, soustraction, produit et la division sur 4 processeurs
MISD............................................................................................................................ 45
Programme 3 : d’addition MIMD bus unique............................................................. 65
Programme 4 : Programme d’addition MIMD réseau. ............................................... 68
7
Liste des acronymes
FI : Flux d’Instruction.
FD : Flux de Données.
UC : Unité de Contrôle.
UT : Unité de Traitement.
ML : Mémoire Locale.
8
Avant-propos
Ce polycopié représente une synthèse des cours assurés depuis 2014 à ce jour au sein
du département d'informatique à l’université 08 Mai 1945 - Guelma.
9
Introduction
L’architecture de von Neumann est un modèle d’ordinateur qui utilise une seule
structure de stockage pour conserver à la fois les instructions et les données du calcul
que ce soit entrées ou résultats. En traitant les instructions de la même façon que les
données, un ordinateur qui a un programme stocké en mémoire peut facilement
modifier les instructions. Cependant, cet objectif est devenu moins important avec
l'apparition de l’utilisation de registres d’index et de l’adressage indirect en tant que
caractéristique standard des processeurs actuels. Grace aux nouvelles architectures des
ordinateurs, la modification à faible échelle des instructions du programme est devenue
inutile car cela rendrait inefficaces les techniques de gestion de mémoire cache et de
pipeline dans les processeurs modernes ; c’est exactement pourquoi l’architecture de
type Von Neumann est devenue obsolète. Par conséquent, un nouveau type
d’architectures d’ordinateurs a apparu ; dit « architecture parallèle ». En plus, les
architectures parallèles sont devenues le paradigme dominant pour tous les ordinateurs
depuis les années 2000.
10
Chapitre I : Historique et évolution des différentes
architectures
1. Introduction
Il est important de comprendre que même si les premiers ordinateurs ont été achevés
après la seconde guerre mondiale, leur conception repose sur le résultat de divers
prototypes pendant plusieurs années. L’objectif de ce chapitre est de présenter
l’historique et les principales étapes d’évolution des différentes architectures des
ordinateurs.
Ce chapitre est organisé comme suit : tout d’abord un préhistorique des ordinateurs
informatiques est détaillé dans la section 2. Dans la section 3, les différentes
générations d’architecture sont définies en mettant l’accent sur leurs historiques,
caractéristiques et une brève discussion de chacune entre eux. La section 4 est consacrée
à la citation de quelques ordinateurs de différentes générations. Une série corrigée de
questions de révision est donnée dans la section 5 alors qu’une conclusion est présentée
dans la section 6.
2. Préhistorique
L'ère des ordinateurs modernes a commencé avec les grands développements de la
seconde guerre mondiale. Plus précisément, les premières séries d’ordinateurs dites
« séries-Z » qui ont été lancé par « Konrad Zuse » en 1938. Ils étaient des calculateurs
électromécaniques comportant une mémoire et assuraient une programmation limitée.
Le « Z1 » (ou Zuse I), n’a pas fonctionné correctement, mais il a donné à son inventeur
l'expérience nécessaire pour achever d'autres modèles tels que le Z2 en 1939, le « Z3 »
en 1941 et le « Z4 » en 1945 [1] [2] [3].
11
minute. En 1944, le « Harvard Mark I » a été inventé par « Howard Aiken » au niveau
de « IBM » [1] [2] [3]. Ce dernier est appelé aussi selon « International Business
Machines » (IBM) « Automatic Sequence Controlled Calculator » (ASCC, Figure1).
3.1.1 Historique
Avec la fin de la seconde guerre mondiale, plusieurs ordinateurs ont vu le jour. Parmi
les premiers ordinateurs de cette génération, on peut citer l’« Electronic Numerical
Integrator and Computer» (ENIAC, Figure 2 [4]) achevé en 1944 par « Presper Eckert »
et « John William Mauchly » et son successeur l' « Electronic Discrete Variable
Automatic Computer» (EDVAC, Figure 3) achevé en 1945 et l’ « UNIVersal
Automatic Computer I» (UNIVAC I ) en 1951 [1].
En 1946, alors que le projet EDVAC était en cours, un projet similaire a été lancé à
l'université de Cambridge. Il s'agissait de construire un ordinateur à « programme
enregistré », connu sous le nom de « Electronic Delay Storage Automatic Calculator »
12
(EDSAC). C'est en 1949 que l'EDSAC est devenu le premier ordinateur complet, à
programme enregistré et entièrement opérationnel [1].
13
Figure 3 : Une vue partielle de l’EDVAC [w2].
Cependant, les premières machines utilisant l’architecture de von Neumann ont été
apparu à partir de 1948. Par conséquent, et contrairement à toutes les ordinateurs
précédentes, les programmes étaient stockés dans la même mémoire que les données et
pouvaient, ainsi, être manipulés comme des données. La première machine qui utilisait
cette architecture est le « Small-Scale Experimental Machine » (SSEM) construit à
l'université de Manchester en 1948 [2] [3]. La table 1 illustre quelques généralités sur
ordinateurs de la première génération.
3.1.2 Caractéristiques
La première génération était caractérisée par [4] :
14
• Appareils immenses, lourds et consommaient une énergie élevée.
• Prix élevé par rapport à leurs capacité et performance.
15
3.2 Deuxième génération ( 1957- 1963 )
3.2.1 Historique
A partir de 1956, les transistors ont remplacé avantageusement les tubes à vide. Depuis,
la taille des ordinateurs n'a cessé de diminuer. En plus, grâce aux dernières avancées
technologiques concernant la mémoire à tores magnétiques, les ordinateurs de la
seconde génération étaient plus petits, plus rapides, plus fiables et consommaient moins
d’énergie par rapport aux ordinateurs de la première génération. Mais comme les
premiers ordinateurs de cette génération ont été spécialement créés pour effectuer des
taches bien précises des laboratoires et des secteurs financiers, elles étaient très chères,
et trop puissantes pour les faibles exigences de ces secteurs par rapport aux machines
de la première génération [5].
3.2.2 Caractéristiques
Les ordinateurs de la seconde génération ont été caractérisées par [4] :
16
Figure 6 : Les transistors utilisés pour les machines de la seconde génération [w5].
3.2.3 Discussion
L’enregistrement des programmes dans la mémoire centrale signifie qu'une instruction
pouvait être remplacée directement par une autre en vue d'effectuer une autre fonction.
Aussi, l’utilisation des langages de haut niveau comme les Cobol (COmmon
BusinessOriented Language) et FORTRAN (FORmula TRANslator) a permis de
remplacer le langage machine et l'assembleur par des mots, des phrases et des formules
mathématiques beaucoup plus proches du langage naturel, ce qui a facilité la
programmation de ces ordinateurs.
Par conséquent, les ordinateurs ont eu la flexibilité nécessaire pour devenir utilisables
particulièrement dans les secteurs financiers et de nouveaux métiers sont émergés tels
que : le programmeur, l’analyste et l’expert aussi l'industrie du logiciel a été bien
développé avec les ordinateurs de la seconde génération.
3.3.1 Historique
Malgré que l’intégration des transistors représente une amélioration significative par
rapport à l’utilisation des tubes à vide, ils ont un autre problème qui est la génération
de beaucoup de chaleur en consommant plus d'énergie et cela a endommagé les parties
internes sensibles de l'ordinateur. C’est pourquoi un ingénieur de « Texas Instruments »
nommé « Jack Kilby » a développé ce qu’on appelle aujourd’hui « le circuit intégré »
17
en 1968 (Figure7) à base de quartz pour résoudre ce problème [5]. Le premier circuit
intégré combinait trois composants électroniques sur un petit disque de silicium.
18
3.3.2 Caractéristiques
Généralement les ordinateurs de la troisième génération sont caractérisés par [4] :
3.3.3 Discussion
La troisième génération est particulièrement marquée par la distribution de l'ordinateur,
créant un nouveau marché, celui du grand public parce que l’intégration des circuits
intégrés a permis de réduire considérablement le coût du matériel. Cependant, les
ordinateurs étaient toujours énormes, surpuissants et centralisent les traitements.
3.4.1 Historique
Après les circuits intégrés, les principales améliorations à réaliser tournent autour de la
réduction de leurs tailles. Par conséquent, plusieurs techniques ont été apparues comme
Le LSI (Large Scale Integration), le VLSI (Very Large Scale Integration) et l'ULSI
(Ultra Large Scale Integration). Ces derniers permettent de placer plusieurs centaines,
centaines de milliers ou millions, respectivement, de composantes sur le même support
[5].
Le premier microprocesseur est le « Intel 4004 » qui a été développé en 1971 (Figure
9). Il était le premier circuit intégré incorporant tous les éléments d'un ordinateur dans
un seul boîtier : unité de calcul, mémoire, contrôle des entrées/sorties. Alors qu'il fallait
avant plusieurs circuits intégrés différents, chacun dédié à une tâche particulière, un
seul microprocesseur pouvait assurer autant de travaux différents que possible.
19
Figure 9 : Le premier microprocesseur commercialisé « Intel 4004 » [w7].
En 1981, IBM a lancé son premier ordinateur personnel ( Personnal computer, Figure
10), à utiliser à la maison, au bureau, dans les écoles, etc.
20
• L’apparition des réseaux informatiques.
• La création des langages simplifiés et évolués de programmation.
3.4.3 Discussion
La taille réduite des circuits intégrés a permis de réduire la taille et le prix des
ordinateurs ainsi qu’améliorer leurs performances, leur puissance, et également leur
fiabilité. C'est l’apparition de la micro-informatique et les ordinateurs ont continué de
diminuer en termes de taille, jusqu'à la création des ordinateurs portables tenant dans
une sacoche, puis des ordinateurs tenant dans la main. Cependant, la construction des
gros ordinateurs n'est pas abandonnée.
En plus, les ordinateurs de la quatrième génération pouvaient être reliés entre eux ou
mis en réseau en utilisant soit un réseau local dit aussi LAN (Local Area Network) ou
un réseau étendu, appelé WAN (Wide Area Network) pour partager de la mémoire, des
logiciels, des périphériques, des informations ou même pour communiquer entre eux.
De cette façon, ils pouvaient également distribuer le temps machine entre plusieurs
terminaux dans l’objectif d’améliorer leurs performances.
3.5.1 Historique
Les exigences de performance des ordinateurs de cinquième génération ont été mises
en lumière lors de la sixième Conférence Internationale sur le Génie Logiciel (Tokyo
1982. En effet, ce terme était une initiative du ministère japonais du Commerce
international et de l’Industrie (MITI), lancée en 1982, pour créer des ordinateurs
utilisant le calcul massivement parallèle et la programmation logique. Le logiciel de
base pour les ordinateurs de cinquième génération est le reflet direct de la structure des
systèmes d'application prévus et comprend l'interface intelligente, les systèmes de
résolution de problèmes et d'inférence et les systèmes de gestion de bases de
connaissances. Les caractéristiques de ces ordinateurs restent encore imprécises, mais
elles s'orientent vers des machines « intelligentes » qui devraient faire beaucoup de
traitements en parallèle, utiliser de façon importante des systèmes intelligents basés sur
des connaissances, et posséder des interfaces en langage naturel [6].
21
ce qui concerne le matériel, la première machine séquentielle à inférences logique,
est « Personal Sequential Inference I » (PSI-I) et ses versions avancées : « PSI-II » a
été réalisée en 1986 et PSI-III a été achevée en 1990. Ces modèles ont été construits
concurremment par Mitsubishi et Oki. En ce qui concerne les machines parallèles,
plusieurs modèles dits « Parallel Inference Machine » (PIM) ont été construits dont le
plus puissant est PIM/p, construit par Fujitsu, début 1992 [7] [8].
3.5.2 Caractéristique
Définir les caractéristiques des ordinateurs de la cinquième génération est plutôt
difficile, puisqu’ils sont toujours en train de se développer. Toutefois, on peut citer
quelques particularités de ces ordinateurs [4] :
3.5.3 Discussion
Plusieurs améliorations dans la construction des ordinateurs et la technologie en général
ont été faits pendant cette génération. Une de ces améliorations concerne le calcul
parallèle, qui remplace la simple unité de traitement décrite par von Neumann par un
ensemble de processeurs travaillant en parallèle pour résoudre le même problème. Une
autre amélioration est la technologie des supraconducteurs, qui éliminent la résistance
à la conductivité électrique et permettent d'améliorer les vitesses de transmission de
l'information. Également, en utilisant les dernières avancées technologiques, les
ordinateurs de la cinquième génération pourraient comprendre le langage naturel et
simuler la pensée humaine. Par exemple, on se basant sur les techniques de
l’intelligence artificielle, des systèmes experts aident les médecins à réaliser des
22
diagnostics en appliquant les prescriptions qu'un médecin utiliserait pour répondre aux
besoins d'un patient [5].
Konrad Zuse
Allemagne - Utilisé par l’institut de recherche
Zuse 3
1941
aéronautique allemand.
- Il est destiné à concevoir des avions et
des missiles.
- Un ordinateur électromécanique
multi-usage programmable.
- Il a été livré à l'institut de
mathématiques appliquées de l'École
Konrad Zuse
Allemagne
1945
électromécanique et à programme
Harvard Mark I
États-Unis
externe.
1944
23
- Il a été financé par la marine des États-
Royaume-Unis
- Il est destiné au décodage des
Harvard)
1947
messages secrets allemands par les
Anglais.
- Après une série de tests il a été livré au
centre de test de l'US Navy en 1947.
- Il était partiellement électronique et
Harvard Mark III
Royaume-Unis
Howard Aiken
(université de
partiellement électromécanique.
Harvard)
1949
complètement électroniques.
Royaume-Unis
Howard Aiken
programme enregistré.
- Il a été toujours l'armée de l'air
américaine.
- Le premier ordinateur entièrement
John Presper Eckert
John W. Mauchly
électronique.
États-Unis
1945
&
all.
24
- L’un des premiers ordinateurs
États-Unis
Mauchly,
1951
- Le premier ordinateur est livré à
l'United States Census Bureau le 30
mars 1951.
5. Questions de révision
Question 1 : Quelles sont les 5 générations de l'ordinateur ?
Solutions :
Question 1 :
Question 2 :
Les premiers ordinateurs sont apparus après la seconde guerre mondiale bien
précisément, le premier ordinateur entièrement électronique est le ENIAC achevé en
1945. Cependant, il est important de comprendre que leur conception était lancée bien
avant et elle repose sur le résultat de divers prototypes pendant plusieurs années.
25
Question 3 :
Question 4 :
Génération
Machine
Caractéristiques
Période
• Calcul numérique.
Mark I
IBM 1401
périphériques.
LARC
IBM 360
26
• Réduction extrême des composants.
• Apparition des microprocesseurs.
• Discrimination des champs d’application.
DIEHL Alphatronic
• Apparition de la micro-informatique.
Quatrième
1971 -1982
6. Conclusion
Dans ce chapitre, les principaux acteurs qui ont attribué à l’évolution des architectures
des ordinateurs ainsi que leurs différentes générations et quelques exemples
d’architectures ont été présenté.
Les architectures des processeurs parallèles seront présentées dans le chapitre suivant.
27
Chapitre II Organisation et concepts des
architectures parallèles
1. Introduction
Le domaine du traitement parallèle concerne les méthodes architecturales et
algorithmiques permettant d'améliorer les performances des ordinateurs numériques ou
d'autres critères tels que la rentabilité et la fiabilité grâce à diverses formes de
concurrence. Même si le calcul concurrent existe depuis les premiers jours des
ordinateurs numériques, ce n'est que récemment qu'il a été appliqué d'une manière
permettant d'obtenir de meilleures performances, ou un meilleur rapport coût-efficacité,
par rapport aux superordinateurs habituels. Comme tout autre domaine scientifique ou
technologique, l'étude des architectures et algorithmes parallèles nécessite une
motivation, une vue d'ensemble montrant les relations entre les problèmes et les
différentes approches pour les résoudre, ainsi que des modèles pour comparer,
connecter et évaluer les nouvelles idées, dont l’objectif de ce chapitre.
Ce chapitre est organisé comme suit : tout d’abord la définition des architectures
parallèles, leurs principales caractéristiques et leurs classifications sont discutés dans la
section 1. L’architecture SIMD est présentée dans la section 2 en spécifiant ses aspects
architecturaux, son approche de programmation et en donnant à la fin un exemple
illustratif. De même, l’architecture MISD est détaillée dans la section 3 et MIMD dans
la section 4. Une série de questions de révision est donnée dans la section 5 alors qu’une
conclusion est présentée dans la section 6.
1.1 Définitions
Dans les architectures des ordinateurs, on peut définir une machine parallèle comme
étant, essentiellement, une machine qui possède un ensemble de processeurs qui
coopèrent et communiquent ensemble [4] et qui concourent dans le but d’exécuter un
programme parallèle. Par conséquent, on peut définir les ordinateurs parallèles comme
étant des machines qui comportent une architecture parallèle.
28
Un programme parallèle est un ensemble fini de processus séquentiels communiquant
entre eux par échange de messages.
La réponse à cette question se résume dans les trois points suivants [9] :
Le deuxième facteur concerne le fait que (2) Les calculateurs avec une seule unité
centrale de traitement (central processing unit CPU) sont souvent incapables de
répondre à certains besoins comme : l’analyse des flots de liquides et aérodynamique,
la simulation de systèmes complexes (physique, économie, biologie, météo, technique,
etc.), l'analyse de données massives pour la prise de décisions stratégiques, la
conception assistée par ordinateurs (CAO) et le Multimédia, etc. Du fait que ces
applications sont caractérisées par une très grande quantité de calculs numériques et/ou
une grande quantité de données en entrée (Figure 11).
L’une des solutions à ce besoin en performances est la création des architectures dans
lesquelles plusieurs CPUs fonctionnent dans le but de résoudre une application donnée
[9] [10]. De tels calculateurs ont été organisés de différentes manières selon certaines
caractéristiques clés, notamment le nombre et complexité des CPU individuels, la
disponibilité de mémoires partagées ou communes, la topologie d’interconnexion, les
performances des réseaux d’interconnexion, les dispositifs d’Entrées/Sorties, etc.
29
12000
10000
8000
Taille Mémoire MB
6000
4000
2000
Alors que les performances architectures parallèles sont limités lorsqu’il existe dans le
programme parallèle :
30
1. Des dépendances fonctionnelles : que ce soit des dépendances de données, ou
des dépendances de contrôle.
2. Des dépendances de ressources : si le nombre de processeurs est insuffisant
par rapports le nombre des taches parallèles indépendantes.
3. Des délais de communication élevés : les communications peuvent dans ce cas
augmenter le temps d'exécution et donc il ne sera pas avantageux de paralléliser
une application dans ce cas.
31
processor
organization
Symmetric Non-Uniform
MultiProcessor Memory Access Clusters
SMP NUMA
32
Aussi, nous ne pouvons pas appliquer les principes de la programmation séquentielle
en programmation parallèle. Parce qu’en programmation parallèle, le programmeur doit
décider s’il applique le parallélisme de données (dans le cas d’une architecture SIMD
par exemple), ou s’il opte pour un parallélisme d’instructions (MISD) ou encore s’il
applique les deux parallélismes simultanément (MIMD).
2. L’architecture SIMD
L’architecture SIMD est une architecture dont toutes les unités de traitement exécutent
le même flux d’instructions qui opèrent sur des flux de données différents (Figure 14)
[1] [9].
FD
UT1 ML1
FI
UC
FD
UT2 ML2
FD
UTn MLn
UC: Unité de Contrôle. UT: Unité de traitement. ML: Mémoire Locale.
33
Cette architecture possède une seule unité de contrôle et plusieurs unités de traitement
qui sont, en général, très simples avec une UAL qui exécute l’instruction transmise par
l’unité de contrôle, quelques registres, et une mémoire locale. Les unités de calcul
totalement synchronisées. Chaque unité d’exécution exécute la même instruction et
chaque unité de traitement calcule un élément du résultat. L’architecture SIMD est
caractérisée par un seul cycle d’horloge par traitement et un seul compteur ordinal. Une
instruction unique contrôle l’exécution simultanée de plusieurs éléments de calcul.
Notons que, les unités d’exécution parallèles sont synchronisées et chaque unité a son
propre registre d’adresses [9]. Les processeurs vectoriels sont souvent considérés
comme des architectures de type SIMD.
Le premier calculateur SIMD est ILLIAC IV crée aux années 70, avec 64 processeurs
relativement puissants. Un autre exemple des machines actuelles est le Connection-
Machine (CM2) avec 65536 unités de traitement très simples connectées en hypercube.
La Table 4 illustre quelques exemples de processeurs SIMD [9].
34
Les principaux avantages de SIMD sont :
Les processeurs vectoriels [9] : Ils sont des calculateurs SIMD qui peuvent opérer sur
des vecteurs en exécutant simultanément la même instruction sur des paires d’éléments
vectoriels et, donc, chaque instruction est exécutée par un élément de calcul séparé.
Les processeurs vectoriels ont généralement des registres vectoriels qui peuvent stocker
de 64 à 128 mots chacun. Ils exécutent des opérations sur des scalaires et des
instructions opérant sur des vecteurs (Figure 15). L’exécution d’une instruction
vectorielle se résume dans les étapes suivantes :
35
Figure 15 : l’architecture d’un processeur vectoriel [15].
Parmi les calculateurs vectoriels achevé, on peut citer : CDC Cyber 205, CRAY, IBM
3090, NEC SX, Fujitsu VP, Hitachi S8000.
Le programmeur peut utiliser dans ce cas des outils spécialisés comme les bibliothèques
implantant la norme POSIX à l’aide d’un langage qui intègre les threads dans sa
sémantique, comme le C et le Java. La difficulté de ce modèle de programmation est la
synchronisation des accès à la mémoire entre les tâches concurrentes. Aussi, pour
36
améliorer les performances, il suffit d’avoir toujours suffisamment de threads
concurrents à exécuter pour occuper au maximum les différents processeurs.
Le principal avantage du Multithreading est que cette solution est utilisable sur des
architectures à mémoire partagée ce qui améliore efficacement les performances
particulièrement en termes de temps de communication.
Cependant, l’inconvénient majeur dans ce cas est le surcoût relatif au basculement entre
threads. En effet, on doit enregistrer l’environnement d’exécution du thread qu’on veut
mettre en attente et chargé les registres du processeur avec le contexte d’exécution du
nouveau thread à exécuter.
2.2.2 Discussion
Dans une architecture SIMD, chaque traitement est exécuté sur un ensemble différent
de données par unité de traitement différente. De tels processeurs sont hautement
spécialisés pour les problèmes numériques exprimés sous forme de matrice ou de
vecteur, c’est à dire ils opèrent sur des vecteurs de données d’où le nom de processeurs
vectoriels. Fonctionnement général des unités SIMD concerne :
Dans ce cas et du point de vue du programmeur, cela signifie qu’il peut utiliser des
instructions sur des vecteurs dans ses programmes. Sachant que le compilateur traduit
ces instructions en instructions sur des vecteurs au niveau machine c’est à dire le
compilateur s’occupe de « vectoriser » le code automatiquement.
37
La communication entre processeurs est prise en charge par le programmeur en utilisant
un mécanisme d’échange de messages qui sert à traduire les transferts d’informations
et les nécessaires synchronisations entre processeurs. Il existe plusieurs outils standards
à utiliser pour cela, tels que: MPI, PVM, etc.
Soit l’ensemble de 16 nombres, les étapes du calcul de l’addition de ces nombres sur 4
processeurs en utilisant une architecture SIMD sont les suivants [9]:
D1 D2 D5 D6
D3 D4 D7 D8
UC
D9 D10 D13 D14
D11 D12 D15 D16
38
SP5= SP1+SP3 SP6= SP2+SP4
UC
SP3 SP4
UC
For (i = 0; i < 4; i = i + 1)
Limite = 4;
Moitié = 4
Repeat
moitié = moitié / 2;
39
if (Pn >= moitié && Pn < limite)
limite = moitié;
3. Architecture MISD
Dans une architecture MISD, chaque processeur exécute une séquence différente
d’instructions sur les mêmes données utilisées par les autres processeurs.
Dans une architecture MISD, plusieurs flux d’instructions sont appliqués sur un seul
flux de données (Figure 20), et par conséquent une seule séquence de données est
transmise à un ensemble de processeurs. Théoriquement, certains auteurs considèrent
que cette classe n’est pas commercialisé et d’autres auteurs considèrent le pipeline
comme un schéma MISD [9]. Par conséquent, l’architecture MISD reste un modèle
théorique car il n'existe aucune machine construite sur ce modèle [4]. Alors que d’autres
chercheurs considèrent les GPU (Graphical Processing Unit) comme une architecture
MISD [13].
40
FD
UT1 ML1
FI
FD
UC
UT2 ML2
FD FI
UTn MLn
FD FI
41
le cas d’un « send » non-bloquant, le processus envoie le message et poursuit son
traitement sans attendre [10].
Néanmoins, les communications sur des machines à mémoire distribuée sont toujours
assez coûteuses en temps par rapport à leur puissance de calcul. Cela induit que la
programmation parallèle devient plus complexe : il faut essayer de minimiser les
communications, dans le même temps, que de partager les données et les activités pour
maintenir les processeurs occupés.
3.2.2 Discussion
Dans ce mode, la même séquence de données est traitée par plusieurs processeurs en
parallèle. Du point de vue du programmeur, cela signifie que chaque processeur va
travailler sur une copie de cette séquence de données enregistrée dans sa mémoire
locale. Cela augmente le risque de l’incohérence de données. C’est pourquoi, il est
nécessaire que le maintien de la cohérence doive être contrôlé par le hardware, le
software et le programmeur lui-même.
42
3.3 Exemple illustratif [9]
Etape 1 : l’unité de contrôle envoie les mêmes 4 nombres et des flux d’instruction
différents vers tous les processeurs (Figure 21).
D1 D2 D5 D6
D3 D4 D7 D8
UC
D9 D10 D13 D14
D11 D12 D15 D16
Etape2 : calcul des résultats partielles sur les processeurs individuels (Figure 22).
SP1= SP2=
somme(D1,D2,D Soustraction(D5,
3,D4 ) D6,D7,D8)
UC
SP3= SP4=
multiplication(D9 Div(D13,D14,D1
,D10,D11,D12 ) 5,D16 )
Figure 22 : L’étape 2 de la somme, soustraction, produit et la division de ces
nombressur 4 processeurs MISD.
43
Etape 3 : Les résultats partiels sont donc obtenus (Figure 23).
SP1 SP2
UC
SP3 SP4
Somme=0 ;
For (i = 0; i < 4; i = i + 1)
if (Pn =! 1)
/* calcul de soustraction
For (i = 1; i < 4; i = i + 1)
if (Pn =! 1)
/* calcul du produit
44
prod = 1 ;
For (i = 0; i < 4; i = i + 1)
if (Pn =! 1)
/* calcul de division
For (i = 1; i < 4; i = i + 1)
if (Pn =! 1)
4. Architecture MIMD
L’architecture MIMD est une architecture dont les unités de traitement exécutent des
différents flux d’instructions qui opèrent sur des flux de données différents.
45
FD ML FI
UC UT
FI UC: Unité de Contrôle.
CPU1 … UT: Unité de traitement.
Réseau d’ interconnexion
… ML: Mémoire Locale.
FD … FI: Flux d’instruction.
ML
FI FD: Flux de Données.
UC UT
CPUn
• L’organisation de la mémoire
• La topologie du réseau d’interconnexion.
46
• Une mémoire distribuée (Distributed Memory : DM) : chaque processeur
dispose d’une mémoire locale .
Sachant que, il est possible de concevoir une architecture MIMD à mémoire hybride
(Hybrid Memory). Il s’agit d’une architecture à mémoire partagée et mémoire
distribuée à la fois.
MIMD à mémoire partagée [9] : Dans une architecture MIMD à mémoire partagée,
un espace mémoire global est "visible" par tous les processeurs (Figure 25). En plus,
les processeurs peuvent avoir une mémoire locale dans laquelle sera copiée une partie
de la mémoire globale pour des raisons d’optimisation des accès. L’un des exemples de
processeurs MIMDs à mémoire partagée est les processeurs SMP (Symmetric Multi-
Processors).
FD ML FI
FD
UC UT
Réseau d’ interconnexion
CPU1
Mémoire partagée
….
ML
UC UT
CPUn
47
• Problème de cohérence des données :
o La cohérence entre les copies locales et la mémoire globale doit être
gérée à la fois par le hardware, le software et parfois même par
l'utilisateur.
48
receive ». Donc, il n’y a aucune compétition entre les processeurs pour une mémoire
partagée :
FD ML FI
UC UT
FD UC: Unité de Contrôle.
CPU1 UT: Unité de traitement.
Réseau d’ interconnexion
UC UT
CPUn
49
Néanmoins, cette architecture peut avoir quelques inconvénients tels que :
Les Clusters : ils sont des groupes de calculateurs complets interconnectés. Les
calculateurs individuels travaillent ensemble comme une ressource de calcul unique.
Cependant, chaque calculateur autonome dans un cluster est nommé « nœud ». Les
processeurs NUMA sont des clusters.
Il existe différentes configurations de clusters tels que (1) la configuration à lien direct
et (2) la configuration avec partage de disque. La figure 28 illustre le cas d’un cluster à
liens directs sans disques partagés et la Figure 29 le cas d’un cluster avec disques
partagés.
50
P1 Pn P1 Pn
Liens rapides
de transfert
de message
Liens rapides de
P1 Pn P1 Pn
transfert de message
Disques RAID
Dans une architecture UMA (Uniform Memory Access), tous les processeurs ont accès
à toutes les parties de la mémoire principale. Le temps d’accès à la mémoire d’un
processeur à toutes les régions de la mémoire est le même. En plus, les temps d’accès
des différents processeurs est le même. Le SMP est un processeur UMA (Figure 30).
51
FD ML FI
UC UT
FI
Réseau d’ interconnexion
CPU 1
Mémoire partagée
….
FD ML
FI
UC UT
FI
CPU n
52
FD ML FI
UC UT
FI
Réseau d’ interconnexion
…..
FD ML FI
UC UT
MIMD à bus: Un bus unique est considéré comme la solution la plus simple de
connecter des systèmes multiprocesseurs [16]. La figure 32 présente une illustration
d'un système à bus unique. Dans sa forme générale, un tel système se compose de N
processeurs, chacun ayant son propre cache, reliés par un bus de données unique et une
mémoire principale partagée. Ils disposent de caches locaux pour réduire le trafic sur le
bus. Par conséquent, un mécanisme de cohérence sera nécessaire dans ce cas.
53
Processeur Processeur Processeur
Bus partagé
Mémoire
principale
I/O
Fiabilité: le bus est essentiellement un médium passif, et une défaillance sur un nœud
ne devrait pas entraîner de défaillance du système complet.
54
Institution Nom Nombre Bits FPUs Taille de Bande Année
processeurs processeur mémoire passante
(MB) (MB/s)
Sequent symmetry 30 32 30 240 53 1988
Bus unique
55
Institution Nom Nombre de Horloge FPUs Taille de Bande Année
processeurs (MHz) mémoire passante
(MB) (MB/s)
Intel iPSC/2 128 16 128 512 896 1988
Il définit les connexions entre les nœuds (mémoire et processeurs), il existe deux types
de réseaux :
Ils peuvent utiliser des connexions directes (réseaux directes) entre les différents nœuds
ou des connexions indirectes (réseaux indirectes) [17]. Un réseau est dit directe si
chaque nœud est directement connecté à ces voisins. Cependant, un réseau est dit
indirect si tous les nœuds sont connectés indirectement les uns aux autres.
56
Le problème d’implémentation majeur concerne la longueur des liens qui affecte la
fréquence d’horloge et les besoins en puissance.
Il existe plusieurs topologies d’interconnexion des processeurs, tels que [15] [9]:
Bus unique
Dans un réseau complètement connecté, chaque nœud est connecté à tous les autres
nœuds du réseau. Les réseaux entièrement connectés garantissent une livraison rapide
des messages de n'importe quel nœud source à n'importe quel nœud de destination (un
seul lien doit être traversé). Le routage des messages dans ce cas devient une tâche
simple. Cependant, les réseaux complètement connecté sont coûteux en termes de
nombre de liens nécessaires à leur construction (le cout dépend fortement du nombre
des nœuds N ) [17].
57
Processeur
Processeur
Mémoire Processeur
Mémoire
Mémoire
Processeur Processeur
Processeur
Mémoire Mémoire
Mémoire
58
Processeur 1
Mémoire
Processeur 2
Mémoire
…..
Processeur N
Mémoire
59
Processeur 1 Processeur 2 Processeur 3 Processeur 4
60
Il s'agit d'une architecture n-cube binaire qui a été mise en œuvre dans les systèmes
iPSC, nCUBE et CM-2. En général, un n-cube est constitué de N= 2n nœuds répartis
sur n dimensions, avec deux nœuds par dimension [15].
Processeur 1 Processeur 2
Mémoire Mémoire
Processeur 7 Processeur 8
Mémoire Mémoire
Tout d’abord, signalons que trop peu de programmes ont été écrits pour des processeurs
parallèles à cause de:
61
• Le Surcoût en communication élevé.
• Ils requièrent la connaissance de la structure matérielle;
• Pas de portabilité entre les MIMD;
• Nouveaux algorithmes sont nécessaires pour tirer parti du parallélisme.
Dans le cas général, le programmeur doit isoler les tâches de calcul, étudier leurs
dépendances mutuelles et les synchroniser, gérer la communication, etc.
Le mot-clef dans ce cas est la localité des traitements et des données. Le programmeur
doit chercher des algorithmes mettant en évidence des calculs sur des données locales
en minimisant ainsi les transferts. Aussi, le programmeur doit avoir une idée claire sur
le placement de ces deux quantités afin de savoir quelles tâches exécuter sur quels
nœuds dans le but de minimiser le délai total de l’exécution du programme parallèle.
Un autre problème qui peut affecter les performances des programmes parallèles dans
ce cas concerne l’équilibrage de la charge particulièrement en termes de calcul sur les
différents nœuds en minimisant les communications. Le programmeur doit définir la
taille de ses tâches en fonction du nombre de processeurs disponibles. Cependant, cela
n’est pas toujours possible parce que les tailles de certaines tâches peuvent etre
dynamiques.
Etape 1: chaque processeur calcule une somme partielle. Les nombres sont lus depuis
la mémoire et les résultats sont stockés en mémoire (Figure 39).
62
SP1= SP2= SP3= SP4=
somme(D1, D2, somme(D5, D6, somme(D9, somme(D13,D1
D3, D4) D7, D8) D10, D11, D12) 4, D15, D16
Bus partagé
Mémoire
SP5= SP6=
somme(SP1,SP somme(SP2,SP
3) 4)
Bus partagé
Mémoire
63
Etape 3: addition des sommes partielles, les sommes partielles sont lues en mémoire et
le résultat final est stocké en mémoire (Figure 41).
SP7=
somme(SP5,
SP6)
Bus partagé
Mémoire
Somme [Pn]
Moitié = 4
Repeat
moitié = moitié / 2;
64
somme [Pn] = somme [Pn + moitié];
D1 D2 D5 D6
D3 D4 D7 D8
Réseau
65
SP1= SP2=
somme(D1, D2, somme(D5, D6,
D3, D4) D7, D8)
Réseau
SP3= SP4=
somme(D9, somme(D13,
D10, D11, D12) D14, D15, D16)
SP5= SP6=
somme(SP1,SP3) somme(SP2,SP4)
Réseau
66
Etape 4: addition des sommes partielles à nouveau et le résultat final est obtenu (Figure
45).
SP7=
somme(SP5,SP6
)
Réseau
Somme = 0
For (i = 0; i < 4 ; i = i + 1)
Limite = 4
Repeat
Moitie = Moitie / 2
67
send (Pn - Moitie , Somme) /* envoyer la somme à Pn/2 à travers le
réseau
Limite = Moitie
5. Questions de révision
Question 1 : Comparer les deux architectures SISD et SIMD.
Solutions :
• Similarités:
68
Dans une architecture SISD, le flux d’instruction opère sur le même flux de données
alors que dans une architecture SIMD, le flux d’instruction opère sur des flux de
données différents.
Similarité :
Avantages du SMP:
Avantages du cluster :
Question 3 : Les ordinateurs parallèles sont des machines qui comportent une
architecture parallèle, constituée de plusieurs processeurs identiques, ou non, qui
concourent au traitement d'une application.
69
6. Conclusion
Dans ce chapitre, le principe de fonctionnement des processeurs parallèles a été entamé
en présentant les aspects architecturaux de chaque classe de processeurs, sa proche de
programmation ainsi que des exemples illustratifs.
70
Série d’exercices
Exercice 1:
Exercice 3 :
71
Exercice 4 :
(1) MPI, (2) OpenMP, (3) MPI_init(), (4) MPI_Finalize(), (5) MPI_Comm_rank(), (6)
MPI_Comm_size(), (7) ≠Pragma omp parallel, (8) ≠Pragma omp critical .
Exercice 5
Exercice 6 :
MIMD est l’un des quatre modes de fonctionnement défini par la taxonomie de Flynn
et désigne les machines multi-processeurs dont 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.
Exercice7 :
La mémoire cache est une mémoire plus rapide et plus proche du processeur
auquel elle sert des données et des instructions. Son rôle est d’économiser les
échanges incessants entre le processeur et la mémoire vive.
Exercice 8 :
72
Le calcule parallèle permet d’accélérer efficacement les traitements. Cependant, cette
technologie a généré plusieurs problèmes telle que l’incohérence de données.
73
Série des Travaux pratiques
Les exercices présentés dans cette section concernent la programmation parallèle avec
MPI [18].
Exercice 1 :
Ecrire une version du programme MPI « Hello Word » qui, pour chaque processus,
affiche son numéro et le nombre total de processus.
Exercice 2 :
Modifier le programme précédent pour que les processus pairs n'affichent pas le même
message que les processus impairs.
Exercice 3 :
Exercice 4 :
Exercice 5 :
Ecrire un programme MPI dans le quel le processeur 0 envoie la 10eme valeur générée
aléatoirement au processeur 1.
Exercice 6 :
Ecrire un programme qui calcule la somme des nombres premiers inférieurs à une
valeur donnée n ( 99999). Dans un premier temps, aucune directive MPI ne sera
utilisée, le programme étant alors exécuté séquentiellement.
74
Exercice 7 :
#include <mpi.h>
int argv;
char *argc[];
MPI_Init(&argv, &argc);
MPI_Comm_rank(MPI_COMM_WORLD, &numéro);
MPI_Comm_size(MPI_COMM_WORLD, &taille);
MPI_Finalize();
Exercice 2 :
#include <mpi.h>
int argv;
char *argc[];
75
int taille, numéro;
MPI_Init(&argv, &argc);
MPI_Comm_rank(MPI_COMM_WORLD, &numéro);
MPI_Comm_size(MPI_COMM_WORLD, &taille);
if (num % 2)
printf("pair)\n");
else
printf("impair )\n");
MPI_Finalize();
Exercice 3
#include <mpi.h>
int argv;
char *argc[];
int tab[10], i;
MPI_Status statut;
MPI_Init(&argv, &argc);
MPI_Comm_rank(MPI_COMM_WORLD, &numéro);
MPI_Comm_size(MPI_COMM_WORLD, &taille);
76
printf("Hello world from %d out of %d\n", numéro, taille);
if (numéro == 0) {
tab[i] = i;
else {
MPI_Finalize();
Exercice 4 :
#include <mpi.h>
void main(argv, argc)
int argv;
char *argc[];
{
int taille, numéro;
int jeton, gauche, droit;
MPI_Status statut;
77
MPI_Init(&argv, &argc);
MPI_Comm_rank(MPI_COMM_WORLD, &numéro);
MPI_Comm_size(MPI_COMM_WORLD, &taille);
gauche = (numéro - 1 + taille)%taille;
droit = (numéro + 1)%taille;
printf("Hello world from %d out of %d (%d,%d))\n", numéro, taille,
gauche, droit);
if (numéro == 0) {
jeton = 12;
MPI_Send(&jeton, 1, MPI_INT, droit, 1,
MPI_COMM_WORLD);
printf("%d a envoye %d a %d\n", numéro, jeton, droit);
MPI_Recv(&jeton, 1, MPI_INT, gauche, 1,
MPI_COMM_WORLD, &statut);
printf("%d a recu %d de %d\n", numéro, jeton, gauche);
}
else {
MPI_Recv(&jeton, 1, MPI_INT, gauche, 1, MPI_COMM_WORLD,
&statut);
printf("%d a recu %d de %d\n", numéro, jeton, gauche);
jeton++;
MPI_Send(&jeton, 1, MPI_INT, droit, 1, MPI_COMM_WORLD);
printf("%d a envoye %d a %d\n", numéro, jeton, droit);
}
}
78
Conclusion
Ce polycopié représente d’une manière simplifiée les principes de bases liées aux
architectures parallèles en abordant brièvement leurs concepts, leurs caractéristiques, la
classification de ce type d’architectures ainsi que l’approche de programmation de
chacune des classes.
79
Références Bibliographique
80
Sites web :
w1. [Link]
instrument
w2. [Link]
w3. [Link]
w4. [Link]
w5. [Link]
[Link]
w6. [Link]
w7. [Link]
convergences/la-puce-le-micro-ordinateur/
81