0% ont trouvé ce document utile (0 vote)
41 vues385 pages

Cours Prog Parra Seance

cours

Transféré par

fatimaezahrae.mrabete
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
41 vues385 pages

Cours Prog Parra Seance

cours

Transféré par

fatimaezahrae.mrabete
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cycle Ingénieur SICOM, S8, FST, Fès

Pr. Mohammed Talibi Alaoui


AU:2021/2022
Pr. M. Alaoui Talibi 2
 Introduction au parallélisme
 Classification des architectures parallèles.
 Programmation parallèle impérative :
 Notionsde base
 Programmation par variables partagées
 Stratégiesde conception d'algorithmes parallèles.
 Exemples de langages.
 Mesures de performance.
 Programmation parallèle avec mémoire distribuée
et MPI.

Pr. M. Alaoui Talibi 3


Pr. M. Alaoui Talibi 4
 MOTIVATIONS

Pr. M. Alaoui Talibi 5


 Loi de Moore :

Pr. M. Alaoui Talibi 6


 La loi de Moore concerne l’évolution de la
puissance des ordinateurs.

 Selon cette loi :


Le nombre de transistors, c’est-à-dire l’élément
principal qui compose les processeurs des
ordinateurs, double tous les deux ans.

Et parallèlement double également la puissance


des appareils.

Pr. M. Alaoui Talibi 7


 Moore fixa ensuite le cycle non plus sur 2 ans mais dix-
huit mois.

 Donc selon Moore :

Tous les 18 mois, il y a doublement du nombre de


transistors, rendant les ordinateurs rapidement
obsolètes.

Vous l’avez compris, cette loi porte le nom de celui


qui l’a énoncée en 1965, le cofondateur de la société
Intel, Gordon Moore.

Pr. M. Alaoui Talibi 8


 Et Moore avait raison.

 Pourpreuve en 2014, les premières puces gravées


en 14 nanomètres (nm) – environ 5.000 fois plus fin
qu’un cheveu – sont arrivées avec un an de retard.

 Et
celles de 10 nanomètres n’étaient pas prêtes
avant 2017.

Pr. M. Alaoui Talibi 9


 Les 7 nanomètres pas avant 2020.

 Orcomme l’avait dit Moore, à cette taille, certains


éléments du transistor ne sont désormais
constitués que de quelques atomes.

Nous touchons aux limites de la physique.

Pr. M. Alaoui Talibi 10


 Lerecours au parallélisme pour accélérer des calculs
n’est pas une idée récente.

 Cependant, les contraintes matérielles imposèrent


l’utilisation d’un unique processeur.

 L’évolutiontechnologique des années 80 a permis de


réduire les couts de production des divers composants
d’un calculateur,

 Enmême temps qu’elle en augmentait les performances


à la fois en temps de calcul, en volume et en fiabilité.
Pr. M. Alaoui Talibi 11
 Leralentissement du gain en vitesse des circuits
électroniques ( entre 1976 et 1986 ) a conduit à la
recherche de nouvelles techniques pour gagner de la
puissance soit :

- au niveau algorithmique

- soit au niveau architectural

Pr. M. Alaoui Talibi 12


 Leconcept de parallélisme rompt avec l’approche
classique qui consiste à diminuer le temps de calcul
en effectuant plus vite chaque opération.

 Encalcul parallèle, le gain de temps provient de la


réalisation simultanée de plusieurs opérations.

 L’algorithmique
parallèle consiste à réduire la
complexité de certains problèmes parallèles.

Pr. M. Alaoui Talibi 13


 De plus, le niveau technologique atteint est tel
qu’il est maintenant possible de construire des
architectures multiprocesseurs et de les utiliser
efficacement :

Avec quelques processeurs pour des systèmes


généraux ( plusieurs dizaines )
OU
Beaucoup plus pour des systèmes spécialisées (
quelques milliers )

Pr. M. Alaoui Talibi 14


 Afind’atteindre cette objectif, les diverses
architectures parallèles ont poussé les algorithmiciens
à imposer de nouvelles contraintes à leurs modèles
pour les rendre plus proche de la réalité.

 Face aux demandes toujours croissantes en


puissance de calcul, le domaine du parallélisme
s’est considérablement développé depuis 1985.

Pr. M. Alaoui Talibi 15


 La parallélisation d’une méthode requiert plusieurs
phases :

Tout d’abord, il est commode :

 de partir de diverses écritures de la méthode sous


forme algorithmique.
 puis d’en faire une étude théorique de complexité
pour bien saisir le parallélisme intrinséque.
 Après avoir choisi la (les) bonne version, on peut
examiner son implémentation, càd
Pr. M. Alaoui Talibi 16
 Lafaçon d’exécuter les instructions sur une machine
cible.

Cela pose en particulier les problèmes :

- de placement d’instructions,
- de circulation des données,
- d’utilisation efficace des communications, ..

Pr. M. Alaoui Talibi 17


 Pourparalléliser un algorithme, on commence par
partitionner le problème en sous-taches.

 Restealors à affecter les taches aux processeurs,


en respectant les contraintes de précédence ainsi
que les contraintes matérielles liées à l’architecture
de la machine.

 Ces dernières permettent de sélectionner, parmi


toutes les versions parallèles obtenues, celle qui
est la plus efficace pour l’ordinateur utilisé.
Pr. M. Alaoui Talibi 18
 En général, ces contraintes sont de deux types :

 Accès limité aux données

 Et problèmes de synchronisation des processeurs.

Pr. M. Alaoui Talibi 19


 Aujourd’hui, on divise l’évolution de l’informatique
en cinq générations déterminées par :

 un niveau technologique,
 par un mode d’exploitation et de traitements,
 par les langages utilisées
 et par les objets traités.

Pr. M. Alaoui Talibi 20


Du séquentiel au parallèle :

Pr. M. Alaoui Talibi 21


1938 : premier ordinateur électronique analogique
1964 : premier ordinateur électronique digital
ENIAC.
1950 :
 premier ordinateur avec programme enregistré
 Technologie mécanique ou électromécanique
 UAL séquentielle
 Langage binaire

Pr. M. Alaoui Talibi 22


 1954 : premier ordinateur à transistors TRADIC ( 800
transistors)

 Mémoire magnétique
 UAL évoluée
 Langage assembleur, puis fortran et Algol.
 Exécution par batch d’un seul programme

Pr. M. Alaoui Talibi 23


 Utilisationdes circuits intégrés
 Compilateurs intelligents de langages de haut niveau.
 Multiprogrammation
 Processeurs vectoriels
 Temps partagé et multiprogrammation
 Machines virtuelles
 Du traitement des données au traitement l’information.

Pr. M. Alaoui Talibi 24


 Circuit à haute intégration (LSI)
 Mémoire de grande taille
 Langages permettant le traitement vectoriel
 UAL parallèle et pipeline
 Plusieurs processeurs
 Du traitement de l’information au traitement des
connaissances (systèmes experts).

Pr. M. Alaoui Talibi 25


 Circuits spécialisés à très haute intégration (VLSI)

 Multiprocesseurs parallèles

 Parallélisme massif

 Du traitement des connaissances au traitement de


l’intelligence.

Pr. M. Alaoui Talibi 26


 Au plus haut niveau, le traitement parallèle permet
l’exécution simultanée de plusieurs programmes
indépendants.

 Il utilise la multiprogrammation, le temps partagée


et le multitraitement: Mode de fonctionnement d'un ordinateur selon
lequel plusieurs processeurs ayant accès à des mémoires communes
peuvent opérer en parallèle sur des programmes différents.(Anglais:
multiprocessing).

 Il s’emploie dans des systèmes de grande taille


(mainframe) et se traite au niveau du système
d’exploitation.

Pr. M. Alaoui Talibi 27


 L’introduction
du parallélisme à l’intérieur d’un
programme peut se faire au niveau des procédures.

 Ilnécessite la décomposition du programme en


taches, la recherche des relations de dépendance
entre ces taches et la programmation en parallèle
des taches indépendantes.

Pr. M. Alaoui Talibi 28


 Il peut se traiter au niveau du système d’exploitation :

 parallélisation automatique de programmes,


 compilateurs intelligents

 ou au niveau algorithmique.

Pr. M. Alaoui Talibi 29


 Le traitement parallèle d’instructions indépendantes
utilise la technique de vectorisation.

 Ilse traite au niveau du système (vectoriseur), du


langage de programmation (Fortran vectoriel) ou au
niveau algorithmique.

Pr. M. Alaoui Talibi 30


 Latechnique du pipeline permet l’introduction du
parallélisme au niveau d’une instruction. Il s’agit de
décomposer une instruction en plusieurs étapes
successives et de faire exécuter, en même temps,
des étapes différentes de plusieurs instructions.

 Ce
type de parallélisme est traité au niveau du
matériel.

 Lesgrands ordinateurs font appel maintenant tous


à ces techniques.
Pr. M. Alaoui Talibi 31
Le parallélisme dans les
monoprocesseurs

Pr. M. Alaoui Talibi 32


 Les architectures monoprocesseurs ont en général
une structure de base commune :

 Une mémoire principale


 Un processeur centralisé
 Un ensemble de communications

Les relations entre ces 3 unités peuvent être réalisées


de manières diverses, par exemple par l’intermédiaire
d’un bus commun (VAX -11/780) par exemple.
Pr. M. Alaoui Talibi 33
 L’introduction du parallélisme peut se faire de
plusieurs façons :

 UAL parallèle : Plusieurs unités fonctionnelles


 par exemple Fonctionnement simultané des trois
unités
 Multiprogrammation et temps partagé

Pr. M. Alaoui Talibi 34


Exemple :
Les diverses fonctions d’une UAL sont distribuées à des
unités indépendantes opérant en parallèle.

Les CDC 6600 possède 10 unités fonctionnelles (addition,


soustraction, décalage,..) dans son UAL.

L’IBM 360/91 a deux unités arithmétiques parallèles :


l’une pour les opérations en virgule fixe,
l’autre pour les opérations en virgule flottante,
divisée en deux unités fonctionnelles (additions et
multiplications).
Pr. M. Alaoui Talibi 35
 LesUAL possèdent maintenant des additionneurs
parallèles à anticipation de retenue et de multiplieurs
intégrés.

 Leur traitement est pipeline

Pr. M. Alaoui Talibi 36


 L’utilisation
des multiprocesseurs conduit à une
programmation effective de divers processeurs.

 Un ordinateur est donc parallèle dés qu’il dispose


de plus d’un processeur pour effectuer le
traitement d’un seul programme.

 Le Cray 2 possède 4 processeurs très puissants.

Pr. M. Alaoui Talibi 37


 Problème d’optimisation :

Une très grande partie des programmes actuels


n’utilise pas la puissance des multi-cœurs.

Limite théorique : loi d’Amdahl

Pr. M. Alaoui Talibi 38


Soit f la fraction intrinsèquement séquentielle (non
parallèlisable) de l’algorithme à paralléliser.

Alors l’accèleration maximale sur p processeurs de


l’algorithme parallèle correspondant est :

S(n,p)≤1/(f+(1-f)/p)

Pr. M. Alaoui Talibi 39


 Exemple :

20% d’un algorithme n’est pas parallélisable.


L’accéleration est donc limité à 5.

50% d’un algorithme n’est pas parallélisable.


L’accéleration est donc limité à 2.

Pr. M. Alaoui Talibi 40


 En pratique, le (sur)cout dû au parallélisme est dû
aux parties séquentielles, mais aussi aux aspects
suivants :

 Démarrage et terminaison des taches


 Synchronisation
 Communications
 Surcouts logiciels dus aux compilateurs,
bibliothèques, outils, systèmes d’exploitation…

Pr. M. Alaoui Talibi 41


Pr. M. Alaoui Talibi 42
 Comment construire et analyser des algorithmes et
des programmes pour des machines si différentes.

 Peut-on concevoir une méthode de programmation


identique ?

 Existe-ildes outils de parallélisation automatique et


quels sont leur principes ?

Pr. M. Alaoui Talibi 43


 Certains
problèmes sont ils intrinsèquement
séquentiels ?

 Leparallélisme massif a-t-il un avenir et peut-il


être utilisé efficacement?

Voila quelques unes des questions auxquelles nous


nous proposons d’apporter des Réponses.

Pr. M. Alaoui Talibi 44


Paradigmes de base de la
programmation concurrente

Pr. M. Alaoui Talibi 45


 Permettre d'effectuer plusieurs traitements, spécifiés
distinctement les uns des autres,« en même temps ».

 En général, dans la spécification d'un traitement,


beaucoup de temps est passé à « attendre ».

 Idée : exploiter ces temps d'attente pour réaliser


d'autres traitements, en exécutant en concurrence
plusieurs traitements.

Pr. M. Alaoui Talibi 46


 Laprogrammation concurrente permet à des
processus multiples, de pouvoir partager des
ressources (structures de données, ressources
matériels, CPU, mémoire, dispositifs I/O).

Pr. M. Alaoui Talibi 47


 Utilisation des temps d’attente de saisie :

Pr. M. Alaoui Talibi 48


 Programme concurrent :

programme qui contient plusieurs processus (ou


threads) qui coopèrent.
 coopération Communication, échange
d’information

 Deux principales façons de communiquer :


 par l’intermédiaire de variables partagées.
 par l’échange de messages et de signaux (par ex.
canaux de communications).
Pr. M. Alaoui Talibi 49
 Note: on considère un thread comme étant un
processus léger (lightweight process)

Pr. M. Alaoui Talibi 50


 Processus vs thread :

 Processus :

- Un processus représente un programme en cours


d’exécution.

– Un processus possède un espace mémoire privé,


indépendant de celui des autres processus.

– Parce qu’ils ne partagent aucun espace mémoire


commun, deux processus qui veulent collaborer doivent le
faire en utilisant un mécanisme d’échange de messages .

Pr. M. Alaoui Talibi 51


– Le contexte d’un processus est lourd : code,
registres.

- Créer et activer un processus est donc (très!)


coûteux!

Pr. M. Alaoui Talibi 52


 Thread :
– Un thread représente une fonction en cours
d’exécution.

– Un processus peut contenir un ou plusieurs threads.

- Ces threads partagent alors la mémoire ainsi que


diverses autres ressources.

- Parce qu’ils partagent un même espace mémoire,


deux threads qui veulent collaborer peuvent le
faire par l’intermédiaire de variables partagées.
Pr. M. Alaoui Talibi 53
- Le contexte d’un thread est léger.

- Créer et activer un thread est donc moins coûteux


que dans le cas d’un processus!

Pr. M. Alaoui Talibi 54


 Interaction entre processus : communication

La communication est un échange de données entre processus,

• Soit par messages explicites.

Deux manières d'envoyer un message :

Synchrone : permet autant la synchronisation que la


communication.

Le Processus Emetteur doit attendre que son message soit reçu;


Et il est possible qu'un processus Récepteur doive attendre qu'un
message soit envoyé.

Pr. M. Alaoui Talibi 55


Asynchrone :

