Chapitre_I_Introduction_A_la_Programmation_Parallele

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 35

Présentée par Dr.

Abdourahmane SENGHOR

11/15/2024 Présentée par Abdourahmane SENGHOR 1


Rappel

vLes Composantes d’un ordinateur


Composant Rôle principal
CPU (Processeur) Exécution des instructions et calculs
Stockage temporaire des données et des
RAM (Mémoire vive)
instructions
Stockage (HDD/SSD) Stockage permanent des données et programmes
Carte mère Connexion de tous les composants matériels
GPU (Carte graphique) Traitement des images et vidéos
Interface pour que l'utilisateur saisisse des
Périphériques d'entrée
données
Périphériques de sortie Interface pour afficher ou restituer des données
Carte réseau Connexion à Internet ou à un réseau local
Alimentation Fourniture d'énergie aux composants
Boîtier Protection et organisation des composants
Système de refroidissement Maintien des composants à une température sûre
BIOS/UEFI Initialisation du système au démarrage
11/15/2024 Présentée par Abdourahmane SENGHOR 2
Rappel Composantes d’un ordinateur

vProcesseur (CPU)
La CPU (Central Processing Unit) est le cœur de l'ordinateur. Elle exécute les instructions
des programmes en effectuant des calculs et en manipulant des données. Elle se compose
de plusieurs éléments clés :

•Unité de contrôle (CU) : Gère l'exécution des instructions et coordonne les différentes
parties de l'ordinateur.

•Unité arithmétique et logique (ALU) : Effectue les calculs mathématiques (addition,


multiplication) et les opérations logiques (comparaisons, opérations sur les bits).

•Registres : Petites unités de stockage à très haute vitesse utilisées pour stocker
temporairement des données et des instructions.

11/15/2024 Présentée par Abdourahmane SENGHOR 3


Rappel Composantes d’un ordinateur

vMémoire vive (RAM)


La RAM (Random Access Memory) est une mémoire volatile, utilisée pour stocker
temporairement les données et les programmes en cours d'exécution. Plus la quantité de
RAM est grande, plus l'ordinateur peut exécuter de tâches simultanément de manière
fluide.

•RAM dynamique (DRAM) : Utilisée pour stocker des données qui sont fréquemment
modifiées. Elle est plus lente mais moins coûteuse.

•RAM statique (SRAM) : Plus rapide, mais plus chère et consomme plus de puissance.

11/15/2024 Présentée par Abdourahmane SENGHOR 4


Rappel Composantes d’un ordinateur

vMémoire de stockage (Disque Dur)


Les périphériques de stockage servent à enregistrer de manière permanente ou semi-
permanente les données, les programmes et le système d'exploitation. Les principales
options de stockage sont :
•Disque dur (HDD) : Utilise des plateaux magnétiques rotatifs pour stocker des données. Il
offre une grande capacité de stockage à un coût relativement faible, mais il est plus lent
que les SSD.
•Disque à état solide (SSD) : Utilise de la mémoire flash pour stocker les données, ce qui
permet des vitesses de lecture et d'écriture beaucoup plus rapides que les HDD. Les SSD
sont plus chers par gigaoctet de capacité.
•Disques optiques (CD/DVD) : Utilisés principalement pour les sauvegardes ou la
distribution de données à grande échelle.
•Clés USB et cartes SD : Dispositifs de stockage portables à mémoire flash.

11/15/2024 Présentée par Abdourahmane SENGHOR 5


Rappel Systèmes d’exploitation

vSystème d’exploitation
Définition: Un système d'exploitation (SE ou OS pour "Operating System" en anglais) est un
ensemble de programmes qui gère les ressources matérielles (hardware) d'un ordinateur et
fournit des services aux applications logicielles (logiciels). En d'autres termes, il permet à
l'ordinateur de fonctionner correctement en faisant le lien entre le matériel et les
programmes que vous exécutez.
Le système d'exploitation joue un rôle essentiel en abstraisant la complexité du matériel
pour les utilisateurs et les développeurs, et en fournissant une interface conviviale pour
interagir avec l'ordinateur. Il permet également de garantir l'efficacité et la sécurité des
opérations.

