Chapitre_I_Introduction_A_la_Programmation_Parallele
Chapitre_I_Introduction_A_la_Programmation_Parallele
Chapitre_I_Introduction_A_la_Programmation_Parallele
Abdourahmane SENGHOR
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.
•Registres : Petites unités de stockage à très haute vitesse utilisées pour stocker
temporairement des données et des instructions.
•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.
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.
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
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.
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.
•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.
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.
•Caractéristique clé : Le parallélisme repose sur le traitement simultané des données 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.
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.
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
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).
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
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 hybride
+ La combinaison du parallélisme à mémoire partagée et du parallélisme à mémoire distibuée. Ex.
MPI+OpenMP
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
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.
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
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, …
o Scalabilité, évolutivité
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
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….
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
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
vProgramme de calcul de PI
ü 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
vProgramme de calcul de PI
ü 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
vFibonacci
ü Exécution séquentielle:
ü résultat: 1134903170
ü Durée: 12.7 secondes
ü Exécution parallèle
ü résultat: 1134903170
ü Durée: 1.67 seconde
2. (Usa)Titan Cray XK7| Cray Inc | 560 000 cœurs | 17 590.0 TFLOP/S
www.top500.org
vDomaine d’application
ü Mécanique quantique
ü Prévision météorologique
ü Cryptographie
ü Astronomie
ü Etc…..
11/15/2024 Présentée par Abdourahmane SENGHOR 32
Parallélisme High Performance Computing
vOutils de parallélisation
ü etc.
vAntisèche
ü 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
vPerspective Amelioration
ü Exascale Computing
ü Frontier , world’s fastest supercomputer
ü 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