L'émetteur poursuit son exécution après l'envoi du


message.

• soit à travers des variables partagées (visibles à


chaque processus; convient aux systèmes à mémoire
commune);

• ou bien par RPC (Remote Procedure Call).

Pr. M. Alaoui Talibi 56


 RPC (remote procedure call) est :

 Un protocole réseau

 Ce protocole est utilisé dans le modèle client-serveur

 Pour assurer la communication entre le client, le serveur et


d’éventuels intermédiaires.

 Permettant de faire des appels de procédures sur


un ordinateur distant à l'aide d'un serveur d’applications.

Pr. M. Alaoui Talibi 57


 Interaction entre processus : Synchronisation

La synchronisation, implique l'échange d'information de


contrôle entre processus.

Exemples :

Un processus dépend des données produites par un autre;


Si les données ne sont pas disponibles, le processus doit
attendre jusqu'à ce qu'elles soient disponibles.

Un processus peut changer son état à "Blocked"(Wait(Pi)),


et peut signaler aux Processus "Blocked" qu'ils peuvent
continuer (signal(Pi)).
Pr. M. Alaoui Talibi 58
 Entrelacement
de threads : C'est un dispositif technique
commode pour étudier l'exécution concurrente de
processus.

 Définition:
Un entrelacement de deux séquences s et t est une
séquence U construite à partir des événements de s
et de t, de telle sorte que les événements de s
préservent leur ordre dans U ainsi que ceux de t.

Pr. M. Alaoui Talibi 59


 Exemple :

Si a et z sont des événements concurrents,


On considère le cas ou a se produit avant z ou bien
z se produit avant a, mais on ignore le cas ou a et z
se produisent en même temps.

Pr. M. Alaoui Talibi 60


 Concurrence comme entrelacement : Exemple
Soient deux Processus :

A:a;b
Z:x;y;z

L'exécution concurrente de A et Z, peut être étudiée en considérant les


entrelacements possibles (10):
 a b x y z
 a x b y z
 .....
 x y z a b

L'entrelacement préserve l'ordre relatif dans le thread:

a doit se produire avant b, mais x y z étant dans un autre thread peuvent se produire
dans n'importe quel ordre relativement à a et b. Il en est de même pour x, y et z...

Pr. M. Alaoui Talibi 61


Une autre façon de classifier
les paradigmes de
programmation parallèle

Pr. M. Alaoui Talibi 62


 Une autre classification intéressante des modèles
de programmation parallèle, qui peut aussi aider à
mieux comprendre certaines notions importantes
de conception d’algorithmes parallèles, est celui
qui distingue entre :

 parallélisme de données,
 parallélisme de contrôle
 et parallélisme de flux.

Pr. M. Alaoui Talibi 63


 Correspond à l’application d’une même opération
sur tous les éléments d’une collection des données
homogènes, (de même type).

 Onparle dans ce cas de structures des données


régulières.

 Paropposition aux structures de données


dynamiques basées sur l’utilisation des pointeurs (
et donnant lieu à des arbres ou des graphes : donc
des structures de formes non régulières ).
Pr. M. Alaoui Talibi 64
 L’ensemble du travail effectué consiste en une
série de phases de calcul.

 Chaque phase est une application d’une opération


sur une collection.

 Et
ou les différentes phases peuvent évidemment
manipuler des collections différentes.

Pr. M. Alaoui Talibi 65


 La forme la plus simple de parallélisme de données
survient lorsque les calculs sur les différents
éléments sont complètement indépendants les uns
des autres.

L’ordre d’exécution n’a aucune importance et, donc,


que tous les calculs peuvent se faire en parallèle.

Pr. M. Alaoui Talibi 66


 Soit
l’opération consistant à multiplier chacun des
éléments d’une collection par l’entier 2.

 L’applicationd’une telle opération sur les éléments


d’un tableau d’entiers a pour obtenir un tableau b
pourrait alors s’écrire comme suit :

int a[n], b[n]


pour i varie de 1 … n
b[n]=2*a[n]

Pr. M. Alaoui Talibi 67


Ici, c’est le compilateur qui s’occupe de générer le
code qui permettra l’exécution en parallèle des
diverses multiplications et affectations.

C’est aussi le compilateur qui s’occupera de


distribuer les données entre les processeurs, en
fonction des directives spécifiés par le programmeur.

Pr. M. Alaoui Talibi 68


 Lafigure suivante illustre les deux principaux
types de décomposition et distribution d’un
tableau à deux dimensions 8*8 sur 4 processeurs, à
savoir distribution par bloc ou distribution
cyclique (ou des combinaisons entre les deux
modes).

Pr. M. Alaoui Talibi 69


Pr. M. Alaoui Talibi 70
 Consiste :

 à décomposer le travail à effectuer en


différentes taches,

 à identifier celles qui peuvent s’exécuter en


parallèle,

 puis finalement à ordonner, à l’aide de


structures de contrôle appropriés, l’exécution
de ces diverses taches.

Pr. M. Alaoui Talibi 71


 Correspond au principe du travail à la chaine.

 Uneséquence d’opérations doit être appliquées en


cascade à une série de données similaires.

 Lesopérations à réaliser sont associées à des


éléments de calculs chainées de façon à ce que
l’entrée d’une opération soit la sortie de
l’opération précédente.
Pr. M. Alaoui Talibi 72
 Leparallélisme de flux n’est donc rien d’autre
qu’un fonctionnement en mode pipeline des
éléments du calcul.

Pr. M. Alaoui Talibi 73


Systèmes parallèles et
distribués

Pr. M. Alaoui Talibi 74


 Définition :

 On dit que deux processus s'exécutent en parallèle


lorsqu'ils s'exécutent sur des CPU différents.

 Ils sont concurrents lorsqu'ils concourent pour


l'obtention d'une même ressource CPU.

Leur exécution est alors entrelacée. Chacun


dispose à son tour d'un quantum de temps calcul.
Pr. M. Alaoui Talibi 75
 Découper un gros problème en de nombreux petits
problèmes :

- Super calculateurs pour le calcul scientifique


- Stations multiprocesseurs
- Grilles :
 SETI@Home
 folding@home
 défi cryptographiques ([Link])
 ....

Pr. M. Alaoui Talibi 76


A l’intérieur du processeur :

 instructions en parallèle (pipeline)


 multi-cœurs

 Multi-processeurs

Pr. M. Alaoui Talibi 77


Le parallélisme au
sein du processeur :

Pr. M. Alaoui Talibi 78


 L’exécutiond’une instruction (multiplication par ex.)
nécessite plusieurs cycles d’horloge).

⇒ On exécute en parallèle les instructions indépenda-


ntes pour gagner du temps.

 Un processeur possède plusieurs Unités Arithmétique


et Logiques.

 Les
instructions peuvent être réarrangées afin
d’améliorer le rendement (out of order execution).
Pr. M. Alaoui Talibi 79
 Cœur :
Unité exécutant les instructions dans un processeur
Multi-cœur : plusieurs unités exécutant des
instructions en parallèle.

 Multi-cœur(tous sur un même circuit) ≠multi-


processeur (circuits différents).

Pr. M. Alaoui Talibi 80


 Une très grande partie des processeurs actuels sont
multi-cœurs (généralement de 2 à 8 cœurs).

 Encore plus de cœurs dans l’avenir :

 Prototype tera-scale (80 cœurs) d’Intel.

 Processeurs multi-cœurs pour les appareils mobiles


(smartphones, tablettes).

Pr. M. Alaoui Talibi 81


Le parallélisme multiprocesseurs :

Pr. M. Alaoui Talibi 82


 Un concept ancien :

 premier ordinateur multi-processeur en 1962,

 premier ordinateur multi-processeur parallèle en


1969.

 Similaire au multi-cœur à l’exception de la


mémoire cache qui n’est pas partagée.

Pr. M. Alaoui Talibi 83


 Supercalculateurs :
- Le plus puissant : Computer K
- 88,128 processeurs 8-cœurs (2GHz)

- Le deuxième : Tianhe-1A
- 14 336 processeurs
- 7 168 processeurs graphiques

Pr. M. Alaoui Talibi 84


Les systèmes distribués :

Pr. M. Alaoui Talibi 85


 Ensemble de processeurs autonomes.

 Qui ne se partagent pas de mémoire primaire.

 Maisqui coopèrent par envoi de messages à travers


un réseau de communication.

Pr. M. Alaoui Talibi 86


 Mise en commun d'un grand nombre de ressources à
faible coûts :
– Bon rapport performance / prix.
– Puissance globale virtuellement illimitée.
- Supérieure à celle des gros calculateurs

 Disponibilité et flexibilité :

– Un élément peut tomber en panne sans bloquer tout


le système.
– Flexibilité : Distribution de la charge permet d’exécuter
un travail sur la machine la plus disponible.
Pr. M. Alaoui Talibi 87
 Distribution naturelle de certaines applications :
- distribution géographique d’agences bancaires.

 Partage de ressources coûteuses entre plusieurs


utilisateurs/machines.
– Accès à distance à une ressource indisponible en
local.
– Accès aux mêmes ressources depuis tous les endroits
du système.

Pr. M. Alaoui Talibi 88


 Problèmes inhérents aux communications
– Si pas de mémoire partagée, communications explicites
(moins de communications).
– Lenteur, saturation, perte de messages.

 Partage et distribution de données impose mécanismes


complexes :
– Synchronisation.
– Sécurité.

Pr. M. Alaoui Talibi 89


Internet :

Contient de nombreux sous-systèmes selon le


protocole considéré :

– Web (http)

– peer-to-peer : permet à plusieurs ordinateurs


de communiquer entre eux via un réseau.

Pr. M. Alaoui Talibi 90


Seti@home !
– Les machines de tout le monde :

 Puissance virtuellement illimitée


- N Gflop/s par machine, des millions des
machines.

 Calculsindépendants
 Modèle plus distribué que parallèle

Pr. M. Alaoui Talibi 91


 Cray Jaguar à ORNL :

- 20 000 noeuds à six-core


Assemblés par réseau Cray spécifique

- Presqu'un Cluster, mais réseau trop spécifique

- Plus d'1 PetaFlop/s

Pr. M. Alaoui Talibi 92


 Tianhe en Chine :

- 7000 nœuds à 2 processeurs et 2 GPUs.


- Un cluster avec des accélérateurs.
- 2 Petaflop/s.

Pr. M. Alaoui Talibi 93


 Architecture matérielle et/ou logicielle
- Un système parallèle peut être distribué
Si assemblage de machines à mémoires
indépendantes
- ou non
Si une seule grosse machine parallèle.

Application cible
– Applications parallèles dans les systèmes
parallèles :
Communication, synchronisation, … entre les différentes

Pr. M. Alaoui Talibi 94


Pr. M. Alaoui Talibi 2018-2019 95
Pr. M. Alaoui Talibi 2018-2019 96
 Introduction
 Processus
 Appels système
 Ordonnancement des processus
 Communication et synchronisation des
processus : l’exclusion mutuelle.

Pr. M. Alaoui Talibi 2018-2019 97


 Lesordinateurs mono processeur actuels sont capables
d’exécuter plusieurs programmes « simultanément ».

 Multiprogrammation, multi-tâches ou encore pseudo-


parallélisme.
 En réalité ce n’est pas vrai, une machine mono processeur ne
peut exécuter qu’une seule tâche à un instant donné.

 Le processeur est affecté, périodiquement, à chaque programme


en cours d’exécution pour une durée infiniment petite  donne
l’impression d’exécuter tous les programmes en même temps.

Pr. M. Alaoui Talibi 2018-2019 98


 Un processus est un programme en exécution qui a
son propre environnement

 Espace d’adressage
 Code (instructions du programme)
 Pile
 Compteur ordinal
 Registres
 Variables
 …
 Un programme peut être exécuté par plusieurs processus.

Pr. M. Alaoui Talibi 2018-2019 99


Les systèmes d’exploitation ont besoin de savoir que tous

les processus nécessaires existent bel et bien.

Par exemple le contrôleur d’un four à micro-ondes : il

peut être envisageable que tous les processus susceptibles

d’intervenir soient actifs pendant le fonctionnement du

système.

Pr. M. Alaoui Talibi 2018-2019 100


En général, les systèmes d’exploitation ont besoin de
disposer d’une méthode pour créer et arrêter les
processus, selon le cas, au cours de leur activité.

Pr. M. Alaoui Talibi 2018-2019 101


 Création des processus
 Quatre événements sont à l’origine de la création d’un
processus.
 Initialisation du système.

 Exécution d’un appel système de création de processus par un


processus en cours d’exécution.

 Requête utilisateur sollicitant la création d’un nouveau


processus.

 Initiation d’un travail en traitement par lot.

Pr. M. Alaoui Talibi 2018-2019 102


 Sous UNIX, la commande ps sert à afficher la liste
des processus en cours d’exécution.

 Sous windows 95/98/Me, le fait de taper Ctrl+Alt+Del


une seule fois permet de voir les processus en cours.

 Sous Windows 2000/XP, c’est le gestionnaire des


taches qui intervient.

Pr. M. Alaoui Talibi 2018-2019 103


Création des processus :
 La création d’un processus se traduit toujours par
un :
appel système déclenché à partir de :
 Processus utilisateur OU
 Processus système, OU
 Processus gestionnaire de traitements par lots.

Cet appel demande au système d’exploitation de créer un


nouveau processus et indique, directement ou indirectement,
quel programme y exécuter.

 Sous Unix : fork() crée un clone du processus appelant


 Sous Win32 : Create_Process.

Pr. M. Alaoui Talibi 2018-2019 104


 Dans les deux cas, une fois qu’un processus a été
crée, le parent et le fils disposent désormais de leur
propre espace d’adressage.

 S’il arrive que l’un des processus modifie un mot dans


son espace d’adressage, le changement n’est pas
visible par l’autre processus.

Pr. M. Alaoui Talibi 2018-2019 105


Fin d’un processus :

 Une fois qu’un processus a été créé, il commence à


s’exécuter, quelle que soit sa tache.

 Mais tôt ou tard, le nouveau processus s’arrete pour


diverses raisons :

Pr. M. Alaoui Talibi 2018-2019 106


 Fin d’un processus
 Arrêt normal (volontaire)
 Exécution de toutes les instructions du programme correspondant.
 Arrêt à cause d’une erreur fatale
 Erreur imprévisible (division par 0)
 Par exemple, saisir la commande cc foo.c

Pour compiler le programme foo.c et que le fichier correspondant


n’existe pas, le compilateur s’arrete.

Pr. M. Alaoui Talibi 2018-2019 107


 Arrêt à cause d’une erreur provoquée par le processus :

Souvent due à un bogue du programme.

Par exemple, les erreurs peuvent provenir de l’exécution :

- d’une instruction illégale,

- D’une référence mémoire inexistante

- d’une division par 0

Pr. M. Alaoui Talibi 2018-2019 108


 Le quatrième motif d’ arrêt d’un processus :

Intervient lorsqu’il exécute un appel système indiquant

au SE d’ Arrêter un ou plusieurs autres processus.