11/15/2024 Présentée par Abdourahmane SENGHOR 6


Rappel Systèmes d’exploitation

vFonctions principales
Gestion des ressources matérielles
Gestion des processus
Gestion de la mémoire
Gestion du système de fichiers
Gestion des entrées/sorties (I/O)
Interface utilisateur
Sécurité et gestion des utilisateurs

11/15/2024 Présentée par Abdourahmane SENGHOR 7


Rappel Systèmes d’exploitation

vGestion des processus


Le système d'exploitation gère les processus en cours d'exécution sur l'ordinateur, c'est-à-
dire les programmes en cours. Il s'agit notamment de :
•Planification des processus : Le SE décide quel processus doit être exécuté par le
processeur à un moment donné.
•Gestion de la concurrence : Le SE permet à plusieurs processus de s'exécuter
simultanément (ou de manière apparente, dans le cas d'un seul processeur), en partageant
les ressources de manière équitable.
•Synchronisation et communication inter-processus (IPC) : Lorsque plusieurs processus
doivent coopérer, le SE fournit des mécanismes pour échanger des informations de
manière contrôlée.

11/15/2024 Présentée par Abdourahmane SENGHOR 8


Multiprogramation ou pseudo-parallélisme Définition

vMultiprogrammation
La multiprogrammation fait référence à la capacité d'un système d'exploitation à gérer
plusieurs programmes ou processus en mémoire en même temps. L'idée est que pendant
que le processeur travaille sur un processus, les autres processus peuvent être stockés en
mémoire et attendre leur tour d'exécution. Le but est d'augmenter l'efficacité du
processeur en maximisant son taux d'occupation.

•Principe : La multiprogrammation ne nécessite pas que plusieurs processus soient


exécutés simultanément, mais plutôt que le système alterne rapidement entre eux pour
que chaque programme ait l'impression d'être exécuté sans interruption.

•Exemple : Dans un système avec multiprogrammation, pendant qu'un programme attend


l'entrée/sortie (I/O), le processeur peut exécuter un autre programme.

•Caractéristique clé : La multiprogrammation repose sur le partage temporel du


processeur

11/15/2024 Présentée par Abdourahmane SENGHOR 9


Concurrence Définition

vConcurrence
La concurrence est un concept plus large, qui fait référence à la gestion de plusieurs tâches
(ou processus) qui peuvent être exécutées de manière simultanée ou parallèle dans un
système, mais sans nécessairement s'exécuter en même temps. Les processus concurrents
peuvent être exécutés en intercalant leur exécution (par exemple, grâce au temps partagé
du processeur), ou certains peuvent attendre la fin d'autres processus.

•Principe : La concurrence implique qu'un système gère plusieurs tâches de manière


efficace, souvent avec des mécanismes de synchronisation pour éviter les conflits (par
exemple, des verrous, des sémaphores, ou des barrières de synchronisation).

•Exemple : Un serveur web qui gère plusieurs requêtes HTTP simultanément. Chaque
requête est traitée de manière concurrente, même si le serveur n'a qu'un seul processeur.

•Caractéristique clé : La concurrence est une manière d'organiser les tâches pour qu'elles
progressent simultanément, mais pas nécessairement en même temps.

11/15/2024 Présentée par Abdourahmane SENGHOR 10


Parallélisme Définition

vParallélisme
Le parallélisme va plus loin que la concurrence en impliquant l'exécution réellement
simultanée de plusieurs tâches. Il nécessite un matériel capable de traiter plusieurs
opérations en même temps, comme plusieurs processeurs ou cœurs de processeur. Le
parallélisme est souvent utilisé pour accélérer les calculs en décomposant une tâche en
plusieurs sous-tâches indépendantes qui peuvent être exécutées en parallèle.

•Principe : Le parallélisme vise à améliorer les performances en exécutant plusieurs


instructions ou processus en parallèle, souvent sur des unités de traitement distinctes
(cœurs de processeur, processeurs multiples, ou même des machines différentes).

•Exemple : Un programme de simulation physique qui divise l'espace en régions, et chaque


région est simulée par un processeur ou un cœur de processeur différent.

•Caractéristique clé : Le parallélisme repose sur le traitement simultané des données sur
plusieurs unités de calcul.

11/15/2024 Présentée par Abdourahmane SENGHOR 11


Multiprogrammation vs. Concurrence vs. Définition
Parallélisme
vComparaison entre Multiprogrammation, Concurrence et Parallélisme

Concept Description Exemple d'application Ressources nécessaires


Gestion de plusieurs Systèmes d'exploitation
Multiprogrammation processus dans un espace multitâches sur un seul Un seul processeur.
mémoire partagé. processeur.
Gestion de plusieurs
tâches qui progressent Serveurs web, bases de
Un ou plusieurs
Concurrence simultanément, sans données, gestion des
processeurs.
forcément s'exécuter en ressources partagées.
parallèle.
Exécution simultanée de
Calculs scientifiques,
plusieurs processus ou Plusieurs processeurs ou
Parallélisme applications de rendu
tâches, nécessitant cœurs.
vidéo, simulations.
plusieurs unités de calcul.

11/15/2024 Présentée par Abdourahmane SENGHOR 12


Multiprogrammation vs. Concurrence vs. Définition
Parallélisme
vSynthèse

•Multiprogrammation : partage du temps d'exécution entre plusieurs processus, pour


maximiser l'utilisation du processeur.

•Concurrence : organisation des processus de manière à ce qu'ils puissent progresser


indépendamment et simultanément, mais pas nécessairement en parallèle.

•Parallélisme : exécution simultanée de plusieurs tâches ou processus sur plusieurs unités


de calcul.

Chacun de ces concepts joue un rôle crucial dans l'optimisation des performances des
systèmes informatiques modernes, et leur utilisation appropriée dépend du type de
système, de la charge de travail et des ressources matérielles disponibles.

11/15/2024 Présentée par Abdourahmane SENGHOR 13


Parallélisme Notions de base

vProgrammation parallèle
+ L’art de concevoir et de mettre en œuvre un programme en conditionnant les instructions et/ou
les données à emprunter plusieurs chemins d’exécution simultanément.

vCalcul parallèle
+ Opération consistant à exécuter simultanément plusieurs instructions et/ou données en les
répartissant sur différents processeurs et/ou machines interconnectées.

vRégion parallèle Plus qu’une science, la programmation parallèle est un art


+ Partie du programme susceptible d’être exécutée simultanément par plusieurs processeurs.
+ Exemple: les boucles for , les méthodes récursives

vArchitecture parallèle
o Plusieurs unités de traitement capables d’exécuter simultanément des tâches.
o Exemple: Processeurs multi-cœurs, cluster, grille de calcul

11/15/2024 Présentée par Abdourahmane SENGHOR 14


Parallélisme Paradigme

vParallélisme implicite

le programmeur écrit son application dans un langage séquentiel conventionnel et le parallélisme est extrait par un
système sous-jacent. Cela peut être à plusieurs niveaux : un compilateur parallélisant (Intel C++), un exécutif, au niveau
du matériel (pipelining, speculative threads).

vParallélisme explicite
le programmeur écrit son application dans un langage spécialement conçu pour lui permettre de décrire
explicitement les actions à mener en parallèle. Celles-ci peuvent être des directives de compilation(OpenMP) ou
des A.P.I (MPI, Pthreads, threads java, TaskParallel Library).

11/15/2024 Présentée par Abdourahmane SENGHOR 15


Parallélisme Exemple

vCalcul parallèle de la valeur de PI (Cas avec 2 threads)

i)Identifier la boucle for à paralléliser, ainsi que les indexes de début et de fin
ii)Déclarer une classe dénommée Task qui implémente une interface Runnable et Copier
la boucle for à paralléliser et coller dans public void run(){}.
iii)Créer deux taches Task1 et Task2, qui sont des instances de la classe Task et qui, au
moment de l’instanciation, prennent en paramètre les indexes de début et de fin issus de
la partition des itérations de la boucle for à paralléliser.
iv) Créer 2 threads Th1 et Th2, qui sont des instances de la classe Thread et qui, au
moment de l’instanciation, prennent en paramètre Task1 et Task2.
v) Lancer les threads1 Th1 et Th2 (Fork), puis bloquer (Join) le thread main le temps que
Th1 et Th2 terminent leur exécution.
vi)Une fois que le Thread main reprend la main, faire la somme(Reduction du résultat
d'execution de Th1 et Th2) pi=pi+pi1+pi2
11/15/2024 Présentée par Abdourahmane SENGHOR 16
Parallélisme Paradigme

vParallélisme à mémoire partagée - SMP

o Lorsque les fils d’exécutions (threads) communiquent via une mémoire partagée. Lorsque ces
threads se partagent une variable, l’accès à cette variable est protégée par une synchronisation
(exclusion mutuelle, sémaphore,…). Ex. OpenMP

vParallélisme à mémoire distribuée


+ Les fils d’exécutions (threads) s’exécutent simultanément et si besoin est, communiquent par
échange de message. Ex. MPI, rmi et socket Java

vParallélisme hybride
+ La combinaison du parallélisme à mémoire partagée et du parallélisme à mémoire distibuée. Ex.
MPI+OpenMP

11/15/2024 Présentée par Abdourahmane SENGHOR 17


Parallélisme Paradigme

vParallélisme de données
Lorsqu'une même action est répétée sur un ensemble de données (généralement de même type) réparties sur
plusieurs noeuds (processeurs) de l’environnement parallèle. Ex. Parallélisme des boucles for.

vParallélisme de tâches
Lorsque plusieurs actions peuvent être effectuées en même temps (par plusieurs processeurs différents) sur un
ensemble de données. Cette forme de parallélisme met l’accent sur la répartition des tâches d’exécution aux
différents processeurs. Parallélisme des applications récursives

11/15/2024 Présentée par Abdourahmane SENGHOR 18


Parallélisme Paradigme

vParallélisme DoAll
Lorsque la boucle for à paralléliser ne porte pas de dépendance de données, ni de contrôle entre les
instructions se trouvant à l’intérieur du bloc de la boucle. Paralléliser une boucle doAll revient
simplement à assigner les itérations aux différents processeurs.

vParallélisme DoAcross

Lorsque la boucle à paralléliser porte des dépendances de données ou de contrôle entre les instructions composant
le bloc de la boucle. Les compilateurs ou les programmeurs doivent identifier les dépendances entre les itérations
ou entre les instructions.

11/15/2024 Présentée par Abdourahmane SENGHOR 19


Parallélisme Application ciblée

vApplications de type cpu-bound


Les applications qui sollicitent constamment les ressources mémoires et processeurs. Domaines
d’applications aussi variés que les calculs mathématiques, la météo, les ordinateurs de bord des
avions, l’astronomie,…. Ces applications sont des champs d’application du parallélisme.

vApplications de I/O-bound
Les applications qui sollicitent constamment les entrées/sorties du disque. Domaines d’applications
aussi variés que les bases de données, bases de données réparties,… Ces applications n’ont pas
nécessairement besoin du parallélisme.

vApplications client/serveur
Application interagissant directement avec l’utilisateur. Par exemple, les applications web, les applications de type
ERP

11/15/2024 Présentée par Abdourahmane SENGHOR 20


Parallélisme Objectifs

Parallélisme = Cohérence séquentielle + Gain de performance

vCohérence séquentielle
Cohérence entre le résultat obtenu après l’exécution séquentielle et celui obtenu après l’exécution
parallèle du même programme.

Mécanisme d’analyse de dépendance des données, synchronisation des variables partagées, gérer la
cohérence des mémoires caches…

vGain de performance
Le temps d’exécution mesuré après l’exécution parallèle est inférieure à celui mesuré après l’exécution séquentielle
du même programme.

Mécanisme d’équilibrage des charges, minimiser les synchronisations, favoriser la localité des données, …

11/15/2024 Présentée par Abdourahmane SENGHOR 21


Parallélisme Indicateurs de performance

vIndicateurs de mesure de performance

o Accélération de parallélisme Sp est l’accélération de parallélisme


T1 T1 est le temps d’exécution du programme séquentiel
S p  Tp est le temps d’exécution du programme parallèle
Tp

o Loi d’Amdahl 1 A est l’accélération maximum pouvant être atteinte


A
P P est la proportion qui peut être parallélisée
1  P  
N 1-P est la proportion qui ne peut être parallélisée
N est le nombre de coeurs/processeurs

o Scalabilité, évolutivité

11/15/2024 Présentée par Abdourahmane SENGHOR 22


Parallélisme Exécution séquentielle vs. Exécution parallèle
Processeur
vExécution séquentielle
Exécution en 8 s
Mémoire P1

P2
t4 t3 t2 t1
P3

P4

vExécution Parallèle
Mémoire P1 Exécution en 2 s

P2
t4 t3 t2 t1
P3

P4

11/15/2024 Présentée par Abdourahmane SENGHOR 23


Parallélisme Choix du langage de programmation

vJava
ü Portable
ü Populaire: des smartphones aux supercalculateurs
ü Just In Time compilateur, hotspot
ü Multithreading intégré
ü Bibliothèques et API évoluées
ü Absence de compilateurs-paralléliseurs standardisés

vC++, Fortran
ü Standard OpenMP, MPI
ü High Performance Computing

vAutres langages….

11/15/2024 Présentée par Abdourahmane SENGHOR 24


Parallélisme Compilateur-paralléliseur source-à-source

v OpenMP
Hello.c Hello.c

#include <iostream>
#include ”omp.h”
int main() { #include <iostream>
#include ”omp.h”
#pragma omp parallel int main() {
{
std::cout << ”Hello World\n” //parallel code with threads
}
return 0; }
} OpenMP
Compiler

