Académique Documents
Professionnel Documents
Culture Documents
Année académique
2021/2022
INTRODUCTION AU CALCUL PARALLELE
Table de matières
INTRODUCTION
Tout ce chapitre sera axé sur ces questions. Nous présenterons tout d’abord le
principe et les applications du calcul parallèle, puis les différentes classifications
et modèles du calcul parallèle, après quoi viendra la présentation de l’interface
MPI nécessaire dans l’architecture parallèle ; ensuite, nous réaliserons quelques
programmes parallèles avec OpenMP et en fin présenterons les avantages et
limites du parallélisme.
I. HISTORIQUE ET PRINCIPE DU
PARALLELISME
L'intérêt pour le calcul parallèle remonte à la fin des années 1950, avec des
avancées sous la forme des supercalculateurs dans les années 60 et 70. Il s'agissait
de multiprocesseurs à mémoire partagée, avec plusieurs processeurs travaillant
côte à côte sur des données partagées. Au milieu des années 1980, un nouveau
type de parallélisme informatique a été lancé lorsque le projet Caltech
Concurrent Computation a construit un supercalculateur pour applications
scientifiques à partir de 64 processeurs Intel 8086/8087. Ce système a montré que
l'extrême des performances pourraient être atteintes avec des microprocesseurs du
marché de masse. C’est massivement que les processeurs parallèles (MPP) en sont
venus à dominer le haut de gamme de l'informatique, avec l'ASCI Red
supercalculateur en 1997 franchissant la barrière des mille milliards d'opérations
en virgule flottante par seconde. Depuis lors, les MPP n'ont cessé de croître en
taille et en puissance.
À partir de la fin des années 80, les clusters sont entrés en concurrence et
ont finalement remplacé les MPP pour de nombreuses applications.
2. Quelques définitions
Une tâche quant à elle est une liste d’instructions réalisant un certain travail
et utilisant des données en entrée dans un ensemble E (ensemble des variables
d’entrées) et qui modifient un ensemble de variable S (variables de sortie). Selon
que la tâche soit petite ou grosse (en termes de nombre d’instructions), on parlera
de granularité fine ou grossière.
Il y a de ce fait plusieurs raisons qui ont poussé à ce que l’on parallélise nos
machines :
➢ Tout d’abord, il n'est pas possible d'augmenter indéfiniment les fréquences du
processeur et de la mémoire, du moins pas avec la technologie actuelle à base de
silicium. Par conséquent, pour augmenter la puissance de calcul des ordinateurs,
de nouvelles architectures et organisations des notions sont nécessaires. Nous
pouvons en occurrence énumérer projet Word community grid de IBM, qui au
travers des appareils (smart phones, tablettes, ordinateurs) de volontaires
exécutent en arrière-plan jeux des expériences et tests dans le cadre de la covid-
19.
Le calcul parallèle est donc tout simplement la réalisation des différentes tâches
d’une opération de manière simultanée. Ici, l’on découpe le problème initial en
plusieurs sous problèmes plus ou moins simple à résoudre confié chacun à
différentes unités de traitement (celle-ci peuvent être soit des processeurs, soit des
cœurs) pouvant se partager les données ou pas et qui sont d’une manière ou d’une
autre liées entre elles afin que le résultat global attendu de l’exécution soit la
résolution du problème initial. Pour donc réaliser cette exécution sur différentes
La géologie est la science dont le principal objet d'étude sont les matériaux qui
composent le globe terrestre et l’ordre suivant lequel ces matériaux ont été
disposés dans le temps et dans l’espace. Discipline majeure des sciences de la
Terre, elle se base en premier lieu sur l'observation, puis établit des hypothèses
permettant d'expliquer l'agencement des roches et des structures les affectant afin
d'en reconstituer l'histoire et les processus en jeu. Ainsi, la détection sismique par
exemple prenant en compte de nombreux paramètres sur un temps relativement
long, nécessite de grandes puissances de calculs pour l’analyse et l’interprétation
des métadonnées (la stratigraphie, la porosité du sol, les différents minéraux
constitutifs de la région étudiée, les pressions, etc.)suivant leur différente
projection à l’aide des machines vectorielles qui utilisent des algorithmes
Nous pouvons donc ici énumérer la plateforme Dug Software qui a l’aide
de son super ordinateur (d ‘ailleurs l’un des plus grand su monde avec des
équipements déployés sur plus de la moitié d’un stade de football) analyse à partir
d’algorithmes parallèles et donne des prédictions sismiques sur des reliefs. Cette
étude a été réalisée par les Docteurs Matthew Lamont et Troy Thompson
spécialistes en géophysique de Curtin University en Australie et en algorithme
d’imagerie respectivement.
Dans le contexte des jeux avec ordinateur ou celui-ci est appelé à interagir
rapidement, il nécessite de grandes puissances de calcul et une rapidité
extraordinaire. Ces caractéristiques lors du jeu peuvent être réalisés grâce à
l’exécution en parallèle des tâches dans l’optique d’avoir des résultats rapidement.
Pour le visualiser prenons le cas des jeux d’échecs.
Un super-ordinateur déjà réalisé pour cela est Deep Blue d’IBM qui,
pouvant calculer plus de 200 millions de combinaisons à un moment, a pu battre
en 1997 le champion en tire des jeux d’échecs Garry Kasparov.
C’est ainsi qu’est née dans les années 2010, le logiciel Lexicon lancé par
le Dow Jones :un service d’information financière pour les investisseurs
Par ailleurs, pour des entreprises désirant par exemples lancer des gammes
de produits, ils doivent étudier les consommations des potentiels clients suivant
différents aspects et même les pouvoirs de la concurrence. Ceci revient à analyser
des métadonnées en peu de temps ; ainsi intervient des calculs parallèles pour
optimiser et gagner en temps.
La difficulté ici est l’analyse massive des données sur le temps. En effet,
pour réaliser des prédictions météorologiques, l’on doit prendre en compte des
paramètres tels que les vents, les courants marins, les températures, la position
des nuages, leur évolution, etc. et ce suivant la direction, les régions et bien
d’autres encore. Comme précédemment, il nécessite beaucoup de puissances de
calculs qui sont fournis par des super ordinateurs comme Fukagu utilisant des
algorithmes parallèles.
En bref, Ici on retient que ces applications tournent toutes autour de la vitesse
d’analyses de données massives.
a. Nginx
NGINX est un serveur web open-source qui, depuis son succès initial en
tant que serveur web, est maintenant aussi utilisé comme reverse proxy, cache
HTTP, et load balancer. Il est largement adopté par les grandes entreprises
comme Gitlab, Google, Microsoft, IBM, etc., pour gérer leur fort traffic.
Lorsqu'un serveur NGINX est actif, seuls les processus de travail sont
occupés. Chaque processus de travail gère plusieurs connexions de manière non
bloquante, ce qui réduit le nombre de changements de contexte. Autrement dit,
chaque processus de travail est à thread unique et s'exécute indépendamment, en
récupérant de nouvelles connexions depuis le thread maitre et en les traitant. Les
processus peuvent communiquer en utilisant la mémoire partagée pour les
données de cache partagées, les données de persistance de session et d'autres
ressources partagées.
b. Gunicorn
Figure 11: Usage de 5 worker en simultané pour traiter les requêtes arrivant sur Gunicorn
Dans les exemples précédents, nous avons travaillé avec des machines à
plusieurs processeurs. Ces dernières années, on entend beaucoup parler
d’ordinateurs quantiques. Cela nous pousse donc à nous intéresser au parallélisme
8. La blockchain et le parallélisme
traitements se font l’un après l’autre. C’est la principale raison pour laquelle
beaucoup de recherche sont menés pour introduire le parallélisme dans le réseau
blockchain. Nous avons par exemple la publication « Transform Blockchain
into Distributed Parallel Computing Architecture for Precision Medicine”
publié à la “2018 IEEE 38th International Conference on Distributed
Computing Systems (ICDCS)” ». Nous avons également le travail de Nam-
Yong Lee sur le thème “Hierarchical Multi-Blockchain System for Parallel
Computation Cryptocurrency Transfers and Smart Contracts” qui traitement
également du parallélisme dans le monde de la blockchain.
Nous n’avons pas donné beaucoup de détails sur la blockchain car c’est un
domaine trop vaste qui sort cadre de ce cours. Nous avons essayé d’illustrer ce
cas pour montrer que le parallélisme est un sujet d’actualité en informatique ayant
pour principal objectif de permettre aux applications d’exploiter complétement
les capacités du matériel informatique.
Taxonomie de Flynn
Unique Multiple
Taxonomie Treleaven
Taxonomie de Gajski
CLASSIFICATION DE FLYNN
❖ SISD (Single Instruction, Single Data) : Ce sont les machines les plus
simples traitant une donnée à la fois ; Il s'agit d'un ordinateur séquentiel qui
n'exploite aucun parallélisme, tant au niveau des instructions qu'au niveau
de la mémoire. Cette catégorie correspond à l'architecture de Von
Neumann.
▪ Sémaphores
▪ Verrous, ou Mutex (exclusion mutuelle)
▪ Barrières de synchronisation
Les machines à grains fins : pour ces modèles, on suppose que le nombre
de processeurs est sensiblement égal au nombre de données en entrée. Les
processeurs exécutent de très petits morceaux de code entre deux
communications successives. Le coût des communications est négligé au
profit des calculs. Cette classe correspond aux machines systoliques.
▪ Mémoire partagée
• Mémoire distribuée
1) Le modèle PRAM
L’exécution d’un algorithme passe alors par trois phases (comme dans le
modèle RAM) exécutées conjointement (c’est-à-dire de façon synchrone, sous le
contrôle de l’horloge) par les divers processeurs.
Bien que pour certains algorithmes ce synchronisme ne soit pas tout à fait
nécessaire, d’autres algorithmes ont absolument besoin de cette propriété
d’exécution concurrente et synchrone pour assurer leur bon fonctionnement. Une
autre caractéristique du modèle est que tous les calculs se font strictement dans
les registres locaux des processeurs. Les accès à la mémoire ne se font que pour
charger des valeurs de la mémoire vers les registres, ou bien transférer le contenu
des registres vers la mémoire. En d’autres mots, une machine PRAM est donc
une machine de style load-store architecture, tout comme le sont les machines
RISC modernes.
Il existe différents modèles PRAM qui se distinguent par la façon dont les
conflits d’accès à des adresses mémoires sont traités. Les plus couramment
utilisés sont les suivants :
La structure abstraite d’une machine parallèle PRAM est donc telle que décrit à
là-ci-dessous.
2) Le modèle systolique
Une donnée introduite une seule fois dans le réseau est propagée d’un
processeur à un processeur voisin et peut ainsi être utilisé un grand nombre de
fois. Cette propriété autorise de gros débits de calculs même si la cadence des
entrées-sorties reste faible. En d’autres termes, on évite les engorgements des
buffers d’entrées-sorties. Ceci rend le modèle systolique adéquat pour beaucoup
de problèmes dont le nombre de calculs sur une même donnée est largement
supérieur à son nombre d’entrées-sorties. Les caractéristiques dominantes d’un
réseau systolique peuvent être définies par un parallélisme massif et décentralisé,
par des communications locales et régulières, et par un mode opératoire
synchrone. Pour décrire un réseau systolique, il est donc nécessaire de spécifier :
Ce modèle, introduit en 1978 par Kung et Leiserson, s’est révélé être un outil
puissant pour la conception de processeurs intégrés spécialisés. En un mot, une
3) Le modèle BSP
L’hypercube
5) Modèle CGM
chaque processeur doit, dans le pire des cas, travailler sur l’ensemble des données,
ce nombre de super-étapes doit être au plus poly logarithmique en P ou fonction
de P.
Apres avoir étudié, les différents modèles, une combinaison des modèles BSP
et GCM (mis sur pied pour diminuer l’écart entre le matériel et le logiciel) nous
permet de résoudre de manière efficace des problèmes de programmation
dynamique ou l’on a une forte dépendance entre les diffèrent calculs tels que le
problème d’ordonnancement de produit de chaine de matrices, le problème de
triangulation optimale d’un polygone convexe, le problème de recherche de
l’arbre binaire de recherche optimal, etc.[Ken14]
b. Les routines
➢ OMP_SET_NUM_THREADS
➢ OMP_GET_NUM_THREADS
➢ omp_get_active_level
➢ omp_get_ancestor_thread_num
➢ omp_get_dynamic
➢ Omp_get_level
➢ SINGLE : Celui-ci est utilisé pour sérialiser une partie du code. Il est
utilisé pour des sections qui ne sont pas threadsafe. (EX : E/S). Un
morceau de code est thread-safe s'il fonctionne correctement pendant
l'exécution simultanée par plusieurs threads.
des choses intéressants dans ce type d’architecture est que les algorithmes sont
conçus pour minimiser les communications entre les processus (distribution
des données, minimisation des envois,). Visuellement, cette architecture se
présente comme suit :
MPI (Message Passing Interface) est une API de haut niveau pour la
programmation parallèle obéissant au paradigme de l’échange de message. Il est
utilisable en C, C++ et fortran. MPI est adaptée pour la programmation
parallèle distribuée et est très répandu dans le monde du calcul intensif.
➢ L’environnement d’exécution
➢ La communication unidirectionnelle
➢ Le multithreading
1. Avantages
2. Limites
Type de problèmes Ils sont adaptés aux Ils sont adaptés aux
problèmes dont les sous problèmes dont les sous
Rapidité d’exécution Ils sont plus rapides pour Ils sont moins rapides
des problèmes bien en général
conçues pour ce
paradigme
Conclusion
CONCLUSION
TRAVAUX DIRIGES
Exercice 1
1. C’est quoi le parallélisme et quel est son but ?
2. Présenter la classification de Flynn pour les architectures de machines parallèle.
3. A quoi sert un modèle de machine parallèle ? citez deux exemples.
4. Pour éviter l’incohérence des données lors de l’adressage de la mémoire par les processeurs,
la synchronisation des exécutions des processeurs est nécessaire. Citez en expliquant, trois
mécanismes pouvant être mis en place pour assurer cette synchronisation.
5. La résolution d’un problème à l’aide d’un algorithme parallèle est toujours plus efficace que
sa résolution avec un algorithme séquentiel ? Justifiez
Exercice 2
1. Citez quelques APIs permettant d’implémenter le parallélisme.
2. Sur quel type d’architecture de machine parallèle doit-on utiliser : OpenMP, MPI ?
3. Donnez la structure d’un programme OpenMP écrit en langage C.
4. OpenMP repose sur trois concepts fondamentaux. Citez en donnant le rôle de chaque concept.
5. Quel est le rôle de la directive parallèle ? Donnez sa syntaxe et sa description.
6. même question pour la directive barrière.
7. Comment implémenter les barrières de synchronisations en environnement partagée ?
Exercice 3
1. Rappeler les différentes catégories de systèmes distribues et donner pour chacune d’elle
un exemple.
2. Rappeler les différents modes de fonctionnement d’une PRAM. Montrer que certains
d’entre eux peuvent également s’interpréter en termes d’architecture distribuée.
Exercice 4
#include <stdio.h>
#include <stdlib.h>
#include "omp.h"
#include "header.h"
Int main () {
Int x = 3 ;
Int y = 4 ;
Int z = 0 ;
Printf (" valeurs de x y et z : %i %i %i \n », x, y, z) ;
#pragma omp parallel private(x,y) firstprivate(z)
{
tid = omp_get_thread_num();
x = x + tid;
y = 2 + tid;
z = 1 + z;
printf (" parallel x y z: %i %i %i \n",x, y, z);
}
printf ("Non parallel x y z: %i %i %i \n",x, y, z);
return 0;
}
Exercice 5
Considérons le bout de code ci-dessous :
#include <stdio.h>
int main() {
#pragma omp parallel
printf("Hello,\n");
printf("World!\n");
return 0;
}
Exercice 5
Soit une boucle que l’on désire paralléliser à l’aide de OpenMP. Soit p le nombre de fils
d’exécution disponibles et n le nombre total d’itérations de la boucle.
1. Pour la clause schedule(static,) de la directive for de OpenMP, où k est un nombre entier
positif, dites à quel fil d’exécution sera confiée quelle itération de la boucle ? Numérotez vos
fils de 0 à p -1 et vos itérations de 0 à n - 1. Formulez votre réponse en fonction de p, n et k.
2. En supposant que chacune des n itérations demande le même temps d’exécution, que
changerait la clause schedule(dynamic, k) ?
3. Parmi les stratégies static et dynamic, laquelle offrirait la meilleure performance et
pourquoi ?
Exercice 6 calcul de π
On souhaite paralléliser un programme séquentiel pour le calcul de π par la méthode des
Rectangles sur n intervalles avec un pas h
BIBLIOGRAPHIE
[1] T H E M A N Y C O R E S H I F T: Microsoft Parallel Computing Initiative Ushers
Computing into the Next Era
[2] Les aspects pratiques du parallélisme, Violaine Louvet, Institut Camille Jordan
L’essentiel de MPI-1, Stepahen Vialle
[3] Processus concurrents et parallélisme Chapitre 6 - Notions de calcul parallèle et distribué,
zzzzzzz Gabriel Girard
[Ken14] Solutions parallèles efficaces sur le modèle CGM d’une classe de problèmes issus de
ssssssssla programmation dynamique, Vianney Tchendji Kengne
WEBOGRAPHIE
[1] https://www.geekboots.com/story/parallel-computing-and-its-advantage-and-disadvantage
[2] https://www.lesechos.fr/tech-medias/hightech/ordinateur-quantique-cinq-questions-
pour-enfin-tout-comprendre-1323707
[3] http://perso-laris.univ-
angers.fr/~chapeau/papers/congres/resume_JIONC_2018_Chapeau.pdf
[4] https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/
[5] https://kinsta.com/fr/base-de-connaissances/qu-est-ce-que-nginx/
[6] https://www.journaldunet.com/economie/finance/1195520-blockchain-definition-et-
application-de-la-techno-derriere-le-bitcoin-juin-2021/
[7] https://e6.ijs.si/~roman/files/Book_jul2018/book/book.pdf
[8] https://www.capital.fr/economie-politique/comment-l-informatique-a-pris-le-controle-de-
wall-street-604813
[9] https://www.jumpstartmag.com/top-10-most-powerful-supercomputers/