Sous UNIX, cet appel est kill.

Pr. M. Alaoui Talibi 2018-2019 109


 Hiérarchie des processus
 Chaque processus a un et un seul processus parent
 Sous Unix le processus « init » est le seul qui n’a pas de
parent.
 C’est le processus qui initialise le système.
 Un processus peut avoir des processus fils 0,1,2
ou plus.
 Sous Unix, il est possible d’envoyer des signaux à toute
une arborescence de processus
 Demande d’arrêt par exemple
 Le principe de l’hiérarchie n’existe pas sous Windows
 Tous les processus sont égaux

Pr. M. Alaoui Talibi 2018-2019 110


 Etats des processus
 Un processus peut être dans l’un des trois états
 Elu : En cours d’exécution
 C’est lui qui détient la CPU
 Prêt
 A toutes les ressources nécessaires et attend son tour pour la
CPU.
 Bloqué
 Attend une ressource ou un événement
 Ne peut pas être candidat pour obtenir la CPU avant qu’il soit
débloqué

Pr. M. Alaoui Talibi 2018-2019 111


 La transition 1 : rend le processus
bloqué en attente d’une ressource ou
d’un événement.

 La transition 2 : reprend la CPU au


processus et la donne à un autre
processus. Elu
1: réquisition
Notre processus doit attendre son tour. d’une ressource 2: réquisition
de la CPU
3: attribution
 La transition 3 : donne (redonne) la CPU de la CPU
à notre processus.
Bloqué
 La transition 4 : débloque le processus Prêt
ce qui le rend candidat pour obtenir la 4: acquisition
de toutes les ressources
CPU.

 Un processus prêt ne peut pas devenir


bloqué sans passer par l’état « élu ».

 Un processus bloqué ne peut pas


prendre la CPU sans passer par l’état «
prêt ». Pr. M. Alaoui Talibi 2018-2019 112
 Appels systèmes :
 Définissent l’interface entre le SE et les programmes
utilisateurs
 Sorte de bibliothèque de fonctions.
 Environ 100 appels systèmes dans la norme UNIX.
 Analogie avec l’appel de fonctions en langage C.
 Les tâches correspondant aux appels systèmes sont
exécutées en mode noyau.
 Services offerts à travers les appels systèmes :
 Gestion des processus
 Gestion de la mémoire
 Gestions des fichiers
 Gestion des E/S

Pr. M. Alaoui Talibi 2018-2019 113


Principaux appels système de gestion des processus de

la norme UNIX :

Appel système description


pid = fork() Crée un processus enfant identique au parent

pid = waitpid(pid, &stat, Attend la terminaison d'un fils


options)

exit (statut) Termine l'exécution du processus et renvoie le


statut

Pr. M. Alaoui Talibi 2018-2019 114


 Appels système de gestion des processus
 fork
 Crée une copie conforme du processus appelant
 Même code
 Mêmes descripteurs de fichiers
 …
 Sauf la valeur retournée par fork
 Nulle dans le nouveau processus (fils)
 PID du fils dans le processus père
 Les deux processus évolueront, en général, différemment.
 Le seul moyen de créer les processus.

Pr. M. Alaoui Talibi 2018-2019 115


Pr. M. Alaoui Talibi 2018-2019 116
Lorsqu’un ordinateur est multiprogrammé, il possède
fréquemment plusieurs processus en concurrence pour
l’obtention de temps processeur.

Cette situation se produit chaque fois que deux


processus ou plus sont en état prêt en même temps.

S’il y’a un seul processeur, un choix doit être fait quand


au prochain processus.

Pr. M. Alaoui Talibi 2018-2019 117


 La partie du système d’exploitation qui effectue ce
choix se nomme l’ordonnanceur (sheduler).

 L’algorithme qu’il emploie s’appelle algorithme


d’ordonnancement (sheduling algorithm).

Pr. M. Alaoui Talibi 2018-2019 118


 L’ordonnanceur peut jouer un rôle prépondérant pour
améliorer les performances du système d’exploitation
 Exemple :
 Etant donnés deux processus P1 et P2
 P1 : processus de rafraichissement de l’écran
 P2 : processus d’envoi de courrier électronique
 Retarder P1 (i.e. ralentir le rafraichissement de l’écran) 
l’utilisateur perçoit ce petit retard comme une dégradation du
service.
 Par contre un petit retard de l’envoi du courrier électronique ne
sera pas senti par l’utilisateur.
 L’ordonnanceur doit, normalement favoriser le processus P1.

Pr. M. Alaoui Talibi 2018-2019 119


 Quand ordonnancer ?
Un large éventail de situations nécessitent de
l’ordonnancement.

- lorsqu’un nouveau processus est créé, il faut décider


s’il faut exécuter d’abord le processus parent ou le
processus fils. Etant donné que les deux sont en état
prêt.

- lorsqu’un processus se termine, un autre processus


doit être choisi dans le jeu des processus prêts.
Pr. M. Alaoui Talibi 2018-2019 120
- lorsqu’un processus bloque sur des E/S un autre
processus, un autre processus doit être sélectionné
pour être exécuté.

- lorsqu'une interruption d’E/S se produit, il faut


également prendre une décision d’ordonnancement.

Si l’horloge matérielle fournit des interruptions


périodiques à une fréquence de 50 ou 60 Hz, par
exemple, une décision d’ordonnancement peut être
prise à chaque kéme interruption.
Pr. M. Alaoui Talibi 2018-2019 121
On peut classer les algorithmes d’ordonnancement en
deux catégories selon leur manière de réagir aux
interruptions de l’horloge :

- Un algorithme non préemptif : sélectionne un


processus, puis le laisse s’exécuter jusqu’à ce qu’il
bloque ou qu’il libère volontairement le processeur.
Même s’il s’exécute pendant des heures.

- Par contre un algorithme préemptif, sélectionne un


processus et le laisse s’exécuter pendant un délai
déterminé. Si le processus est toujours en cours à
l’issue de ce délai : il est suspendu.
Pr. M. Alaoui Talibi 2018-2019 122
 Efficacité de l’utilisation du processeur
 Le basculement du processeur d’un processus à un autre
est relativement coûteux

 Basculement en mode noyau


 Sauvegarder l’état du processus en cours
 Charger l’environnement du processus suivant
 Démarrer le processus

  éviter les basculements très nombreux

Pr. M. Alaoui Talibi 2018-2019 123


 Plusieurs algorithmes d’ordonnancement :
 Ordonnancement de type tourniquet (round robin)

 Ordonnancement par priorités

 Ordonnancement garanti

 Ordonnancement par tirage au sort

 …

Pr. M. Alaoui Talibi 2018-2019 124


 Ordonnancement de type tourniquet (round robin)

 Le plus ancien et le plus utilisé


 Tous les processus à ordonnancer sont au même pied
d’égalité.
 Le processeur est attribué, à tour de rôle, à chacun des
processus en lice pour une durée donnée (quantum)
 Un processus, qui n’a pas terminé son exécution au bout
de son quantum, se met de nouveau dans la file
d’attente.

Pr. M. Alaoui Talibi 2018-2019 125


 Le choix du quantum est très déterminant pour les
performances du système.

 Un quantum très petit provoquerait des basculements très


fréquents  dégradation des performances

 Un quantum très grand  temps d’attente est important pour les


processus prêts  atteinte à l’interactivité

Pr. M. Alaoui Talibi 2018-2019 126


 Ordonnancement par priorités
 En réalité, les processus ne sont pas de même niveau
d’importance
 Les processus système sont le pivot du système et par la
suite doivent être les plus prioritaires.
 Un processus d’envoi de courrier n’est pas sensible à un petit
retard.
 Un processus de traitement de texte peut être sensible au
retard d’affichage des caractères saisis au clavier.

  il est important de définir des priorités entre les


processus

Pr. M. Alaoui Talibi 2018-2019 127


 Ordonnancement par priorités
 Principe :
 Attribution d’une priorité à chaque processus
 Parmi les processus prêts, l’ordonnanceur choisit celui qui
a la plus grande priorité

 La priorité peut être :


 Statique : ne change pas le long de l’exécution  un
processus de priorité supérieure est toujours prioritaire
par rapport à un autre de prioritaire moindre.

Pr. M. Alaoui Talibi 2018-2019 128


 Dynamique
 Le niveau de priorité du processus qui détient la CPU

baisse dans le temps jusqu’à ce qu’un autre processus


devient plus prioritaire et lui prend la CPU.

 De même le processus prêt se voit augmenter le niveau


de priorité au fil du temps ce qui lui donne la chance
d’avoir la CPU.

Pr. M. Alaoui Talibi 2018-2019 129


 Ordonnancement par priorités

 Catégories de priorités
 Le système définit plusieurs catégories de priorités
 Regrouper les processus par catégorie
 Les processus de la même catégorie ont le même niveau de
priorité.
 L’ordonnancement adopté entre ces processus est celui de
type Tourniquet.
 Les processus de la catégorie de priorité supérieure sont
toujours prioritaires par rapport aux autres processus des
autres catégories.

Pr. M. Alaoui Talibi 2018-2019 130


 Ordonnancement par priorités :
 Files d’attente multiples
 Définition de plusieurs catégories de priorités
 Le quantum du processeur n’est pas le même pour toutes les
catégories. La catégorie de niveau de priorité inférieure a un
quantum relativement grand que celui de la catégorie de priorité
supérieure.
 Récompenser le retard des processus de priorité inférieure par une
durée de détention de la CPU supérieure.
 Le processus qui termine sa durée et lâche le processeur passe à la
catégorie inférieure.
 les processus interactifs commencent dans la catégorie
supérieure.
 Une interaction (clique, retour chariot) remet le processus dans
la catégorie supérieure.

Pr. M. Alaoui Talibi 2018-2019 131


 Ordonnancement garanti
 Le principe de cet ordonnancement est que les
processus doivent avoir, globalement, le même cumul
des durées de détention du processeur.
 Le système maintient, pour chaque processus, un taux
correspondant à la durée effective d’utilisation de la
CPU par rapport à son quota.

Le processus qui a le taux le plus petit (qui a moins


utilisé la CPU) sera le plus prioritaire.
 Exemple
Un processus de taux ½ (a utilisé la moitié de son quota) est
prioritaire par rapport au processus de taux 1,2 (a dépassé
son quota de 20%).
Pr. M. Alaoui Talibi 2018-2019 132
 Ordonnancement par tirage au sort :

 L’idée de base consiste à donner aux processus des «


billets de loterie » pour différentes ressources du
système et notamment pour le temps processeur.
 L’ordonnanceur effectue, à chaque fois, un tirage au
sort et le processus possédant le billet tiré aura le CPU.
 Possibilité d’instaurer une discrimination positive :
 Pour favoriser certains processus, il suffit de leur attribuer
plus de billets que les autres
 Le processus qui a plus de billets a beaucoup de chance qu’un
de ses billets soit tiré.

Pr. M. Alaoui Talibi 2018-2019 133


 Des processus coopératifs peuvent s’échanger leurs
billets
 Un processus bloqué, en attente d’un autre processus,
préférerait donner ses billets à ce dernier.
  le processus bloquant aura, donc, plus de chance
d’être sélectionné.
 Notre processus pourra récupérer ses billets et éventuellement
ceux de l’autre processus.

Pr. M. Alaoui Talibi 2018-2019 134


 Comment un processus passe des informations à un
autre processus ?

 Comment éviter des conflits entre des processus


concurrents qui s’engagent dans des activités
critiques ?

 Comment synchroniser les processus dépendants ?

Pr. M. Alaoui Talibi 2018-2019 135


 Les conditions de concurrence
 La section critique
 L’exclusion mutuelle avec attente active
 Le sommeil et l’activation
 Les sémaphores
 Les moniteurs
 L’échange de message
 Les barrières
Pr. M. Alaoui Talibi 2018-2019 136
 Exemple : spooler d’impression
 Principe
 Un processus qui veut imprimer un fichier, entre son nom dans
un répertoire spécial : répertoire du spooler
 Le démon d’impression (spooler) inspecte périodiquement son
répertoire, s’il y a un fichier il l’imprime et le supprime du
répertoire.
 Le répertoire du spooler possède un grand nombre d’entrées
numérotées : 0, 1 ,2 … chacune pouvant accueillir un nom de
fichier.
 Le spooler utilise deux variables partagées : out et in
 Out : pointe vers le prochain fichier à imprimer
 In : pointe vers la prochaine entrée libre du répertoire
 Les variables out et in peuvent être stockées dans un fichier
de deux mots, disponible pour tous les processus.

Pr. M. Alaoui Talibi 2018-2019 137


 Problème : deux processus A et B
tentent d’imprimer en même temps
 Le processus A lit la valeur de in, et en stocke
out in
la valeur, 7, dans une variable locale appelée
4 7
next_free_slot.
 A ce moment là, une interruption se 4 [Link]
Processus A
produit. La CPU jugeant que le processus 5 Prog.c
A a bénéficié de suffisamment du temps 6 [Link]
d’exécution, bascule vers le processus B. Processus
7
B
 Celui-çi lit la valeur de in et récupère
également un 7. il stocke cette valeur dans
sa variable locale appelée aussi next_free_slot.
 A ce point, les 2 processus pensent que la
prochaine entrée disponible est la 7.
Pr. M. Alaoui Talibi 2018-2019 138
Le processus B continue de s’exécuter. Il stocke son
nom de fichier dans l’entrée 7 et actualise in qui
prend la valeur 8.

Finalement, le processus A s’exécute à nouveau,


reprenant les choses où il les avait laissées. Il
examine next_free_lost, y trouve un 7, et écrit son
nom de fichier dans le connecteur 7, écrasant le nom
que le processus B venait juste d’y placer. Ensuite, il
calcule next_free_lost+1, ce qui donne 8, et
positionne in à 8.

Pr. M. Alaoui Talibi 2018-2019 139


Problème : deux processus A et B tentent
d’imprimer en même temps

 Le processus B ne recevra jamais de sortie.


L’utilisateur B va attendre longtemps une impression
qui ne viendra jamais.

 De telles situations, ou deux processus ou plus


lisent ou écrivent des données partagées et ou le
résultat final dépend de quel élément s’exécute à
un instant donné : sont nommées conditions de
concurrence.

Pr. M. Alaoui Talibi 2018-2019 140


 Appelée aussi région critique, c’est l’ensemble
d’instructions d’un processus (par exemple :
accès à la mémoire ou fichiers partagés)
susceptibles de provoquer les conditions de
concurrence avec d’autres processus.
 Pour éviter les conditions de concurrence il faut
éviter que les processus concernés ne se trouvent
en même temps dans la section critique.

L’Exclusion mutuelle

Pr. M. Alaoui Talibi 2018-2019 141


 L’exclusion mutuelle est une méthode qui permet de
s’assurer que si un processus utilise une variable
ou un fichier partagé, les autres processus seront
exclus de la même activité.

La partie du programme à partir de laquelle on accède à


la mémoire partagée se nomme région critique, ou
section critique.