11/15/2024 Présentée par Abdourahmane SENGHOR 25


Parallélisme Performance

vProgramme de calcul de PI
public class CalculPI1 {
final static int N=2000000000;
public static void main(String args[]){
double pi= 1.0;
/*par threads=8, block*/
for(int i=1; i<N/2; i++)
pi+=Math.pow(-1,i%2)*1.0/(2.0*((double)i)+1.0);
}
}

Parallélisme de données

11/15/2024 Présentée par Abdourahmane SENGHOR 26


Parallélisme Performance

vProgramme de calcul de PI

ü Expérimentation sur HP Compaq / Intel Quad Core (4 cœurs à 2.83Ghz)

ü Charge de données: 2 x 109 itérations

ü Exécution séquentielle:
ü Précision: 3.1415926525
ü Durée: 7.2 secondes

ü Exécution parallèle
ü Précision: 3.1415926525
ü Durée: 1.8 secondes

ü Accélération de parallélisme = 7.2/1.8 = 4

11/15/2024 Présentée par Abdourahmane SENGHOR 27


Parallélisme Performance

vProgramme de calcul de PI

ü Expérimentation sur IBM X3650/ Intel Xeon E5420 ( 2 x 4 cœurs)

ü Charge de données: 2 x 109 itérations

ü Exécution séquentielle:
ü Précision: 3.1415926525
ü Durée: 8.35 secondes