Si l’on pouvait empêcher que deux processus se trouvent


simultanément dans leurs sections critiques, on éviterait les
conditions de concurrence.

Pr. M. Alaoui Talibi 2018-2019 142


 Quatre conditions sont nécessaires pour éviter les
conditions de concurrence tout en assurant la
coopération et l’utilisation adéquate des ressources
partagées :
 Deux processus ne doivent pas se trouver simultanément
dans leurs sections critiques (exclusion mutuelle)
 Il ne faut pas faire de suppositions quant à la vitesse ou le
nombre de processeur mis en œuvre.
 Aucun processus s’exécutant à l’extérieur de la section
critique ne doit bloquer d’autres processus.
 Aucun processus ne doit attendre indéfiniment pour
pouvoir entrer dans sa section critique.

Le comportement que nous voulons mettre en œuvre est celui


illustré à la figure suivante.
Pr. M. Alaoui Talibi 2018-2019 143
A entre dans sa A quitte sa
section critique section critique

Processus A

B tente B entre dans B quitte sa


d’entrer dans sa section section
sa section critique critique
critique
Processus B

B est
T T2 bloqué T3 T4
1
temps

2018-2019 144
 Plusieurs manières d’assurer l’exclusion mutuelle

 L’exclusion mutuelle avec attente active

 Le sommeil et l’activation

 Les sémaphores

 …

Pr. M. Alaoui Talibi 2018-2019 145


 Leprincipe est que lorsqu’un processus se trouve
dans sa section critique, les autres processus ne
peuvent pas y entrer, mais restent actifs et
attendent que le processus en cours termine la
région critique.

 Plusieurs techniques sont utilisées


 Désactivation des interruptions
 Variables de verrou
 Alternance stricte
 Solution de Peterson
 Instruction TSL
Pr. M. Alaoui Talibi 2018-2019 146
 Désactivation des interruptions :

 Le processus qui entre dans sa section critique, désactive les interruptions


  Dans ce cas, l’horloge aussi ne pourrait pas envoyer les interruptions, ce qui
implique que le processeur ne pourrait pas basculer vers un autre processus.
 Le processus en cours est sûr maintenant qu’aucun processus concurrent (ou
autre) ne pourra entrer dans la section critique.
 Les autres processus n’ont même pas la possibilité d’avoir le processeur tant que les
interruptions sont désactivées.
 Le processus en cours doit réactiver les interruptions à la fin de la section critique.
 Attention!!
 Donner aux processus utilisateurs de bloquer les interruptions n’est pas une bonne idée
 Un processus (utilisateur) qui termine sa section critique et oublie de réactiver les
interruptions.
 Un processus (utilisateur) qui, volontairement, ne réactive pas les interruptions pour
s’emparer (l’utiliser tout seul) exclusivement du processeur.
 La désactivation des interruptions peut être intéressante pour les processus en
mode noyau (qui n’impose pas des restrictions sur les instructions exécutées).

Pr. M. Alaoui Talibi 2018-2019 147


 Variables verrou : Solution logicielle
 Le processus qui veut exécuter sa section critique, teste une variable
verrou ( ou lock) partagée dont la valeur initiale est 0.
 Si cette variable est à 0, alors il la remet à 1 et entre dans la section critique

 Si le verrou est déjà à 1, ce qui signifie qu’un autre processus se trouve dans la
section critique  le processus doit attendre que le verrou passe à 0
 Le processus remet le verrou à 0 quand il termine la section critique
 Problème :
 La variable verrou est partagée  pour y accéder, les conditions de concurrence

peuvent se produire
 Un processus qui a testé le verrou et le trouve à 0, perd le processeur avant

de remettre le verrou à 1 (un autre processus s’exécute et le fait à sa place).


 Un deuxième processus teste aussi le verrou (toujours à 0) et le remet à 1
ensuite, il entre dans sa section critique.
 Lorsque le premier processus reprend son exécution, il remet le verrou à 1(il est

déjà à 1) et commence sa section critique.

Résultat : les deux processus se trouvent en même temps dans la section


critique!!
Pr. M. Alaoui Talibi 2018-2019 148
 Alternance stricte
 Deux processus alternent strictement leur entrées dans la
section critique
 Entre deux exécutions de la section critique par l’un des
processus, il est impératif que l’autre processus exécute aussi la
section critique.
 Pratique pour représenter le modèle basique de producteur /
consommateur.
 Principe
 Les deux processus inspectent une variable « turn »
 Le processus 1 entre dans sa section critique si turn est à 0.
Sinon, il entre dans une phase d’attente active.
 A l’inverse du processus 1, le processus 2 entre dans sa section
critique si turn est à 1. Sinon il entre dans une phase d’attente.
 Chacun des deux processus alterne la variable turn à la fin de sa
section critique.
 Le processus 1 : 01
 Le processus 2 : 10
Pr. M. Alaoui Talibi 2018-2019 149
 Alternance stricte
 Code d’entrée dans la section critique des deux
processus

Processus 1 Processus 2

Pr. M. Alaoui Talibi 2018-2019 150


 Quatre conditions sont nécessaires pour éviter les
conditions de concurrence tout en assurant la
coopération et l’utilisation adéquate des
ressources partagées :
1. Deux processus ne doivent pas se trouver
simultanément dans leurs sections critiques (exclusion
mutuelle).
2. Pas de suppositions sur la vitesse ou le nombre de
processeur mis en œuvre.
3. Aucun processus s’exécutant à l’extérieur de la section
critique ne doit bloquer d’autres processus
4. Aucun processus ne doit attendre indéfiniment pour
pouvoir entrer dans sa section critique.

Pr. M. Alaoui Talibi 2018-2019 151


 Alternance stricte
 Problème :

 La démarche proposée entre en conflit avec la troisième


condition :

Le processus 1 peut être bloqué par un processus, hors de sa


section critique.

Par exemple, le processus 1 ne serait pas autorisé à imprimer


un autre fichier, car le processus 2 serait occupé à une autre
tache.

Pr. M. Alaoui Talibi 2018-2019 152


 Solution de Peterson
 Combine l’alternance stricte et la variable verrou

 Un processus peut enchaîner deux (ou plusieurs)


exécutions de la section critique, alors que
l’autre processus n’en a pas exécuté une.

 L’algorithme de Peterson, est composé de deux


procédures développées en C ANSI.

Pr. M. Alaoui Talibi 2018-2019 153


 Code de la solution de Peterson :
#define n 2 /*nb de processus*/
int turn; /* à qui le tour */
int interested[n]; /* toute valeur initialement 0 (FALSE)*/
void enter_region (int process) /* Le processus est 0 ou 1*/
{
int other; /* nb des autres processus */
other = 1 – process; /* l’opposé du processus */
interested[process] = TRUE; /* montre que vous êtes intéressés */
turn = process; /* définit l’indicateur */
while(turn == process && interested[other] == TRUE); /* instruction null */
}

void leave_region(int process) /* processus : qui quitte */


{
inerested[process] = FALSE; /* indique départ de la section critique */
}

Pr. M. Alaoui Talibi 2018-2019 154


 Avantd’utiliser les variables partagées, chaque
processus appelle enter_region avec son propre
numéro de processus, 0 ou 1.

 Cet appel le met en attente, jusqu’à ce qu’il entre

 Unefois qu’il a fini avec les variables partagées, le


processus appelle leave_region pour autoriser un
autre processus à entrer.

Pr. M. Alaoui Talibi 2018-2019 155


 Voyons comment fonctionne cette solution :
 1er cas :
 Aucun des processus ne se trouve dans sa section
critique.
 Le processus 0 appelle enter_region.
 Il montre son intérêt en positionnant turn à 0.
 Si le processus 1 est désintéressé, enter_region
retourne immédiatement.
 Si le processus 1 appelle maintenant enter_region,
il attend jusqu’à ce que interested[0] passe à FALSE.
 Ceci ne se produit que si le processus 0 appelle
leave_region.
Pr. M. Alaoui Talibi 2018-2019 156
 2éme cas :

 Les 2 processus appellent enter_region simultanément.


 Ils vont stocker tous les 2 leur numero de processus dans
turn.
 Supposons que le processus 1 soit stocké en dernier : turn
est à 1.
 Lorsque les 2 processus arrivent, le processus 0 entre en
section critique.
 Le processus 1 n’entre pas en section critique tant que le
processus 0 n’a pas quitté la sienne.

Pr. M. Alaoui Talibi 2018-2019 157


 Instruction TSL :

Etudions maintenant une proposition qui sollicite un


peu d’aide de la part du matériel. De nombreux
ordinateurs, et notamment ceux qui ont été conçus
pour accueillir plusieurs processeurs, prennent en
charge l’instruction :

TSL RX, LOCK

Pr. M. Alaoui Talibi 2018-2019 158


 Elle fonctionne de la manière suivante :

Elle lit le contenu du mot mémoire lock dans le


registre RX, puis stocke une valeur différente de 0 à
l’adresse mémoire lock.

Les opérations qui consistent à lire le mot et à y


stocker une valeur sont absolument indivisibles :
aucun autre processeur ne peut accéder à la
mémoire tant que l’instruction n’est pas terminée.

Le processeur exécutant l’instruction TSL verrouille


le bus mémoire pour interdire aux autres processeurs
d’accéder à la mémoire tant qu’il n’a pas terminé.
Pr. M. Alaoui Talibi 2018-2019 159
 DONC, pour exploiter l’instruction TSL, on fait
appel à une variable partagée, lock, afin de
coordonner l’accès à la mémoire partagée.

Lorsque lock est à 0, n’importe quel processus peut


la positionner à 1 via l’instruction TSL, puis lire ou
écrire dans la mémoire partagée. Cela fait, le
processus repositionne lock à 0 à l’aide d’une
instruction move ordinaire.

Mais comment utiliser cette instruction pour


empêcher deux processus d’entrer simultanément
dans leurs sections critiques ?
Pr. M. Alaoui Talibi 2018-2019 160
La solution est illustré dans les sous-programmes
suivants :

Enter_region :
TSL REGISTER, LOCK |copie lock dans le registre et
|la positionne à 1
CMP REGISTER, #0
JNE enter_region
RET

leave_region :
MOV LOCK, #0
RET
Pr. M. Alaoui Talibi 2018-2019 161
 Limitations
 Toutes les solutions de cette catégorie obligent le
processus en attente d’entrer dans sa section critique
à rester actif.
 Le processus s’installe dans une petite boucle en
attendant l’ouverture.

  Cette approche est très consommatrice du temps


processeur.
 Le processus consomme, inutilement, sa part du
processeur.

Pr. M. Alaoui Talibi 2018-2019 162


 Principe :
 Le processus, en attente d’entrer dans sa section critique,
ne doit pas rester actif.
 N’a pas besoin d’avoir la CPU
  Le processus en attente doit se bloquer (s’endormir)
en attendant que le processus en cours le débloque (le
réveille).
 Deux primitives sont utilisées : sleep et wakeup
 Un processus qui n’est pas autorisé à entrer dans la section
critique se bloque (est suspendu de la liste de l’ordonnanceur
) en appelant la primitive sleep.
 A la fin de la section critique, le processus vérifie si un processus
est bloqué, si c’est le cas il le réveille avec la primitive wakeup.
Pr. M. Alaoui Talibi 2018-2019 163
 Producteur/consommateur
 Deux processus se partagent un tampon (buffer) de taille
fixe. Le premier (producteur) écrit des informations dans le
tampon et le deuxième (consommateur) y récupère les
informations.
 Le producteur se bloque quand le tampon devient plein.
 Le consommateur se bloque quand le tampon se vide.
 Principe :
 N étant la taille fixe du tampon
 Les deux processus se partagent une variable « count »
correspondant au nombre d’éléments dans le tampon
 Consommateur
 Si count = 0  le consommateur entre en sommeil
 Si count = N-1  le consommateur réveille le producteur
 Producteur
 Si count = N  le producteur entre en sommeil
 Si count = N-1  le producteur réveille le consommateur

Pr. M. Alaoui Talibi 2018-2019 164


 Producteur/consommateur
 Problème de conditions de concurrence (qu’on risque
de rencontrer)

 Le consommateur lit la valeur de count qui est à 0 et avant de


se mettre en sommeil on lui retire la CPU.
 Le producteur insère un élément dans le tampon et
incrémente count qui passe à 1. Dans ce cas, il tente de
réveiller le consommateur qui ne s’est pas encore endormi.

 Cette tentative sera ignorée


 Le consommateur reprend la CPU et, croyant que la valeur de
count est 0, se met en sommeil  il y restera à jamais.

Pr. M. Alaoui Talibi 2018-2019 165


 Telleétait la situation, en 1965, lorsque E. W.
Dijkstra suggéra d’utiliser un nouveau type de
variable entière qui devait permettre de
décompter le nombre de wakeup enregistrés pour
un usage ultérieur.

 Danssa proposition, il appelait ce nouveau type de


variable un sémaphore.

Pr. M. Alaoui Talibi 2018-2019 166


 Unsémaphore est une variable entière spéciale sur
laquelle on peut exécuter deux opérations : down
et up
 L’opération down teste si le sémaphore est supérieur à
0. Dans ce cas, elle le décrémente et le processus peut
entrer dans la section critique. Si le sémaphore est nul
alors, le processus entre en sommeil.
 L’opération up incrémente le sémaphore.
 Si un processus se trouve en sommeil sur ce sémaphore, alors
il sera réveillé.
 Les opérations de test, de modification du sémaphore
et de mise en sommeil sont indivisibles
 ceci permet d’éviter les conditions de concurrence.
Pr. M. Alaoui Talibi 2018-2019 167
 Résolution du problème du producteur / consommateur
avec les sémaphores :
 Deux processus se partageant un tampon de taille fixe. Le
premier écrit dans le tampon et l’autre y consomme.

 Trois sémaphores sont utilisés dans la solution


 Full : pour compter le nombre d’emplacements pleins dans tampon

 Empty : le nombre d’emplacements vides

 Mutex : pour assurer l’exclusion mutuelle lors de l’accès au tampon


(afin de s’assurer que le producteur et le consommateur n’accèdent
pas simultanément au tampon).

Pr. M. Alaoui Talibi 2018-2019 168


 Dans la figure suivante, le sémaphore mutex est
employé pour l’exclusion mutuelle. Il est conçu
afin de garantir qu’un seul processus à la fois
accédera en lecture et en écriture au tampon et
aux variables associées.

 Cetteexclusion mutuelle est indispensable pour


éviter tout désordre.

Pr. M. Alaoui Talibi 2018-2019 169


 Solution du Producteur/consommateur

#define n 100 /* nb d’emplacements dans le tampon */


Typedef int semaphore ; /* les semaphores sont un type de variable int */
semaphore mutex = 1; /* contrôle l’acces à la section critique */
semaphore empty = n; /* compte les emplacements vides dans le tampon */
semaphore full = 0; /* compte les emplacements pleins */
void producer()
{
int item;
while (TRUE) /* TRUE est la constante 1 */
{
item = produce_item(); /* génère qlq chose à placer dans le tampon */
down(&empty); /* décrèmente le décompte des emplacements vides */
down(&mutex); /* entre en section critique */
insert_item(item); /* place un nouvel élément dans le tampon */
up(&mutex); /* quitte la section critique */
up(&full); /* incrémente le décompte des emplacements pleins */
}
}
Pr. M. Alaoui Talibi 2018-2019 170
void consumer()
{
int item;
while (TRUE) /* boucle sans fin */
{
down(&full); /* décrémente le décompte des emplacements pleins */

down(&mutex); /* entre en section critique */


item = remove_item(); /* prélève un élément dans le tampon */
up(&mutex); /* quitte la section critique */
up(&empty); /* incrémente la décompte des emplacements vides */
consomme_item(item); /* fait quelque chose avec l’élément */
}
}

Pr. M. Alaoui Talibi 2018-2019 171


 les sémaphores servent également à faire de la
synchronisation.

Les sémaphores full et empty sont nécessaires pour garantir


que certaines séquences d’événements se produisent ou ne
se produisent pas.

 Dans ce cas de figure, ils font en sorte que le producteur


cesse de s’exécuter lorsque le tampon est plein, et que le
consommateur cesse de s’exécuter quand il est vide.

 Il s’agit d’un usage différent de celui de l’exclusion


mutuelle.

Pr. M. Alaoui Talibi 2018-2019 172


 Version simplifiée des sémaphores
 Prend en charge particulièrement l’exclusion mutuelle
 Un mutex peut prendre deux valeurs
 1 : déverrouillé
 0 : verrouillé
 Deux fonctions pour la gestion des mutex
 Mutex_lock : invoquée pour pouvoir entrer en section
critique
 Si le mutex est à 1 alors, il passe à 0 et le processus pourrait
entrer en section critique.
 Si le mutex est à 0 alors le processus se bloquerait jusqu’à ce que
le mutex sera débloqué par un autre processus (celui qui exécute
sa section critique)
 Mutex_unlock : remet le mutex à 1 à la fin de la section
critique, et réveille éventuellement un processus bloqué.
Pr. M. Alaoui Talibi 2018-2019 173
 L’usage des sémaphores est relativement complexe et la moindre erreur peut avoir
des conséquences fatales sur le fonctionnement global des processus.
 Exemple : producteur/consommateur
 Que se passe-t-il si, par erreur, l’ordre des deux instructions down dans le producteur a été
inversé?

void producer() void consumer()


{ {
int item; int item;
while (TRUE) while (TRUE)
{ {
item = produce_item(); down(&full);
down(&mutex); down(&mutex);
down(&empty); item = remove_item();
insert_item(item); up(&mutex);
up(&mutex); up(&empty);
up(&full); consomme_item(item);
} }
} }

Pr. M. Alaoui Talibi 2018-2019 174


 Exemple : producteur/consommateur (suite)

 Si mutex = 1 et empty = 0  le producteur va pouvoir


réaliser l’opération down(mutex) ce qui signifie que
le mutex passe à 0. Par contre il se bloquera après
l’opération down(empty).
 Le consommateur sera bloqué sur down(mutex) parce
que le producteur n’a pas encore fait l’opération
up(mutex).
 Le consommateur ne pourra jamais incrémenter la
valeur de empty et le producteur ne pourra jamais
incrémenter la valeur de mutex
Pr. M. Alaoui Talibi 175
  interblocage

  utilisation des primitives de synchronisation de haut


niveau fournies par un langage de programmation :

Moniteurs

Pr. M. Alaoui Talibi 2018-2019 176


 Mettre à la disposition des utilisateurs un moyen de
définir et de spécifier une partie du code
nécessitant l’exclusion mutuelle sans se soucier de
la gestion «complexe » de sémaphores.
 Minimiser le risque d’erreur lors de la gestion des
sémaphores.

 utilisation des primitives de synchronisation de


haut niveau fournies par un langage de
programmation : Moniteurs.

Pr. M. Alaoui Talibi 2018-2019 177


 Un moniteur est un module spécial regroupant des
fonctions, des variables et des structures de
données.
 Les processus peuvent appeler les fonctions du
moniteur, mais ils ne peuvent pas accéder
directement à ses structures internes.
 A un instant donné, un seul processus peut être
actif dans le moniteur.
 Le programmeur n’a pas à se soucier de la
manière d’assurer l’exclusion mutuelle :
 Normalement c’est le compilateur qui s’en charge
Pr. M. Alaoui Talibi 2018-2019 178
 Comment synchroniser deux processus qui
s’exécutent sur deux ordinateurs distincts reliés
par internet ?
 Pas de mémoire partagée pour conserver un
sémaphore.
 Les moniteurs eux aussi se basent sur les sémaphores.
 Les autres techniques vues précédemment nécessitent
une zone mémoire partagée.

 L’échange de message

Pr. M. Alaoui Talibi 2018-2019 179


 Lesprocessus distants peuvent se synchroniser en
échangeant des messages avec deux primitives send
et receive (en général présentes sous forme d’appel
système).

 send(destination, &message)
 Envoie un message vers une destination
 receive(source, &message)
 Reçoit un message d’une source donnée.
 En l’absence du message, le récepteur peut se bloquer jusqu’à
ce que celui-ci arrive.

Pr. M. Alaoui Talibi 2018-2019 180


 Problème de perte de messages
 Utiliser la technique d’acquittement et de duplication
de messages.
 Pour chaque message reçu, on doit envoyer un accusé de
réception.
 Si l’émetteur ne reçoit pas l’accusé de réception, il déduit
que son message est perdu  il réémette le message
 Que se passe-t-il si le message est arrivé mais son
accusé de réception est perdu?
 Le message sera réémis et risque d’être pris en compte deux
fois.
  numéroter les messages
 Si un message arrive deux fois, le récepteur peut se rendre
compte qu’il s’agit d’un doublon et l’ignorer.

Pr. M. Alaoui Talibi 2018-2019 181


 Moyen de synchroniser un groupe de processus au
début de chaque « phase »

 Tous les processus doivent arriver à un seuil


(barrière) avant que chacun d’eux ne puisse
poursuivre son exécution
 Point de rencontre

 Attendre le dernier

Pr. M. Alaoui Talibi 2018-2019 182


A A A

B B B
barrière

barrière

barrière
C C C

D D D

temps
Les processus A, B, C et D doivent tous atteindre la
barrière avant que le groupe puisse poursuivre la suite
de l’exécution

Pr. M. Alaoui Talibi 2018-2019 183


Classification des
Architectures parallèles

Pr. M. Alaoui Talibi 184


 Dans ce chapitre, nous passons en revue les divers
concepts sous-jacents aux architectures parallèles.
 La distinction entre les architectures synchrones et
asynchrones conduit à une classification qui va :

 Des pipelines,
 Des processeurs vectoriels,
 Des machines SIMD,

 Aux machines MIMD à mémoire partagée et

 Aux réseaux de processeurs.


Pr. M. Alaoui Talibi 185
 Nous définissons deux modèles théoriques importants
pour les études de complexité algorithmique :

 Les PRAM
 Et les circuits booléens et arithmétique

 Nous présentons enfin, les mesures de performances


des ordinateurs parallèles.

Pr. M. Alaoui Talibi 186


1. Présentation informelle des ordinateurs parallèles:

La notion de parallélismes recouvre de nombreux


concepts, allant :

- de la manipulation des bits


à
- Un niveau plus grossier (découpage d’un programme
en procédures complexes indépendantes ).

Pr. M. Alaoui Talibi 187


 Plusieurs classifications ont été proposées dans la
littérature. La plus populaire celle de Flynn.

 Ellesest basée sur le type d’organisation des flots


de données et des flots d’instructions.

Pr. M. Alaoui Talibi 188


 Cependant, cette classification, ne permet pas de
tenir compte de beaucoup de facteurs tels que :

- Le mode de fonctionnement des processeurs,

- L’organisation de la mémoire ou encore

- La granularité des processeurs (taille des éléments


logiques de base des processeurs).

Pr. M. Alaoui Talibi 189


 On peut dégager trois grandes classes de machines
parallèles :

 Les machines généralistes à mémoire partagée.

 Les réseaux de processeurs asynchrones à mémoire


Distribuée.

 Les machines distribuées synchrones massivement


parallèles (machines généralistes ou spécialisées).

Pr. M. Alaoui Talibi 190


Problèmes :

 L’augmentation du nombre des processeurs modifie


énormément la structure de base de l’ordinateur.

 Les problèmes d’accès mémoire deviennent cruciaux


pour pouvoir acheminer des données au rythme du
traitement des processeurs.

 De même, les problèmes de communication entre


processeurs sont importants.

Pr. M. Alaoui Talibi 191


 Denombreuses solutions ont été proposées à ces
problèmes et plusieurs architectures ont vu le jour.

 La plus simple, et la plus utilisée est celle de Flynn.

 Celle-ci,
a pour critère de sélection :
le mode de contrôle des suites d’opérations
élémentaires effectuées par les différents processeurs.

 Leprocessus essentiel dans un ordinateur est


l’exécution d’une suite d’instructions sur un
ensemble de données. Pr. M. Alaoui Talibi 192
 En général, les ordinateurs peuvent être classifiées
selon la multiplicité des flots d’instructions et de
données disponibles matériellement.

 En conservant les initiales anglaises consacrées par


l’usage, on obtient essentiellement les architectures
suivantes :
- SIMD : un seul flot d’instructions, plusieurs flots de
données.(single instruction multiple data)
- SPMD : chaque processeur dispose du même
programme.(single program multiple data)
Pr. M. Alaoui Talibi 193
 MISD : plusieurs instructions successives traitent la
même donnée.
 MIMD : plusieurs flots d’instructions et de données.

 Un flot d’instructions est une suite d’instructions


issues d’une partie contrôle en direction d’un ou
plusieurs processeurs.

 Un flot de données est une suite de données venant


d’une zone mémoire en direction d’un processeur ou
venant d’un processeur en direction d’une zone
mémoire.
Pr. M. Alaoui Talibi 194
 Principe de l’ordinateur séquentiel :
Les instructions sont exécutées séquentiellement
mais peuvent être pipelinées.

Figure.
Architecture
synchrone

Pr. M. Alaoui Talibi 195


 En microarchitecture,

Un pipeline (ou chaîne de traitement1),


est l'élément d'un processeur dans lequel
l'exécution des instructions est découpée
en plusieurs étapes.

Pr. M. Alaoui Talibi 196


Architectures pipeline et vectorielle :
Le principe des architectures pipelines est le suivant :

 Ondivise l’opération à effectuer en étapes de


durées égales qui s’exécutent successivement.

 Lesentrées d’une étape sont constituées par les


sorties de l’étape précédente.

 Lepipeline est une unité matérielle qui reproduit


cette division.
Pr. M. Alaoui Talibi 197
 Ilest donc composé d’étages séparés par des
registres nécessaires au stockage des données
intermédiaires.

 Au sens de la classification de Flynn, ces architectures


révèlent du mode MISD.

 Eneffet, une même donnée est traitée par un flot


multiple d’instructions élémentaires successives.

Pr. M. Alaoui Talibi 198


Architecture vectoriel :
 Un vecteur est un ensemble ordonnée de n éléments.

 Chaque élément est un scalaire, nombre réel


flottant, entier, booléen ou caractère.

 Un processeur vectoriel est une unité permettant


de traiter des vecteurs.

 Ilest constitué de registres de stockage et d’une


ou plusieurs unités pipelines.

Pr. M. Alaoui Talibi 199


Architecture SIMD :
 Plusieurs unités de traitement sont supervisées par
la même unité de contrôle.

 Toutes les unités de traitement reçoivent la même


instruction ( ou le même programme, auquel cas
on parle d’une structure SPMD ) diffusée par
l’unité de contrôle,

Mais opèrent sur des ensembles de données


distincts, provenant de flots de données distincts.
Pr. M. Alaoui Talibi 200
Figure : Structure SIMD

Pr. M. Alaoui Talibi 201


 Chaque unité de traitement exécutant la même
instruction au même instant, on obtient un
fonctionnement synchrone des processeurs.

 la mémoire partagée peut être subdivisée en


plusieurs modules.

 Dans ce cas, l’accès des unités de traitement aux


différents modules se fait par un réseau
d’interconnexion que nous étudierons après.

Pr. M. Alaoui Talibi 202


 Un calculateur SIMD peut être considéré comme un
monoprocesseur exécutant des instructions sur des
tranches de plusieurs éléments.

 Ilest donc particulièrement bien adapté aux


traitements d’opérations vectorielles.

Pr. M. Alaoui Talibi 203


 Par exemple, les ordinateurs :

- ILLIAC IV
- BSP
- STARAN
- MPP
- Et plus récemment les DAP de AMT

Par contre, OPSILA ou les hypercubes FPS de la série T sont


des machines SIMD/SPMD.

 Notons que la plupart des machines actuelles MIMD peuvent


s’utiliser en mode SPMD.

Pr. M. Alaoui Talibi 204


 Parallélisme partagé :

Les premiers ordinateurs parallèles à avoir


effectivement connu un succès industriel sont les
machines à mémoire partagée.

Considérons p processeurs vectoriels reliés à une grande


Mémoire commune.

Le fonctionnement des processeurs s’effectue en mode


MIMD.
Pr. M. Alaoui Talibi 205
 Càdchaque processeur peut évoluer indépendamment
des autres.

 Leséchanges d’informations entre les processeurs se


font par l’intermédiaire de la mémoire.

 Lesmachines appartenant à cette classe possèdent


un nombre relativement faible des processeurs (une
dizaine), mais chacun assez puissant.

 Ladiminution des temps d’exécution n’est pas le seul


but que les utilisateurs (constructeurs) recherchent.
Pr. M. Alaoui Talibi 206
 Ils voudraient aussi disposer de plus en plus de
mémoire pour pouvoir traiter des problèmes
toujours plus grands.

 Or, l’accès à des mémoires de grandes dimensions


est lent.

 Comme la vitesse de base des unités de traitement


augmente sans cesse, il faut organiser les mémoires
de telle sorte que l’accès soit rapide.

Pr. M. Alaoui Talibi 207


Figure. Structure MIMD
Pr. M. Alaoui Talibi 208
 La grande mémoire est divisée en modules distincts
possédant chacun son propre canal d’entrées-sorties
(les bancs mémoire).

 Ces bancs sont reliées aux processeurs par


l’intermédiaire de bus ou d’un réseau
d’interconnexion.

 la différence entre le SIMD et le MIMD, est que pour


le dernier, chaque processeur possède sa propre
unité de contrôle.
Pr. M. Alaoui Talibi 209
 Lesprocesseurs ont donc un fonctionnement
indépendant : en particulier asynchrone, et
exécutant des programmes différents.

Pr. M. Alaoui Talibi 210


 Architectures MIMD distribuées :

Les difficultés d’accès à la mémoire limitent le


nombre de processeurs :

au-delà de quelques dizaines