ü Exécution parallèle
ü Précision: 3.1415926525
ü Durée: 1.04 secondes

ü Accélération de parallélisme = 8.35/1.04= 8

11/15/2024 Présentée par Abdourahmane SENGHOR 28


Parallélisme Performance

1. public class Fibonnacci {


vFibonacci 2. public long fibonacci(int n) {
3. if(n==0) return 0;
4. if (n==1) return 1;
5. long x, y;
6. //taskq nthreads=4 MaxDepth=4
7. {
8. //task
9. x=fibonacci(n-1);
10.
//task
11. y=fibonacci(n-2);
}
12.
13. return x+y ;
14. }
Parallélisme de tâches
15. }
11/15/2024 Présentée par Abdourahmane SENGHOR 29
Parallélisme Performance

vFibonacci

ü Expérimentation sur IBM X3650/ Intel Xeon E5420 ( 2 x 4 cœurs)

ü Charge de données: fibonacci (45)

ü Exécution séquentielle:
ü résultat: 1134903170
ü Durée: 12.7 secondes

ü Exécution parallèle
ü résultat: 1134903170
ü Durée: 1.67 seconde

ü Accélération de parallélisme = 12.7/1.67= 7.6

11/15/2024 Présentée par Abdourahmane SENGHOR 30


Parallélisme High Performance Computing