de processeurs, les performances du réseau
d’interconnexion se dégradent.

Pr. M. Alaoui Talibi 211


 Chaque processeur doit disposer d’une mémoire
locale à accès rapide et n’est connecté qu’a un
certain nombre de processeurs voisins.

 nous avons deux modèles :


1.
 Les processeurs travaillent en partageant des
données de la mémoire commune.
 Chaque processeur lit en mémoire les données dont
il a besoin, effectue son traitement, puis écris les
résultats en mémoire.
Pr. M. Alaoui Talibi 212
2.
 Les processeurs travaillent en échangeant des
messages.

 Chaque processeur lit sur un ou plusieurs canaux de


communications les données dont il a besoin en
provenance d’autres processeurs, effectue son
traitement, puis transfère les résultats en direction
des processeurs qui les demandent.

Pr. M. Alaoui Talibi 213


 Cherchent à exploiter au maximum le parallélisme
d’un algorithme en s’affranchissant des contraintes
liées à l’ordre d’exécution des instructions.

 Le principe de base est d’autoriser l’exécution


d’une instruction dés que ses opérandes sont
disponibles.

 Le début d’une instruction ne dépend alors que de


la disponibilité des données et non pas de sa
position dans le programme.
Pr. M. Alaoui Talibi 214
 Explication
: L’exécution du programme est liée
aux contraintes de dépendance entre données.

Pr. M. Alaoui Talibi 215


 Elle comporte :
 Une unité mémoire contenant les opérandes et les
instructions non actives,

 Une unité de recherche des instructions actives

 Une file des instructions actives en attente d’exécution.

 Une unité de traitement avec plusieurs processeurs,

 Une unité de mise à jour dont le rôle est d’affecter


leurs valeurs aux opérandes à l’issue du traitement.
Pr. M. Alaoui Talibi 216
Pr. M. Alaoui Talibi 217
 Présentation générale :

L’étude de la complexité algorithmique parallèle nécessite


que soit défini un modèle de calcul, que nous appelons un
modèle de machines, pour exécuter des algorithmes.

 Cependant, de nombreux modèles existent pour les


ordinateurs parallèles.

 Suivant le modèle utilisé, Il existe des notions différentes


de complexité algorithmique.

Pr. M. Alaoui Talibi 218


 Dans ce paragraphe, nous allons étudier deux
d’entre eux :

 les PRAM, Parallel Random Access Machines,

 Et les circuits booléens et arithmétiques.

Pr. M. Alaoui Talibi 219


 Thèse du calcul parallèle :

Se fonde sur l’idée intuitive d’une relation entre le


temps de calcul des machines parallèles et l’espace
de calcul (taille de la mémoire) des machines
séquentielles.

Tout problème qui peut être résolu sur un ordinateur


séquentiel (raisonnable) en utilisant un espace de
taille mémoire (polynomiale) peut être résolu en temps
Polynomial sur un ordinateur parallèle (raisonnable)
et vice versa.
Pr. M. Alaoui Talibi 220
Définir des ordinateurs raisonnables, aussi bien séquentiel que
parallèle n‘est pas une tache simple.

Un consensus s’est établi entre théoriciens qui repose sur la


« thèse de l’invariance ».

 Thèse d’invariance :

Des machines raisonnables peuvent se simuler entre elles avec


au plus un accroissement polynomial en temps et une
multiplication constante de l’espace.

Pr. M. Alaoui Talibi 221


 Le modèle PRAM :

Un Parallel Random Access Machine PRAM est un


ensemble de processeurs séquentiels indépendants,
des RAM, qui possèdent donc chacun une mémoire
privée (ou locale) et qui communiquent entre eux en
utilisant une mémoire globale qu’ils se partagent.

Pr. M. Alaoui Talibi 222


 Opérations fondamentales :

Considérons une PRAM composée de :

p processeurs numérotées de P0 à Pp-1


m positions mémoires M0 à Mm-1

Chaque processeur peut effectuer des opérations


atomiques, en une unité de temps :
Lire(Mi)
Ecrire(Mi)
Calculer(f)
Pr. M. Alaoui Talibi 223
 Toutes
ces opérations atomiques s’effectuent de
manière synchrone,

 Autrement dit, au même instant, tous les processeurs


lisent, écrivent et calculent.

 Extensions :

Le modèle PRAM doit être modifié pour prendre en


compte les accès mémoire dans le cas d’une mémoire
distribuée.
Pr. M. Alaoui Talibi 224
 Définition:
Une DRAM ( Distributed RAM ) est un ensemble de p
processeurs Pi, de p zones mémoires Mi et d’une
famille de couples X=(i,j).

Nous noterons Xi l’ensemble des couples (i,.).

Le processeur Pi ne peut accéder qu’aux zones


mémoire Mj quel que soit j appartenant à Xi.

X est le réseau d’interconnexion de la DRAM.


Pr. M. Alaoui Talibi 225
 Pour lire une donnée située dans une case mémoire
à laquelle il n’est pas directement connecté :

Un processeur doit donc obtenir l’aide d’autres


processeurs qui, en lisant et en écrivant, déplaceront
la donnée de la case mémoire initiale à une case
accessible par le processeur intéressé.

Pr. M. Alaoui Talibi 226


 Le facteur d’accélération :

Considérons un algorithme qui s’exécute sur un


ordinateur parallèle comportant p processeurs
(identiques) en un temps tp, et soit t1 son temps
d’exécution séquentiel (sur un ordinateur avec un
seul processeur).
On définit le facteur d’accélération par le rapport :

Sp = t1/tp

Théorème : quel que soit p, 1 ≤ Sp ≤ p (A démontrer).


Pr. M. Alaoui Talibi 227
 Limitations du facteur d’accélération :

Divers auteurs ont essayé de préciser les bornes du


facteur d’accélération suivant l’architecture (à
chercher):

 Loi d’Amdahl
 Loi de Minsky
 Table de Stone

Pr. M. Alaoui Talibi 228


 Dansce chapitre, nous introduisons les principales
notions de complexité parallèle.

 Lemodèle utilisé est principalement le modèle PRAM


et ses dérivées.

 Nousétudions la complexité parallèle de plusieurs


algorithmes de base.

Pr. M. Alaoui Talibi 229


 Description des hypothèses :
 La structure de l’ordinateur est de type SIMD ou
MIMD avec une mémoire commune partagée.

 Nous supposerons que notre modèle peut admettre


un nombre illimité de processeurs.

 L’unité de base est le temps d’exécution d’une


opération arithmétique

 Nous négligeons les temps de communication entre


la mémoire et les processeurs.
Pr. M. Alaoui Talibi 230
 Objectifs de l’étude de la complexité parallèle :

 Il s’agira de trouver dans l’algorithme les opérations


susceptibles d’être exécutées simultanément.

 Considérons un problème donné : calcul du produit


scalaire de deux vecteurs de taille n.

 Une question classique : chercher la complexité


séquentielle de ce problème.

 Càd le temps de calcul minimum pour résoudre le


problème.
Pr. M. Alaoui Talibi 231
 On procède généralement en deux étapes :

 Recherche d’une borne inferieur.

 Ensuite, construction d’un algorithme séquentiel


dont le temps d’exécution est égal à cette borne.

Un tel algorithme est dit optimal

Pr. M. Alaoui Talibi 232


 Lesalgorithmes que nous étudierons s’exécutant
en un nombre fini d’opérations,

 2n-1 (nb d’opérations) pour le cas du produit scalaire,

 Cecirevient à supposer que le nombre de processeurs


est égal à ce nombre d’opérations.

Pr. M. Alaoui Talibi 233


 Evaluation d’une expression arithmétique :

Dans une première partie, nous étudions les relations


entre algorithmes d’évaluation d’une expression et
arbres binaires étiquetés.

Définition :
1. Une expression de taille n est un problème
possédant n données (variables ou atomes) et
fournissant un seul résultat, et dont toutes les
opérations sont binaires.
Pr. M. Alaoui Talibi 234
 L’expression est simple si chacune des variables
n’est utilisée qu’une seule fois comme opérande.

 E est une expression simple si E satisfait une des


conditions suivantes :

1. E = xi où xi est une variable


2. E = o G où G est une expression simple et où o
appartient {+,-}.
3. E = G o D où G et D sont des expressions simples
portant sur des ensembles de variables disjoints
et où o appartient à {+,-,*,/}.
Exemple.
Pr. M. Alaoui Talibi 235
 Nousdéfinissons maintenant les arbres binaires
étiquetés.

 Ladéfinition dépend d’un entier p qui représente


le nombre de processeurs.

 L’arbre
étiqueté conduit à un algorithme d’évaluation
avec p processeurs : chaque nœud représente une
opération et l’étiquette du nœud la date d’exécution
de cette opération.

Pr. M. Alaoui Talibi 236


 Définition :

Soit p un entier positif. Nous appelons A(p) l’ensemble des


arbres binaires étiquetés construits de la manière suivante :

1. l’arbre avec un seul nœud étiqueté 0 appartient à A(p) et


a une profondeur égale à 0.

2. Pour d≥0, un élément de A(p) de profondeur d+1 est


obtenu à partir d’un élément de A(p) de profondeur d en
ajoutant 1 à toutes les étiquettes et en remplaçant au plus
p de ses feuilles par l’arbre binaire à trois sommets dont
les feuilles sont étiquetées 0 et la racine 1.

Pr. M. Alaoui Talibi 237


 L’arbrebinaire à trois sommets dont les feuilles
sont étiquetées 0 et la racine 1 est appelé arbre de
base.

Exemple : prenons p=3;

Pr. M. Alaoui Talibi 238


 Relationsentre évaluation des expressions et arbres
binaires étiquetés :

Lemme :
1. Tout algorithme parallèle d’évaluation d’une
expression de taille n avec p processeurs peut être
représenté par un élément de A(p) admettant au
moins n feuilles.

Pr. M. Alaoui Talibi 239


2. Toute expression simple de taille n peut être
représentée par un élément de A(p) possédant n feuilles.
Cet arbre détermine un algorithme parallèle d’évaluation
de l’expression avec p processeurs.

 Pour tout arbre de A(p), de profondeur d et possédant n


feuilles, il existe une expression simple de taille n et un
algorithme parallèle d’évaluation de cette expression,
représenté par cet arbre.
Exemple1
Exemple2

Pr. M. Alaoui Talibi 240


Stratégies de conception
d'algorithmes parallèles :

Pr. M. Alaoui Talibi 241


 Le but est de :
 résoudre plus rapidement un problème donné ;
 résoudre un problème plus gros pour une même
durée de calcul.

Elle concerne :

 le calcul scientifique en cherchant à modéliser


et à simuler des phénomènes naturels, et les grands
défis :

 Réchauffement climatique, un nouveau médicament...


Pr. M. Alaoui Talibi 242
 La cosmologie, l’imagerie médicale, la prédiction
des tremblements de terre, le climat.

Ces programmes sont exécutés sur des architectures


parallèles avec souvent autant de processus que de
processeurs.

Pr. M. Alaoui Talibi 243


 On distingue deux grandes classes de programmes
parallèle :

 Parallélisme de données : chaque processeur


réalise un même traitement sur une partie des
données ;

 Parallélisme de contrôle : chaque processeur


réalise un traitement différent.

Pr. M. Alaoui Talibi 244


 Les différents processus d'une même application
ont besoin :

 d'interagir entre eux,


 de communiquer,
 de se synchroniser,

et suivant leur localisation entre les différents


processeurs :

Pr. M. Alaoui Talibi 245


 En multi-programmation : utilisation de variable
partagée ;

 En distribué : échange de message

 En parallèle : soit l'un, soit l'autre, soit les deux en


fonction du matériel utilisé.

Pr. M. Alaoui Talibi 246


 Parallélisme itératif :

 Il est utilisé lorsque le programme est décomposé en


différents processus souvent identiques,

 Chacun contenant une ou plusieurs boucles.

 Ces processus travaillent ensemble pour résoudre un


seul problème.

 Ils communiquent et se synchronisent par variables


partagées et envoi de messages.

Essentiellement : du calcul scientifique exécuté sur


plusieurs processeurs.
Pr. M. Alaoui Talibi 247
 Parallélisme de récursion :

Il peut être utilisé lorsque il existe une ou plusieurs


procédures récursives et que ces appels sont
indépendants entre eux.

Pr. M. Alaoui Talibi 248


La récursion est utilisée pour résoudre des problèmes
combinatoires : tri, ordonnancement (problème du
voyageur de commerce), jeu (échec).

Pr. M. Alaoui Talibi 249


 Producteur/Consommateur :

Ce sont des processus communiquants qui sont


souvent organisés en pipeline à travers lequel les
données circulent.

Chaque processus est un filtre qui utilise la sortie


de son prédecesseur et produit la sortie pour son
successeur.

Cette forme de pipeline est utilisée au niveau de l'OS


pour un shell Unix, par exemple.
Pr. M. Alaoui Talibi 250
 Client/Serveur : c'est le modèle dominant qui
s'applique du réseau local au réseau global.

Un client fait appel à un service et attend la réponse.

Un serveur attend une requête et travaille à la réception.

Un serveur peut être implémenté par :


 un seul processus gérant un client à la fois,
 ou bien comme un multi-programme (plusieurs
processus) pour traiter simultanément les requêtes de
plusieurs clients.
Pr. M. Alaoui Talibi 251
Lorsque client et serveur sont sur des machines
différentes :

il est nécessaire d'utiliser la notion de


rendez-vous et d'appel à distance.

Ce schéma peut être facilement automatisé, mais il


faut faire attention à son efficacité.

Pr. M. Alaoui Talibi 252


 Modèle Map/Reduce :

Pr. M. Alaoui Talibi 253


 Modèle Map/Reduce :

 Est un paradigme dédié pour exécuter un problème


large et complexe d’une manière distribuée.

 Les programmes adoptant ce modèle sont


automatiquement parallélisés et exécutés sur
des clusters (grappes) d’ordinateurs.
Fonctionnement de MapReduce :

Un programme MapReduce se compose des trois parties


suivantes :
 Le driver, qui s’exécute sur une machine client,
est responsable :
 d’initialiserle job
 puis de le soumettre pour exécution.
 Le mapper est responsable :
 de lire les données stockées sur disque
 et les traiter.
 Le reducer est responsable de :
 consolider les résultats issus du mapper
 puis de les écrire sur disque.
Pr. M. Alaoui Talibi 255
 Unebonne compréhension de MapReduce implique
la maitrise du fonctionnement de Hadoop et HDFS.

Pour cela, ces deux notions sont obligatoires pour


mieux appréhender la suite.

 Fonctionnement de Hadoop
 Fonctionnement de HDFS

Pr. M. Alaoui Talibi 256


 Hadoop :

 est une plateforme « framework » open source.

 destiné aux traitements distribués des données


massives de l’ordre de plusieurs pétaoctets.

 Elle permet de faciliter la création d’applications


distribuées.

 Est un environnement Big Data typique.


 L’écosystème Hadoop est un :

 produit de la fondation Apache basé pour sa