vTop 500 supercalculateurs / Classement 2015

1. (China) Thiane-2 | NUDT | 3 120 000 cœurs | 33 862,7 TFLOP/S

2. (Usa)Titan Cray XK7| Cray Inc | 560 000 cœurs | 17 590.0 TFLOP/S

3. (Usa)Sequioa |IBM | 1 572 864 cœurs | 17 173.2 TFLOP/S

www.top500.org

11/15/2024 Présentée par Abdourahmane SENGHOR 31


Parallélisme High Performance Computing

vDomaine d’application

ü Mécanique quantique

ü Prévision météorologique

ü Exploration de pétrole et de gaz

ü Cryptographie

ü Les calculs et modélisations mathématiques

ü Astronomie

ü Modélisation moléculaire et nucléaire

ü Etc…..
11/15/2024 Présentée par Abdourahmane SENGHOR 32
Parallélisme High Performance Computing

vOutils de parallélisation

ü openMP (open multiprocessing) pour les architectures à mémoires partagées

ü openMP est destiné à C/C++ et Fortran

ü MPI (Message Passing Interface) pour les clusters

ü OpenMP + MPI pour les grilles de calcul

ü OpenCL & CUDA pour les processeurs graphiques (GPGPU)

ü etc.

11/15/2024 Présentée par Abdourahmane SENGHOR 33