création sur le langage java.

 Hadoop se positionne aujourd’hui avec plus de


42000 nœuds chez Yahoo.

 Plusieurs fondations mondiales utilisent Hadoop tel


que : Ebay, Facebook, Amazon, Google, Microsoft,
LinkedIn, Twitter…
 Avantages de Hadoop :

 Parallélisme des données:


un même traitement et calcul peut être effectué
sur toutes les données.

 Performance :
Hadoop délivre à travers le critère de parallélisme
un support de traitement de grands volumes de
données et d’énormes data sets.
 Avantages de Hadoop :

 Économie : les coûts lors de l’utilisation de


Hadoop sont mieux contrôlés grâce à l’utilisation
de matériel de calcul de type standard.
 Le fonctionnement de Hadoop repose sur :

 HDFS (Hadoop Distributed File System) :

 Est un système de fichiers distribués de Hadoop


 Destiné pour le stockage distribué des données.
 Ce composant est distribué,
 tolérant aux pannes,
 portable,
 et également extensible.
 L’interet de MapReduce est de simplifier la vie du
programmeur, en lui masquant le fonctionnement
interne de Hadoop (parallélisation , tolérance aux
pannes,…etc).

 Ainsi, le modèle de programmation permet au


développeur de ne s’intéresser qu’à la partie
algorithmique.

 Il transmet alors son programme MapReduce développé


dans un langage de programmation au framework
Hadoop pour l’exécution.

Pr. M. Alaoui Talibi 262


Exemples de langages de programmation
paralléle:

Ruby/PRuby, C/OpenMP, C++/Threading


Building Blocks, C/OpenCL, C/MPI, Python.

Pr. M. Alaoui Talibi 263


Programmation parallèle en

mémoire distribué

Message Passing Interface


(MPI)

Pr. M. Alaoui Talibi 264


 le modèle pour les machines parallèles à mémoire
distribuée :

Comment avoir la parallélisation explicite ?

 L’utilisateur doit coder le parallélisme dans son


programme.

 AFIN DE exprimer :
 le rôle de chaque processeur dans les phases de
lecture ou
 de lecture/écriture de données distribuées.
Pr. M. Alaoui Talibi 265
Pr. M. Alaoui Talibi 266
Asynchrone ou faiblement synchrone :

 Il est adapté pour des programmes asynchrones :

 Tous les processeurs effectuent des tâches


concurrentes sans s’occuper des autres participants.

 ou faiblement synchrones

 Les étapes de lecture/écriture des données


synchronisent les processeurs
 mais les tâches s’effectuent de manière asynchrone.
Pr. M. Alaoui Talibi 267
Remarque :

 Les programmes respectent l’approche SPMD


(Single Program Multiple Data)

 où le plus grand nombre de processeurs effectuent


les mêmes tâches sur des données différentes.

 Seuls quelques processeurs peuvent effectuer des


tâches différentes.

Pr. M. Alaoui Talibi 268


 Les opérations Send/Receive :

 Les opérations de lecture/écriture nécessitent un moyen de


partager des données distribuées.

 La base de ce modèle de programmation s’appuie sur les


opérations élémentaires :

 d’envoi de messages :

send(void *sendbuf, int size, int dest)

 de réception de messages :

receive(void *recvbuf, int size, int source)

Pr. M. Alaoui Talibi 269


 La garantie des données :

Le processeur P1 reçoit 0 ou 100 ?

Pr. M. Alaoui Talibi 270


 Caractéristiques :

 Négociation entre l’émetteur et le récepteur avant la


transmission.

 Reprise des tâches à la fin de la transmission (fin envoi


/ fin réception).

 Les inconvénients :

 Un taux d’attente important pour l’émetteur ou le


récepteur.

 Des situations d’interblocage entre processus.


Pr. M. Alaoui Talibi 271
 Caractéristiques :

 L’émetteur et le récepteur disposent d’un buffer pour


stocker le message.

 Une opération send est décomposée en :

1- une bufferisation du message à transmettre (les données


peuvent être modifiées sans altérer la transmission).

2- un envoi du buffer de manière asynchrone ou non selon


le mode de communication sous jacent.
Pr. M. Alaoui Talibi 272
3- Une opération receive ne copie pas directement
le message mais utilise également une bufferisation
et :

 elle vérifie si le buffer contient le message à lire.

 ou attend jusqu’à réception du message dans ce


buffer.

Pr. M. Alaoui Talibi 273


 Avantages/Inconvénients :

 La bufferisation peut régler des temps d’attente et


certains interblocages.

 Si la taille des buffers n’est pas suffisante, des


coûts supplémentaires d’attente vont diminuer les
performances.

Si le programme est très synchrone :


- les opérations lecture/écriture ont lieu au même moment et
- On peut se passer du coût de la bufferisation.
Pr. M. Alaoui Talibi 274
Introduction :

1. Concepts de l’échange de Messages


2. Mémoire distribuée
3. Historique

Pr. M. Alaoui Talibi 275


 Parallélisme :

L’intérêt de faire de la programmation parallèle est :

 De réduire le temps d’exécution;


 D’effectuer de plus gros calculs;
 D’exploiter le parallélisme des processeurs modernes
(multi-coeurs, multithreading).

Mais pour travailler à plusieurs, la coordination est


nécessaire.

Pr. M. Alaoui Talibi 276


MPI est une bibliothèque permettant de
Coordonner des processus en utilisant le
Paradigme de l’échange de messages.

Pr. M. Alaoui Talibi 277


 Les implémentations de MPI sont fournies sous
forme de bibliothèques libres ou commerciales.

 Les deux principales: MPICH2, OpenMPI.

 Langage supportés: C/C++, Fortran, python, java,


perl ....

Pr. M. Alaoui Talibi 278


 l’environnement d’exécution
 les communications point à point (Send, Recv)
 les communications collectives (Bcast, Reduce,
Scatter,...).
 les groupes de processus et les communicateurs.
 la topologie d’inter-connexion des processus
(grilles, arbres,...).
 des types de données dérivés.
 etc

Pr. M. Alaoui Talibi 279


 Distributions :

[Link]
[Link]

Documents, Forums et tutoriaux :

[Link]
[Link]
[Link]
[Link]
[Link]
Pr. M. Alaoui Talibi 280
 Concepts de l’échange des messages :

Modèle de programmation séquentiel :

 le programme est exécuté par un et un seul processus;

 Toutes les variables et constantes du programme sont


allouées dans la mémoire allouée au processus;

 Un processus s’exécute sur un processeur physique


de la machine.

Pr. M. Alaoui Talibi 281


 Concepts de l’échange de messages :

Modèle de programmation séquentiel

Pr. M. Alaoui Talibi 282


 Concepts de l’échange de messages :
 Modèle de programmation par échange de messages

 Le programme est écrit dans un langage classique


(Fortran, C, C++, etc.);

 Toutes les variables du programme sont privées et


résident dans la mémoire locale allouée à chaque
processus;

 Chaque processus exécute éventuellement des


parties différentes d’un programme;
Pr. M. Alaoui Talibi 283
 Concepts de l’échange de messages :

 Une donnée est échangée entre deux ou plusieurs


processus via un appel, dans le programme, à des
sous-programmes particuliers.

Modèle de programmation par échange de messages


Pr. M. Alaoui Talibi 284
 Concepts de l’échange de messages :

Si un message est envoyé à un processus, celui-ci doit


ensuite le recevoir.

Échange d’un message

Pr. M. Alaoui Talibi 285


 Concepts de l’échange de messages :

Constitution d’un message

 Unmessage est constitué de paquets de données


transitant du processus émetteur au(x) processus
récepteur(s).

 Enplus des données (variables scalaires, tableaux,


etc.) à transmettre, un message doit contenir les
informations suivantes :

Pr. M. Alaoui Talibi 286


 Concepts de l’échange de messages :

 l’identificateur du processus émetteur;

 le type de la donnée;

 sa longueur;

 l’identificateur du processus récepteur.

Pr. M. Alaoui Talibi 287


 Concepts de l’échange de messages :

Constitution d’un message

Pr. M. Alaoui Talibi 288


 Concepts de l’échange de messages :

Environnement :

 Les messages échangés sont interprétés et gérés


par un environnement qui peut être comparé à la
téléphonie, à la télécopie, au courrier postal, à la
messagerie électronique, etc.

 Le message est envoyé à une adresse déterminée.

Pr. M. Alaoui Talibi 289


 Concepts de l’échange de messages :

Environnement :

 Le processus récepteur doit pouvoir classer et


interpréter les messages qui lui ont été adressés.

 L’environnement en question est MPI (Message


Passing Interface).

Pr. M. Alaoui Talibi 290


 Concepts de l’échange de messages :

Environnement :

 Une application MPI est un ensemble de processus


autonomes.

 Exécutant chacun leur propre code.

 et communiquant via des appels à des sous-programmes


de la bibliothèque MPI.
Pr. M. Alaoui Talibi 291
Mémoire distribuée :

Architecture des supercalculateurs :

 La plupart des supercalculateurs (clusters) sont des


machines à mémoire distribuée.

 Ils sont composés d’un ensemble de nœud,

 À l’intérieur d’un nœud la mémoire est partagée.


 Cluster : ensemble logique de ressources ( processeurs, mémoire, disques,
matériels réseaux, etc... ) généralement distribuées sur plusieurs machines
(noeuds).
Pr. M. Alaoui Talibi 292
Mémoire distribuée :

Architecture des supercalculateurs

Pr. M. Alaoui Talibi 293


Ada :

 332 nœuds de calcul.


 4 processeurs Intel SandyBridge
(8-cœurs) à 2,7 GHz par nœud.
 10 624 cœurs.
 192 Tflop/s (linpack)(nb d’opérations par seconde).
 (flop : unité de mesure de vitesse de calcul)
 LINPACK (puissance) : Un des tests de performance les plus communs employés
pour mesurer le nombre de FLOPS.

 244 kWatt.
 786 MFLOPS/watt.
 Mflops/watt : mesure la puissance de calcul délivrée par un ordinateur pour
chaque watt consommé. Pr. M. Alaoui Talibi 294
Turing :

 6 144 nœuds
 16 processeurs POWER A2 à 1,6 GHz par nœud
 98 304 cœurs
 393 216 cœurs logiques
 96 Tio ( 16 Go par nœud)
 1 073 Tflop/s (linpack)
 493 kWatt
 2 176 MFLOPS/watt

Pr. M. Alaoui Talibi 295


 Les
cœurs physiques sont le nombre de cœurs
physiques, les composants matériels réels.

 Lescœurs logiques sont le nombre de cœurs


physiques multiplié par le nombre de threads
pouvant s’executer sur chaque cœur
grâce à l’utilisation de l’hyperthreading.

 Parexemple, mon processeur à 4 cœurs execute


deux threads par cœur. J’ai donc 8 processeurs
logiques.

Pr. M. Alaoui Talibi 296


Mémoire distribuée :

OpenMP utilise un schéma à mémoire partagée,

tandis que

pour MPI la mémoire est distribuée.

Pr. M. Alaoui Talibi 297


Pr. M. Alaoui Talibi 298
Mémoire distribuée :

 Un schéma que l’on rencontre très souvent avec


MPI est la décomposition de domaine.

 Chaque processus possède une partie du domaine


global,

 et effectue principalement des échanges avec ses


processus voisins.

Pr. M. Alaoui Talibi 299


Pr. M. Alaoui Talibi 300
Introduction
Historique :
 Version 1.0 : en juin 1994, le forum MPI (Message Passing Interface
Forum), avec la participation d’une quarantaine d’organisations, aboutit à
la définition d’un ensemble de sous-programmes concernant la
bibliothèque d’échanges de messages MPI.

 Version 1.1 : juin 1995, avec seulement des changements mineurs

 Version 1.2 : en 1997, avec des changements mineurs pour une meilleure
cohérence des dénominations de certains sous-programmes

 Version 1.3 : Mai 1997, avec des clarifications dans MPI 1.2, en
fonction des clarifications elles-mêmes apportées par MPI-2.1

 Version 2.0 : apparue en juillet 1997, cette version apportait des


compléments importants volontairement non intégrés dans MPI 1.0
(gestion dynamique de processus, copies mémoire à mémoire, entrées-
sorties parallèles, etc.).
Pr. M. Alaoui Talibi 301
 Version 2.1 : juin 2008, avec seulement des
clarifications dans MPI 2.0 mais aucun changement.

 Version 2.2 : septembre 2009, avec seulement de


« petites » additions.

 Version 3.0 : septembre 2012 changements et


ajouts importants par rapport à la version 2.2;

Pr. M. Alaoui Talibi 302


 Communications collectives non bloquantes;
 Révision de l’implémentation des copies mémoire à
mémoire;
 Fortran (2003-2008) interface;
 Suppression de l’interface C++;
 Interfaçage d’outils externes (pour le débogage et les
mesures de performance);
 etc.

 Version 3.1 : juin 2015


 Correction de l’interface Fortran (2003-2008);
 Nouvelles fonctions pour les écritures collectives non
bloquantes;
Pr. M. Alaoui Talibi 303
Environnement

Pr. M. Alaoui Talibi 304


Description :

 Touteunité de programme appelant des sous-


programmes MPI doit inclure un fichier d’en-têtes.

 Lesous-programme MPI_INIT() permet d’initialiser


l’environnement nécessaire :

Pr. M. Alaoui Talibi 305


Réciproquement, le sous-programme MPI_FINALIZE()

désactive cet environnement :

Pr. M. Alaoui Talibi 306


Différence entre le C et Fortran :

Concernant le c/c++ :

 Ilfaut inclure le fichier mpi.h ;


 Uniquement le préfixe MPI ainsi que la première
lettre suivante sont en majuscules;
 Hormis MPI_Init(), les arguments des appels sont
identiques au Fortran.

Pr. M. Alaoui Talibi 307


Différence entre le C et Fortran :

Concernant le C/C++ :

 Parameters :
argc[in] Pointer to the number of arguments.
argv[in] Pointer to the argument vector.

Pr. M. Alaoui Talibi 308


MPI sous language C :

Pr. M. Alaoui Talibi 309


Fichier mpi.h :

 Il doit être inclus en entête de tous les programmes


MPI. A pour but la :

 Déclaration des prototypes de toutes les routines MPI.

 Déclaration de l’ensemble des constantes MPI.

 Déclaration de toutes les structures de données.

Pr. M. Alaoui Talibi 310


Routines MPI :

Les routines MPI (en C) sont sous deux formes :

1- MPI_Xxxx(),
2- MPI_Xxxx_xxx().

Il y a six routines MPI de base :

1- MPI_Init, 2- MPI_Finalize, 3- MPI_Comm_size,


4- MPI_Comm_rank, 5- MPI_Send, 6- MPI_Recv.

Pr. M. Alaoui Talibi 311


Pr. M. Alaoui Talibi 312
 Routine MPI_Init :

int MPI_Init(int* argc, char*** argv);

 C’est la première routine MPI exécutée par tous les


processus.

 Elle permet de débuter l’exécution parallèle.

 Elle renvoie MPI_SUCCESS si l’appel n’a eu aucun


problème.
Pr. M. Alaoui Talibi 313
int MPI_Finalize(void);

 Elle termine proprement l’exécution parallèle et


doit être appelée par tous les processus.

 Elle renvoie MPI_SUCCESS si l’appel n’a eu aucun


problème.

Pr. M. Alaoui Talibi 314


 MPI_COMM_WORLD :

MPI définit la notion de communicateur (MPI_Comm).

 MPI_Init initialise le communicateur par défaut :

MPI_COMM_WORLD

Pr. M. Alaoui Talibi 315


int MPI_Comm_size(MPI_Comm comm, int* nprocs);

 Cette routine retourne dans nprocs le nombre total


de processus du communicateur comm.

int MPI_Comm_rank(MPI_Comm comm, int* pid);

 indique le pid d’identifiant relatif au communicateur


comm du processus appelant.
 pid est un nombre entier unique dans le
communicateur comm.
Pr. M. Alaoui Talibi 316
 Initialement,
chaque processus a un identifiant
unique pid ∈ [0,nprocs −1] dans MPI_COMM_WORLD.

Pr. M. Alaoui Talibi 317


Pr. M. Alaoui Talibi 318
 Installation Ubunbtu – Package

$ sudo apt-get install openmpi


openmpi-common
libopenmpi-dev

 Compilation habituelle avec mpicc :

mpicc exemple.c –o exemple


mpirun –np N exemple
Pr. M. Alaoui Talibi 319
 Voir la version ubuntu :

[Link]

Pr. M. Alaoui Talibi 320


 MPI_Send :

Pr. M. Alaoui Talibi 321


Pr. M. Alaoui Talibi 322
 statut
reçoit des informations sur la
communication :

rang_source, etiquette, code,…

Pr. M. Alaoui Talibi 323


 Types de base :

Pr. M. Alaoui Talibi 324


Communicateurs :

 Toutesles opérations effectuées par MPI portent


sur des communicateurs.

 Lecommunicateur par défaut est MPI_COMM_WORLD


qui comprend tous les processus actifs.

Pr. M. Alaoui Talibi 325


Communicateur MPI_COMM_WORLD

Pr. M. Alaoui Talibi 326


Arrêt d’un programme :

 Parfoisun programme se trouve dans une situation


où il doit s’arrêter sans attendre la fin normale.

 C’esttypiquement le cas si un des processus ne


peut pas allouer la mémoire nécessaire à son
calcul.

 Dans
ce cas, il faut utiliser le sous-programme
MPI_ABORT().
Pr. M. Alaoui Talibi 327
 comm : tous les processus appartenant à ce
communicateur seront stoppés,

 il est donc conseillé d’utiliser MPI_COMM_WORLD ;

 erreur : numéro d’erreur retourné à l’environnement


UNIX.
Pr. M. Alaoui Talibi 328
Rang et nombre de processus :

On peut connaître le nombre de processus gérés par


un communicateur par le sous-programme :

MPI_COMM_SIZE() :

Pr. M. Alaoui Talibi 329


 De même, le sous-programme MPI_COMM_RANK()
permet d’obtenir le rang d’un processus

 i.e. son numéro d’instance,

 qui est un nombre compris entre 0 et la valeur


renvoyée par :

MPI_COMM_SIZE() – 1

Pr. M. Alaoui Talibi 330


Pr. M. Alaoui Talibi 331
Communications point à point :

 Notions générales

 Opérations d’envoi et de réception bloquantes

 Types de données de base

Pr. M. Alaoui Talibi 332


 Notions générales :

 Une communication dite point à point a lieu entre


deux processus,

 l’un appelé processus émetteur et

 l’autre processus récepteur (ou destinataire).

Pr. M. Alaoui Talibi 333


Notions générales :

Communication point à point

Pr. M. Alaoui Talibi 334


Notions générales :

 L’émetteur et le récepteur sont identifiés par leur


rang dans le communicateur.

 Ce que l’on appelle l’enveloppe d’un message est


constituée :
 du rang du processus émetteur;
 du rang du processus récepteur;
 de l’étiquette (tag) du message;
 du communicateur qui définit le groupe de processus
et le contexte de communication.
Pr. M. Alaoui Talibi 335
 Les données échangées sont typées (entiers, réels,
etc ).

 Ilexiste dans chaque cas plusieurs modes de


transfert, faisant appel à des protocoles différents.

Pr. M. Alaoui Talibi 336


– Opérations d’envoi et de réception bloquantes :

Opération d’envoi MPI_SEND :

Pr. M. Alaoui Talibi 337


– Opérations d’envoi et de réception bloquantes :

 Envoi,à partir de l’adresse message,


 d’un message de taille longueur,
 de type type_message,
 étiqueté etiquette,
 au processus rang_dest dans le communicateur
comm.

Remarque :
Cette opération est bloquante : l’exécution reste bloquée jusqu’à ce
que le contenu de message puisse être réécrit sans risque d’écraser
la valeur qui devait être envoyée.

Pr. M. Alaoui Talibi 338


- Opérations d’envoi et de réception bloquantes :
Opération de réception MPI_RECV :

Réception, à partir de l’adresse message,


d’un message de taille longueur,
de type type_message,
étiqueté etiquette,
du processus rang_source.

Pr. M. Alaoui Talibi 339


Opérations d’envoi et de réception bloquantes :
 Remarques :

 statut reçoit des informations sur la communication :


rang_source, etiquette, code,…

 L’appel MPI_RECV ne pourra fonctionner avec une


opération MPI_SEND que si ces deux appels ont la même
enveloppe (rang_source, rang_dest, etiquette, comm).

 Cette opération est bloquante : l’exécution reste bloquée


jusqu’à ce que le contenu de message corresponde au
message reçu. Pr. M. Alaoui Talibi 340
Opérations d’envoi et de réception bloquantes :

Pr. M. Alaoui Talibi 341


 Types de données de base :

Types de données de base Fortran :

Principaux types de données de base (Fortran)

Pr. M. Alaoui Talibi 342


 Types de données de base :

Types de données de base C :

Principaux types de données de base (C)


Pr. M. Alaoui Talibi 343
Notions générales :

 Les communications collectives permettent de


faire en une seule opération une série de
communications point à point.

 Une communication collective concerne toujours


tous les processus du communicateur indiqué.

Pr. M. Alaoui Talibi 344


 Notions générales :

 Pourchacun des processus, l’appel se termine


lorsque la participation de celui-ci à l’opération
collective est achevée, au sens des communications
point-à-point.

 Lagestion des étiquettes dans ces communications


est transparente et à la charge du système.

Pr. M. Alaoui Talibi 345


Notions générales :

Types de communications collectives

Il y a trois types de sous-programmes :

1- celui qui assure les synchronisations globales : MPI_BARRIER().

2- ceux qui ne font que transférer des données :

 diffusion globale de données : MPI_BCAST() ;


 diffusion sélective de données : MPI_SCATTER() ;
 collecte de données réparties : MPI_GATHER() ;
 collecte par tous les processus de données réparties : MPI_ALLGATHER() ;
 collecte et diffusion sélective, par tous les processus, de données
réparties : MPI_ALLTOALL().

Pr. M. Alaoui Talibi 346


Notions générales :

3- ceux qui, en plus de la gestion des communications,


effectuent des opérations sur les données transférées
:

 opérations de réduction (somme, produit, maximum,


minimum, etc.) : MPI_REDUCE() ;

 opérations de réduction avec diffusion du résultat


(équivalent à un MPI_REDUCE() suivi d’un MPI_BCAST())
: MPI_ALLREDUCE().
Pr. M. Alaoui Talibi 347
 Synchronisation globale : MPI_BARRIER()

Pr. M. Alaoui Talibi 348


 Diffusion générale : MPI_BCAST()

Pr. M. Alaoui Talibi 349


 Diffusion générale : MPI_BCAST()

1- Envoi, à partir de l’adresse message, d’un message


constitué de longueur élément de type type_message,
par le processus rang_source, à tous les autres
processus du communicateur comm.

2- Réception de ce message à l’adresse message pour


les processus y compris le processus de rang_source.
Pr. M. Alaoui Talibi 350
 Diffusion générale : MPI_BCAST()

Pr. M. Alaoui Talibi 351


 Diffusion sélective : MPI_SCATTER()

Pr. M. Alaoui Talibi 352


 Diffusion sélective : MPI_SCATTER()

1- Distribution, par le processus rang_source, à partir de l’adresse


message_a_repartir, d’un message de taille longueur_message_emis,
de type type_message_emis, à tous les processus du communicateur
comm;

2- Réception du message à l’adresse message_recu, de longueur


longueur_message_recu et de type type_message_recu par tous les
processus du communicateur comm.
Pr. M. Alaoui Talibi 353
 Diffusion sélective : MPI_SCATTER()

Remarques :

 Les couples (longueur_message_emis, type_message_emis) et


(longueur_message_recu, type_message_recu) doivent être tels
que les quantités de données envoyées et reçues soient égales.

 Les données sont distribuées en tranches égales, une tranche étant


constituée de longueur_message_emis éléments du type
type_message_emis.

 La ième tranche est envoyée au ième processus.

Pr. M. Alaoui Talibi 354


 Diffusion sélective : MPI_SCATTER()

Pr. M. Alaoui Talibi 355


 Collecte : MPI_GATHER()

Pr. M. Alaoui Talibi 356


 Collecte : MPI_GATHER()

1- Envoi de chacun des processus du communicateur comm, d’un message


message_emis, de taille longueur_message_emis et de type
type_message_emis.

2- Collecte de chacun de ces messages, par le processus rang_dest,


à partir l’adresse message_recu, sur une longueur longueur_
message_recu et avec le type type_message_recu.

Pr. M. Alaoui Talibi 357


Remarques :

 Lescouples (longueur_message_emis,
type_message_emis) et (longueur_message_recu,
type_message_recu) doivent être tels que les
quantités de données envoyées et reçues soient
égales.

 Lesdonnées sont collectées dans l’ordre des rangs


des processus.

Pr. M. Alaoui Talibi 358


 Collecte : MPI_GATHER()

Pr. M. Alaoui Talibi 359


 Collecte générale : MPI_ALLGATHER()

Pr. M. Alaoui Talibi 360


 Collecte générale : MPI_ALLGATHER()

Pr. M. Alaoui Talibi 361


 Collecte générale : MPI_ALLGATHER()

1- Envoi de chacun des processus du communicateur


comm, d’un message message_emis, de taille
longueur_message_emis et de type
type_message_emis.

2- Collecte de chacun de ces messages, par tous les


processus, à partir de l’adresse message_recu, sur
une longueur longueur_message_recu et avec le type
type_message_recu.
Pr. M. Alaoui Talibi 362
Collecte générale : MPI_ALLGATHER()

Remarques :

 Lescouples (longueur_message_emis,
type_message_emis) et (longueur_message_recu,
type_message_recu) doivent être tels que les
quantités de données envoyées et reçues soient
égales.

 Lesdonnées sont collectées dans l’ordre des rangs


des processus.
Pr. M. Alaoui Talibi 363
 Collecte générale : MPI_ALLGATHER()

Pr. M. Alaoui Talibi 364


– Collecte : MPI_GATHERV()

Pr. M. Alaoui Talibi 365


Pr. M. Alaoui Talibi 366
 Leième processus du communicateur comm envoie
au processus rang_dest, un message depuis
l’adresse message_emis, de taille
longueur_message_emis, de type
type_message_emis, avec réception du message à
l’adresse message_recu, de type
type_message_recu, de taille nb_elts_recus avec
un déplacement de deplts.

Pr. M. Alaoui Talibi 367


Remarques :

Les couples (longueur_message_emis,


type_message_emis) du ième processus et
(nb_elts_recus(i), type_message_recu) du
processus rang_dest doivent être tels que les
quantités de données envoyées et reçues soient
égales.

Pr. M. Alaoui Talibi 368


Pr. M. Alaoui Talibi 369
Pr. M. Alaoui Talibi 370
 Collectes et diffusions sélectives : MPI_ALLTOALL()

Pr. M. Alaoui Talibi 371


 Collectes et diffusions sélectives : MPI_ALLTOALL()

Pr. M. Alaoui Talibi 372


 Correspond à un MPI_ALLGATHER() où chaque
processus envoie des données différentes : le ième
processus envoie la jème tranche au jème processus
qui le place à l’emplacement de la ième tranche.

Remarque :

Les couples (longueur_message_emis,


type_message_emis) et (longueur_message_recu,
type_message_recu) doivent être tels que les
quantités de données envoyées et reçues soient égales.
Pr. M. Alaoui Talibi 373
Pr. M. Alaoui Talibi 374
Pr. M. Alaoui Talibi 375
 Réductions réparties :

Une réduction est une opération appliquée à un


ensemble d’éléments pour en obtenir une seule
valeur.

Des exemples typiques sont la somme des éléments


d’un vecteur SUM(A(:)) ou la recherche de l’élément
de valeur maximum dans un vecteur MAX(V(:)).

Pr. M. Alaoui Talibi 376


 MPIpropose des sous-programmes de haut-
niveau pour opérer des réductions sur des
données réparties sur un ensemble de processus.

 Lerésultat est obtenu sur un seul processus


(MPI_REDUCE()) ou bien sur tous MPI_ALLREDUCE(),
qui est en fait équivalent à un MPI_REDUCE() suivi
d’un MPI_BCAST()).

Pr. M. Alaoui Talibi 377


 Réductions réparties :

Principales opérations de réduction prédéfinies (il existe


aussi d’autres opérations logiques)

Pr. M. Alaoui Talibi 378


 Réductions réparties :

Réduction répartie : MPI_REDUCE() avec l’opérateur somme

Pr. M. Alaoui Talibi 379


 Réductions réparties : MPI_REDUCE()

1. Réduction répartie des éléments situés à partir


de l’adresse message_emis, de taille longueur,
de type type_message, pour les processus du
communicateur comm,

2. Ecrit le résultat à l’adresse message_recu pour


le processus de rang rang_dest.
Pr. M. Alaoui Talibi 380
 Réductions réparties :

Pr. M. Alaoui Talibi 381


 Réductions réparties :

Réduction répartie avec diffusion du résultat :


MPI_ALLREDUCE (utilisation de l’opérateur produit)
Pr. M. Alaoui Talibi 382
 Réductions réparties : MPI_ALLREDUCE()

1. Réduction répartie des éléments situés à partir


de l’adresse message_emis, de taille longueur,
de type type_message, pour les processus du
communicateur comm,

2. Ecrit le résultat à l’adresse message_recu pour


tous les processus du communicateur comm.
Pr. M. Alaoui Talibi 383
 Réductions réparties : MPI_ALLREDUCE()

Pr. M. Alaoui Talibi 384


 Réductions réparties : MPI_ALLREDUCE()

Pr. M. Alaoui Talibi 385

Vous aimerez peut-être aussi