Parallélisme Antisèche

vAntisèche

ü La première machine multiprocesseurs est produite par HoneyWell Inc. en 1969

ü Le Power4 de IBM est le premier processeur multicoeurs et est apparu en 2001

ü Le premier exemplaire du pentium dual core de Intel est apparu en 2005

ü Thiane-2 est l’ordinateur le plus puissant au monde avec 3 120 000 cœurs (Classement 2015)

ü En 1975 Amdahl prédisait que le nombre de transistors sur processeur doublerait tous les 2 ans

ü La première version de OpenMP est apparue en 1997

ü La première version de MPI est apparue en 1994

11/15/2024 Présentée par Abdourahmane SENGHOR 34


Parallélisme Antisèche

vPerspective Amelioration

ü Exascale Computing
ü Frontier , world’s fastest supercomputer

ü Folding@home project, world’s first exaflop computing

ü Thiane-2 est l’ordinateur le plus puissant au monde avec 3 120 000 cœurs (Classement 2015)

ü En 1975 Amdahl prédisait que le nombre de transistors sur processeur doublerait tous les 2 ans

ü La première version de OpenMP est apparue en 1997

ü La première version de MPI est apparue en 1994

11/15/2024 Présentée par Abdourahmane SENGHOR 35

Vous aimerez peut-être aussi