Computing">
Introduction aux Systèmes Parallèles et Répartis
Introduction aux Systèmes Parallèles et Répartis
Répartis
(INE2)
Pr. Safae DAHMANI
@: dahmani@[Link]
Bureau 111
16/05/2022
Plan du cours
Chapitre I: Architecture des systèmes HPC
16/05/2022
Principes de la programmation parallèle
• Concurrence vs Parallélisme ?
• Programme séquentiel Un seul fil d’exécution
• Programme concurrent > 2 fils d’exécution qui coopèrent
• Applications multi-contextes: les fils d’exécution peuvent ou non s’exécuter en même
temps. Ils sont sont utilisés pour mieux organiser et structurer l’application. Ex. Interface
Homme-Machine.
• Applications parallèles: Chaque fils d’exécution est exécuté sur son propre ressource de
calcul (cœur). Ex. Prévisions météorologiques.
• Applications réparties (distribuées): Les fils d’exécution communiquent entre eux via un
réseau de communication (délai plus long). Le but est de répartir le calcul et les données
géographiquement. Ex. Banques de données.
16/05/2022
Principes de la programmation parallèle
Exécution
concurrente
Exécution
parallèle
16/05/2022
Caractéristiques des systèmes parallèles
• Définition: Calcul Parallèle/Système parallèle
Calcul Parallèle : La résolution d’un problème unique/grand en
utilisant plusieurs unités de calcul (CPUs, Nœuds de calcul ).
“ Parallel processing is the solution of a single problem by dividing it into a number of
sub-problems, each of which may be solved by a separate agent” Chalmers and Tidmus,
1996.
16/05/2022
Caractéristiques des systèmes parallèles
• Définition: Calcul Parallèle/Système parallèle
Calcul Parallèle : La résolution d’un problème unique/grand en
utilisant plusieurs unités de calcul (CPUs, Nœuds de calcul ).
“ Parallel processing is the solution of a single problem by dividing it into a number of
sub-problems, each of which may be solved by a separate agent” Chalmers and Tidmus,
1996.
Système parallèle : L’agrégation de plusieurs unités de calcul qui
collaborent pour effectuer un calcul parallèle.
“A large collection of processing elements that can communicate and cooperate to solve
large problems fast” Almasi and Gottlieb, 1989.
16/05/2022
Caractéristiques des systèmes parallèles
• Pourquoi le parallélisme ?
16/05/2022
Caractéristiques des systèmes parallèles
• Contraintes et complexité :
16/05/2022
Caractéristiques des systèmes
parallèles
Définitions, défis et contraintes
Classification des systèmes parallèles
16/05/2022
Caractéristiques des systèmes parallèles
• Programmation séquentielle :
16/05/2022
Caractéristiques des systèmes parallèles
• Taxonomie de Flynn (1972) est une classification basée sur les types
de processeurs :
• Nombre de données traitées
• Différentes/identiques opérations (instructions) appliquées
# Instructions
#Données
Single Multiple
Single SISD MISD
16/05/2022
Caractéristiques des systèmes parallèles
• SISD: Un seul processeur de calcul et une seule donnée à la fois (exécution séquentielle).
C’est limité par la fréquence du processeur unique.
• SIMD: Une seule et même instruction est appliquée sur plusieurs données à la fois. Ce
type d’architecture est largement utilisé dans le traitement d’image ou calculs
scientifiques. Il s’agit de ce qu’on appelle : machine vectorielles. Exemple: v3 = v1 + v2.
• MISD: Une machine multiprocesseur exécutant plusieurs instructions sur un même
donnée. Exemple : X = sin(a) + cos(a) + tan(a). Ce type de machines n’est plus vraiment
utilisées à cause de son applicatif limité.
• MIMD: Une architecture basée sur plusieurs unités de calculs opérant sur différents sets
de données. Ce sont des machines puissantes prend en charge tout type d’applications.
16/05/2022
Caractéristiques des systèmes parallèles
• Taxonomie de Flynn (1972) est une classification basée sur les types
des processeurs :
• Nombre de données traitées
• Différentes/identiques opérations (instructions) appliquées
# Instructions
#Données
Single Multiple
Single Von Neumann Processeur à pipeline
16/05/2022
Caractéristiques des systèmes parallèles
• Classification par nombre de cœurs:
Complexité de
programmation MPP-based clusters (1 MPP par nœud )
Massivelly Parallel Processors (MPP)
(plusieurs centaines/milliers de cœurs)
Puissance
par cœur Nombre de
cœurs
16/05/2022
Principes de la programmation
parallèle
Concepts et terminologie
Paradigmes de la programmation parallèle
Conception d’un programme parallèle
Analyse des performances
16/05/2022
Principes de la programmation parallèle
Processus Thread
Processus Vs Thread
16/05/2022
Principes de la programmation parallèle
• Définitions :
« Canal de communication »: c’est le mécanisme qui assure le lien de
communication entre les tâches d’un programme. A chaque canal de
communication est associé un ensemble d’adresses correspondant à des
emplacements mémoire différents. Les accès à ces derniers sont gérés à
l’aide d’un système d’accès offrant des routines de lecture et d’écriture
que les tâches utilisent pour recevoir ou transmettre des données.
16/05/2022
Principes de la programmation parallèle
• Définitions :
16/05/2022
Principes de la programmation parallèle
• Définitions :
16/05/2022
Principes de la programmation parallèle
• Comment programmer les systèmes parallèles ?
• Il existe plusieurs niveaux de parallélisme (granularité):
Granularité Objet Parallélisé par
Cacher la latence générée par les opérations couteuses telles que les accès mémoire
16/05/2022
Principes de la programmation parallèle
• Comment programmer les systèmes parallèles ?
• Parallélisme implicite:
• A la compilation (langage séquentiel)
• Langage parallèle
16/05/2022
Principes de la programmation parallèle
• Comment programmer les systèmes parallèles ?
• Construction explicite du parallélisme : extension du langage
séquentiel permettant le contrôle de :
• Création du parallélisme :
• Création des tâches
• Répartition des tâches sur les unités de calcul (itération sur tous les processeurs de
calcul)
• Exécution des tâches parallèles :
• Synchronisation
• Passage de messages (Ex. synchrones/asynchrones )
• Sections critiques (Ex. gestion des données partagées)
• Terminaison d’une exécution parallèle
16/05/2022
Principes de la programmation
parallèle
Concepts et terminologie
Paradigmes de la programmation parallèle
Conception d’un programme parallèle
Analyse des performances
16/05/2022
Caractéristiques des systèmes parallèles
• Modèle à mémoire partagée:
P1 P2 • Tous les processeurs accèdent à une mémoire
physique partagée où chaque donnée a une
adresse unique.
Cache Cache
• Tout changement dans cette adresse mémoire par
un processeur est visible par tous les autres
processeurs (cohérence de données )
Réseau • Les processeurs ont leurs propres mémoires
locales (caches)
• Les paradigmes basés sur cette approche les plus
connus:
Mémoire partagée • POSIX (Pthreads)
• OpenMP
• Modèle à mémoire partagée
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée:
• Accès mémoire:
• UMA (Unified Memory Access): les processeurs ont tous le même temps d’accès aux
données.
• NUMA (NON-Unified memory Access): conçu pour pallier à la problématique des accès
concurrents par le fait de répartir la mémoire en zones. Chaque zone est placée sur un
bus différent
Les des temps d’accès à la mémoire sont donc différents en fonction de la zone accédée.
On parle également de CC-UMA et CC-NUMA (CC: Cache Coherent) pour les
mémoires avec gestion de la cohérence des caches où les processeurs ont
toujours accès à la dernière version de la zone mémoire modifiée.
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée:
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée
• Exemple: POSIX Threads (PThreads)
• Inclusion de la bibliothèque :
# include <pthread.h> // include Pthread library
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée
• Exemple: POSIX Threads (PThreads)
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée
• Exemple: POSIX Threads (PThreads)
• Lancement des threads:
int main(int argc, char **argv) {
int i;
pthread_attr_init(&attr); //initializes the attribute object with default value
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); //Set the created thread to
joinable state
// Starting calculation threads
for (i=0;i<threadnum;i++) {
startValue[i]=i;
// launch a thread for calculations
..
pthread_create(&thread[i],&attr,Calculate,(void *)(&( startValue[i])));
}
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée
• Exemple: POSIX Threads (PThreads)
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée:
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire partagée
• Exemple: OpenMP
#include <omp.h>
#include <stdio.h>
int main() {
// a serial region
printf(“\n This is executed by one thread only!”);
// a serial processing here parallel region with optional parameters […]
16/05/2022
Principes de la programmation parallèle
Mémoire
• Modèle à mémoire répartie: locale
• Chaque processeur a sa propre mémoire;
pas de notion d’espace d’adressage partagé P1
• Les processeurs fonctionnent de façon
indépendante
• Le partage des données se fait par Mémoire Mémoire
communication explicite pénalité d’accès locale P2 P4 locale
aux données non locales est très élevée
• Les performances de communications
dépendent fortement du réseau
d’interconnexion ainsi que le mécanisme qui P3
le gère
• Les paradigmes basés sur cette approche les Mémoire
plus connus: locale
• MPI (Message Passing Interface): CPU
• CUDA/OPENCL: GPU Modèle à mémoire répartie
16/05/2022
Principes de la programmation parallèle
• Modèle par passage de messages: Adapté aux architectures à
mémoire repartie. C’est un ensemble de bibliothèques fournissant les
routines nécessaires à l’initialisation et la configuration de
l’environnement de passage de messages aussi bien que les routines
de transmission et de réception des paquets de données.
• MPI (Message Passing Interface): Une application est constituée de plusieurs
processus qui interagissent par échange de messages. L’API caractérise un
processus par un identifiant unique(rank) au sein d’un groupe encapsulé dans
ce qu’on appelle un « MPI Communicator ».
16/05/2022
Principes de la programmation parallèle
• Modèle par passage de messages:
• MPI (Message Passing Interface): Une application est constituée de plusieurs
processus qui interagissent par échange de messages.
• MPI caractérise un processus par un identifiant unique(rank) au sein d’un groupe
encapsulé dans ce qu’on appelle un « MPI Communicator ».
Processus 0 5
MPI (rank =0)
2
4
1
3
16/05/2022
Principes de la programmation parallèle
• Modèle par passage de messages:
• MPI (Message Passing Interface):
• Le communicateur par défaut est appelé: MPI_COMM_WORLD
• Communicateurs « intra»: entre processus d’un même groupe
• Communicateurs « inter»: communication entre les groupes
• Il existe deux types de communications en MPI:
• P2P (Point-à-point): ça implique deux processeurs. Chacun peut soit envoyer ou recevoir un
message. Dans les deux cas un identifiant « rank » du processus destination est à spécifier
• Collective: plusieurs processus prennent part de cette communication soit pour
synchronisation ou partage de données.
16/05/2022
Principes de la programmation parallèle
• Modèle par passage de messages:
• MPI (Message Passing Interface):
• La communication peut être:
• Bloquante: fonction bloquée jusqu’à la fin d’une opération (envoie d’un message) ou jusqu’un
niveau de progression spécifique (copier dans un buffer pour un transfert de donnée)
• Non bloquante: la main est retournée immédiatement au processus appelant et la fonction
continue en arrière plan.
16/05/2022
Principes de la programmation parallèle
• Modèle par passage de messages:
• MPI (Message Passing Interface):
• P2P:
• MPI_Send(): bloquante la fonction retourne si les données sont copiées à la destination ou
dans un buffer intermédiaire
• MPI-Recv(): bloquante
• Collective:
• MPI_Barrier: synchronisation entre les processus d’un groupe
• MPI_Scatter: un ou plusieurs processus envoient les données à un groupe de processus
• MPI_Gatter: un processus rassemble des données d’un groupe de processus
• MPI_Bcast: un processus diffuse des données à tous les processus d’un communicateur
• MPI_Reduce: permet d’exécuter une opération sur les données reçues (communication
+opération)
• MPI_All2all: de tous les processus vers tous les autres.
16/05/2022
Principes de la programmation parallèle
#include <mpi.h>
#include <stdio.h>
16/05/2022
Principes de la programmation parallèle
• Modèle à mémoire répartie virtuellement partagée (Distributed Shared
Memory ‘DSM’) :
• Plusieurs copies d’une
même données chargées
dans les mémoires locales afin d’accélérer le
parallélisme
• Chaque donnée a une référence
unique dans la mémoire virtuellement
partagée.
• Les processeurs ne voient que cette
Référence unique pour chaque accès
à une données.
• Ex. Memnet, Munin, Shiva, Ivy, etc
16/05/2022
Principes de la programmation parallèle
• Modèle hybride:
• Les supercalculateurs les plus puissants au monde sont un mixe des deux
modèles:
• Nœud multiprocesseurs à mémoire partagée
brique de base à mémoire partagée
• Briques interconnectées via un réseau puissant à haute performance
mémoire répartie
16/05/2022
Principes de la programmation parallèle
16/05/2022
Principes de la programmation parallèle
16/05/2022
Principes de la programmation parallèle
• CUDA (NVIDIA) : Un programme CUDA est constitué d'une partie qui
s'exécute sur l'hôte (CPU) et d'une partie qui s'exécute sur le
périphérique(GPU). Les phases peu parallèles sont exécutées sur
l'hôte. Les phases massivement parallèles sont exécutées sur le
périphérique.
• CUDA: « Compute Unified Device Architecture »
• Programmation massivement parallèle en C sur cartes NVIDIA
16/05/2022
Principes de la programmation parallèle
• Architecture matérielle NVIDIA:
• Nvidia GTX 560 :
• 336 Multiprocesseurs x 8 Processeurs (2688 cœurs)
• 1900 MHz
• 768 Threads max par multiprocesseur
• 16 Ko de mémoire partagée
• 8196 registres / MP
16/05/2022
Principes de la programmation parallèle
• Architecture matérielle NVIDIA:
Multiprocesseurs N
Multiprocesseurs N-1
Multiprocesseurs 2
Multiprocesseurs 1
Shared Memory
Registers Registers …… Registers Instruction
Unit
P P P
Constant Cache
Texture Cache
Device Memory
16/05/2022
Principes de la programmation parallèle
• Architecture matérielle NVIDIA:
• Mémoire globale : Cette mémoire est accessible à l'ensemble
des multiprocesseurs. Sa bande passante est très importante, environ 150 Go/s,
cependant sa latence est importante. Lorsque vous achetez une carte graphique,
la capacité de mémoire indiquée fait référence à ce type de mémoire.
• Mémoire partagée : Cette mémoire est propre à un multiprocesseur.
Sa latence est plus faible que la mémoire globale, au détriment de sa taille
qui est de environ 8Mo.
• Les registres : Cette mémoire est propre à un processeur,
son accès est rapide, environ 1 cycle, mais sa taille est réduite, environ 8 Ko.
• Les textures : Cette mémoire est propre à un multiprocesseur, et offre des
mécanismes d'accélération. Elle permet de stocker les textures, comme dans un jeux
et éviter certains accès au disque.
16/05/2022
Principes de la programmation parallèle
• Architecture logicielle NVIDIA:
16/05/2022
Principes de la programmation parallèle
• Grille de calcul:
Kernel (1,0)
Grid
Thread Thread Thread
(0,1) (1,1) (2,1)
(0,1) (1,1)
Thread Thread Thread
Grille de calcul (0,2) (1, 2) (2,2)
16/05/2022
Principes de la programmation parallèle
• Architecture logicielle NVIDIA:
• La Runtime CUDA est une extension du langage C++. Elle permet de s’interfacer avec la partie
matérielle:
• Compiler
• Assurer les liens avec les kernels CUDA et les exécutables
• Mots clefs : Kernel
• __device__ : kernel exécuté sur le GPU mais appelé par le CPU
• __global__ : kernel exécuté et appelé par le GPU
• __host__ : fonction exécutée et appelée par le CPU.
16/05/2022
Principes de la programmation parallèle
• Lancement d’un kernel:
• Le lancement d'un kernel s'effectue de la maniére suivante :
kernel<<< dimGrid, dimBlock[, dimMem ]>>>(params);
if (idx < n )
a[idx] = a[idx] + b;
}
int main(void)
{
}
16/05/2022
Chapitre II : Caractéristiques des systèmes
parallèles
• Exemple programme CUDA:
// Définition de la function kernel
__global__ void incrementVectorGPU(int *a, int b, int n)
{
/* Calcul de la position dans la grille */
int idx = blockIdx.x * blockDim.x + threadIdx.x;
16/05/2022
Chapitre II : Caractéristiques des systèmes
parallèles
• Exemple programme CUDA:
• Grâce aux différents indices calculés 'idx', nous pouvons voir que chaque case
du tableau est bien identifiée par un Thread qui exécutera le calcul sur un seul
indice du tableau.
• Vecteur de taille N=16, Block de taille : 4
Thread v1 v14
B13 B14 Thread 1
14
Thread 1 Thread 2 v1 v2
B1 BB3 B16
2
Thread 3
Thread v2
16 v16
B3 B4 Thread 3 Thread 4
v2
v2
16/05/2022
Principes de la programmation parallèle
Conception Théorie
Technologies
16/05/2022
Principes de la programmation parallèle
Technologies
• Technologies d’implémentation:
• Logicielle et matérielle
• Middleware de contrôle
16/05/2022
Principes de la programmation parallèle
Conception:
• Définition: trouver une forme qui satisfait la fonction et ses exigences:
• Structurelles
• Comportementales
Objectifs :
• Réduction du temps d’exécution
• Coordination entre plusieurs ressources de calcul
16/05/2022
Principes de la programmation parallèle
Conception:
• Définition: représentation/description:
• Data set: données utilisées dans le calcul
• Algorithme: séquentiel parallèle, parallèle
Solutions:
• Plusieurs solutions
• Evaluation des performances
• Efficacité
• Coût minimal
16/05/2022
Principes de la programmation parallèle
Conception:
• Propriétés Exigences
Evaluation
• Propriétés Forme
• Exigences
Fonction
16/05/2022
Principes de la programmation parallèle
Conception:
1. Délimitation
2. Décomposition
3. Agrégation
4. Placement
16/05/2022
Principes de la programmation parallèle
Conception:
1. Comprendre les limites de la
1. Délimitation solution.
Parallélisation Parallélisation
automatisée Manuelle
• Utilisation d’outils pour identifier et/ou • Le développeur est en charge d’identifier et
implémenter le parallélisme d’implémenter le parallélisme
• Conversion des programmes séquentiels en
programmes parallèles
• Compilateur
16/05/2022
Principes de la programmation parallèle
Automatisation du parallélisme:
16/05/2022
Principes de la programmation parallèle
• Automatisation du parallélisme:
Parallélisation
Parallélisation automatisée
dirigée par le code/manuelle
• Peut introduire des erreurs • Complexe
• Risque de dégradation des performances • Sujet aux erreurs
• Manque de flexibilité • Manquer des sections parallélisables
• Plus adapté lorsqu’un programme séquentiel • Itérative (coût élevé)
existe ou en cas de manque de temps/ressources
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle:
• Partir de :
• Programme séquentiel
• Description d’un problème
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle:
• Exemple de problème simplement parallélisable:
• Agrandir une image représentée par une matrice d’entiers de taille (n, n), en
doublant sa taille vers une matrice de (2n, 2n).
• Solution possible: Donner à chaque pixel la valeur de son voisin de gauche par exemple
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle:
• Exemple de problème non-parallélisable:
• Problème de l’évaluation d’un circuit (CIRCUIT VALUE PROBLEM): consiste à
calculer la sortie d'un circuit booléen sur des entrées données.
NOT Sortie
NOT
OR
AND
AND OR
X1 =0 X2 =1 X3=1 Entrées
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
• Diviser le problème en plusieurs parties que l’on peut répartir sur
différentes ressources de calcul. On distingue deux types de
décomposition:
1. Décomposition de domaine
2. Décomposition fonctionnelle
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
1. Décomposition de domaine: ça consiste à diviser les données du
problème de façon à ce que chaque tâche parallèle s’exécute sur un
bout de ces données.
Data Set
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
1. Décomposition de domaine: ça consiste à diviser les données du
problème de façon à ce que chaque tâche parallèle s’exécute sur un
bout de ces données à chaque phase de la vie du porgramme.
• Ces données sont: Entrées, Sorties, Données intermédiaires
• La priorité est donnée aux structures de données de grande taille aussi
bien que les plus fréquemment utilisées
• L’échange des données entre tâches se fait par communications
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
2. Décomposition fonctionnelle: la décomposition se base sur le calcul à
faire plutôt que sur les données. Chaque tâche parallèle va donc exécuter
un bout du calcul
Instruction Set
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
2. Décomposition fonctionnelle: la décomposition se base sur le
calcul à faire plutôt que sur les données. Chaque tâche parallèle va
donc exécuter un bout du calcul
• A chaque tâche est associé l’ensemble des données sur lesquels
le calcul est effectué:
• Données disjointes: décomposition fonctionnelle est appropriée
• Données partagées: Beaucoup de communications; la décomposition de domaine
est à considérer
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
2. Décomposition fonctionnelle: la décomposition se base sur le calcul à
faire plutôt que sur les données. Chaque tâche parallèle va donc exécuter
un bout du calcul
• Exemple: Recherche de solutions Search (A):
dans un arbre begin
if (solution(A)) then
score = eval(A)
report solution and score
else
Nœud de recherche
foreach child A(i) of A
search(A(i))
endfor
endif
end
• Une nouvelle tâche est crées à
16/05/2022 chaque pas une nouvelle recherche.
Principes de la programmation parallèle
Parallélisme manuelle: Décomposition du problème
• Validation de la décomposition: La décomposition d’un problème est une
solution possible parmi d’autres. Il est important de vérifier qu’il n’y a pas
de défauts évidents à cette étape de la conception:
1. La décomposition génère au moins autant de tâches que l’on a de ressources de calcul.
Cette condition est flexible et peut être améliorée dans les prochaines étapes de
conception.
2. Il n’y a pas de calculs ni d’accès en mémoire externe redondants cela peut mettre en
péril le passage à l’échelle
3. Les tâches sont de tailles comparables => autrement il serait difficile de répartir
équitablement la charge de travail
4. Le nombre de tâches pourrait augmenter avec la taille du problème au lieu de la taille des
tâches garantit la résolution de plus de complexité si on a plus de ressources de calcul
5. Identifier des solution alternatives à explorer dans les étapes suivantes flexibilité
16/05/2022
Principes de la programmation parallèle
Communications:
• Sans communications: Il n’y a pas
besoin de communications dans tout les
programmes parallèles. Il existent
certains cas où les tâches s’exécutent
indépendamment sans aucun partage
de données.
• Exemple: Traitement d’une image où l’on
souhaite inverser la couleur de chaque
pixel
• Le traitement de chaque pixel de l’image peut
se faire indépendamment de tous les autres
16/05/2022
Principes de la programmation parallèle
Communications:
• Avec communications: dans la
majorité des programmes parallèles
les tâches échangent beaucoup de
données et ont besoin de
communications:
• Exemple: problème de diffusion de
chaleur
• Chaque point a besoin de connaitre la valeur
de donnée voisine afin d’évaluer sa propre
valeur
16/05/2022
Principes de la programmation parallèle
Communications:
• Structure du canal de communication:
• Producteur: en possession des données
• Consommateur: en besoin des données
• Opérations de communication: messages à envoyer/recevoir
Canal de communication
16/05/2022
Principes de la programmation parallèle
Communications:
• Dans une décomposition fonctionnelle, il est plus facile de
conceptualiser les communications en suivant les le flot de données
entre tâches.
• Exemple: Représentation Modèle d’atmosphère
fonctionnelle du modèle
climatique Modèle
hydrologique
Modèle
Modèle de surface d’océan
terrestre
16/05/2022
Principes de la programmation parallèle
Communications: On distingue plusieurs schémas de
communications:
• Locale/globale: chaque tâche communique avec un sous-ensemble de
tâches (tâches voisines). A l’opposé, dans une communication globale
une tâche communique avec plusieurs autres (tous les autres)
16/05/2022
Principes de la programmation parallèle
Communications: On distingue plusieurs schémas de
communications:
• Locale/globale: chaque tâche communique avec un sous-ensemble de
tâches (tâches voisines). A l’opposé, dans une communication globale
une tâche communique avec plusieurs autres (tous les autres)
• Structurée/non structurée: La tâche et ses voisins communicants
forment une structure régulière (grille, arbre ). Dans une
communication non structurée le réseau de tâches est aléatoire.
16/05/2022
Principes de la programmation parallèle
Communications: On distingue plusieurs schémas de
communications:
• Locale/globale: chaque tâche communique avec un sous-ensemble de
tâches (tâches voisines). A l’opposé, dans une communication globale
une tâche communique avec plusieurs autres (tous les autres)
• Structurée/non structurée: La tâche et ses voisins communicants
forment une structure régulière (grille, arbre ). Dans une
communication non structurée le réseau de tâches est aléatoire.
• Statique/dynamique: les partenaires de communication sont définis de
façon statique et ne changent pas dans le temps. Dans une
communication dynamiques, il peuvent être le résultat d’un calcul
intermédiaire et fréquemment varier.
16/05/2022
Principes de la programmation parallèle
Communications: On distingue plusieurs schémas de communications:
• Locale/globale: chaque tâche communique avec un sous-ensemble de tâches
(tâches voisines). A l’opposé, dans une communication globale une tâche
communique avec plusieurs autres (tous les autres)
• Structurée/non structurée: La tâche et ses voisins communicants forment
une structure régulière (grille, arbre ). Dans une communication non
structurée le réseau de tâches est aléatoire.
• Statique/dynamique: les partenaires de communication sont définis de façon
statique et ne changent pas dans le temps. Dans une communication
dynamiques, il peuvent être le résultat d’un calcul intermédiaire et
fréquemment varier.
• Synchrones/asynchrones: le producteur et le consommateur coopèrent pour
toute opération de transfert/réception. En communication asynchrone, cette
coopération n’est pas nécessaire.
16/05/2022
Principes de la programmation parallèle
Communications: On distingue plusieurs schémas de communications:
• Locale/globale: chaque tâche communique avec un sous-ensemble de tâches
(tâches voisines). A l’opposé, dans une communication globale une tâche
communique avec plusieurs autres (tous les autres).
• Un canal de communication est établi entre les éléments communicants de la
grille.
x1 x2 x3 x4
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Problème de dépendance
• Définitions :
• Dépendance: il existe une dépendance entre les tâches d’un programme si l’ordre
d’exécution de ces tâches peut impacter le résultat final du programme
• La dépendance des données résulte du fait de l’utilisation multiple des mêmes
données par les plusieurs tâches différentes
• Le problème des dépendance est primordial dans le calcul parallèle car c’est un
principale obstacle à l’exécution concurrente
DO J = STARTVALUE,ENDVALUE
A(J) = A(J-1) ^ 2
END DO
16/05/2022
Principes de la programmation parallèle
Parallélisme manuelle: Problème de dépendance
• Comment gérer les dépendances ?
• Mémoire partagée: Synchronisation des opérations de lecture et d’écriture
• Mémoire répartie: Echange des données et synchronisation
16/05/2022
Principes de la programmation parallèle
Agrégation:
• Il est parfois nécessaire de reconsidérer le résultat des phases
précédentes qui sont: décomposition + communication afin
d’améliorer les performance du programme et optimiser le
parallélisme au maximum.
• Nombre de tâche trop grand processeurs non optimisé pour des petites
tâches à grand nombre
• Trop de communications
• L’agrégation consiste à recombiner des tâches afin de réduire le
nombre de tâches (taille plus grande) et de considérer la duplication
des données ou du calcul.
16/05/2022
Principes de la programmation parallèle
Agrégation: Techniques d’agrégation
• Augmenter la granularité
• Décomposition plusieurs tâches coût élevé des communications
Dégradation du parallélisme
• Réduire le coût des communications:
• Envoyer moins de données
• Envoyer moins de messages: manipulation de données de plus grande taille
• Coût de création des tâches peut avoir un impact sur les performances du
programme si cette opération se produit fréquemment (Ex. recherche de
solution dans un arbre)
16/05/2022
Principes de la programmation parallèle
Agrégation: Techniques d’agrégation
• Augmenter la granularité
16/05/2022
Principes de la programmation parallèle
Placement des tâches: Allouer les tâches aux ressources de calcul
• Objectif: Minimiser le temps global d’exécution
• Répartir les tâches concurrentes sur les différentes unités de calcul
• Placer les tâches communicantes sur le même processeur, pour minimiser le
coût des communications
• Répartir la charge de façon équilibrée entre différents processeurs
• Minimiser les accès extérieurs
16/05/2022
Principes de la programmation parallèle
Placement des tâches: Allouer les tâches aux ressources de calcul
• Techniques de placements:
• Placement direct: Décomposition de domaine(tâches de taille égale) +
communication structurée (locale/globales). Les tâches sont placées en minimisant
les communications. On considère la possibilité d’agrégation des tâches associées à
un processeur (tâche gros grain/processeur)
• Algorithmes d’équilibrage de charge (Load Balancing Algorithms): en cas de tâches
avec des charges de calcul et de communication variable et non structuré, il est
possible d’utiliser des algorithme d’équilibrage de charge dynamiques.
• Algorithmes d’ordonnancement : en cas de décomposition fonctionnelle, les tâches
sont courtes et à durée limitée. Il est possible d’utiliser les techniques
d’ordonnancement permettant de maximiser l’utilisation des processeurs
• Associer les tâches aux processeurs libres
16/05/2022
Principes de la programmation parallèle
Algorithmes d’équilibrage de charge (Load Balancing Algorithms):
Algorithme Description
Méthode de dichotomie • Consiste à diviser récursivement les tâches jusqu’à atteindre le nombre de
(Recursive bisection) tâches souhaité (placement direct sur les processeurs)
• Approche: « diviser pour régner »
Algorithmes locaux • La charge d’un processeur est comparée (de façon régulière) avec se voisins
les plus proches; et une réorganisation du placement en résulte si
nécessaire
• Exemple: Processeurs organisés en grille/mesh
Méthodes probabilistes • Allocation aléatoire des tâches (choix aléatoire de processeurs)
• Ne marche que lorsque le nombre de tâches est largement supérieurs au
nombre de processeurs
16/05/2022
Placement cyclique • Chacun des P processeur est alloué à chaque P ième tâche (tâches
Principes de la programmation parallèle
Placement des tâches: Algorithmes d’ordonnancement
• Structure : Worker/Manager
• Workers: le problème est réparti en tâche worker
• 1 worker par processeur
• Allouer les sous-problèmes (tâches) au workers
• Manager: Fournit la répartition du travail sur les différents workers
16/05/2022
Principes de la programmation parallèle
Placement des tâches: Algorithmes d’ordonnancement
• Structure : Worker/Manager
• Schéma hiérarchique: chaque groupe de workers a son propre submanager
• Schéma décentralisé: les workers possèdent leur propre pile de tâches et
peuvent s’en approvisionner chez les voisins si nécessaire. Absence de
manager.
16/05/2022
Principes de la programmation parallèle
Placement des tâches:
• Vérification de la stratégie de placement des tâches:
1. Pour les schémas de contrôle centralisé, il faut vérifier qu’il n’y a pas de
goulot d’étranglement (bottleneck)
2. Pour les stratégies de placement dynamique l’évaluation du coût du
placement est nécessaire. Les schémas probabilistes et cycliques ont des
coûts moindres.
3. Pour les méthodes probabilistes, il est important d’avoir un nombre de
minimal de tâche pour garantir l’efficacité de la méthode.
16/05/2022
Analyse des performances
Définitions et objectifs
Loi d’Amdhal
Loi de Gustafson-Barsis
Métrique de Karp-Flatt
Métrique d’iso-efficacité
16/05/2022
Analyse des performances
• Que faire ?
• Analyse du temps d’exécution des algorithmes parallèles
• Pourquoi faire ?
• Déterminer si le programme mériterait l’effort de
parallélisation
• Mesurer le gain du programme parallèle versus séquentiel
16/05/2022
Analyse des performances
Métrique Type d’analyse
16/05/2022
Analyse des performances
Soient :
n : Taille du problème
p : Nombre de processeurs
Soient : Soient:
n : Taille du problème σ(n) : portion séquentielle
p : Nombre de processeurs ϕ(n): portion parallèle
К(n, p) : Surcoût de parallélisme
16/05/2022
Analyse des performances
16/05/2022
Analyse des performances
Définitions et objectifs
Loi d’Amdhal
Loi de Gustafson-Barsis
Métrique de Karp-Flatt
Métrique d’iso-efficacité
16/05/2022
Analyse des performances
• Loi d’Amdhal:
• Si le surcoût du parallélisme est négligé (К(n, p) = 0), alors:
𝑻(𝒏,𝟏)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏 𝒏, 𝒑 =
𝑻(𝒏,𝒑)
𝝈 𝒏 + ϕ(n)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
ϕ(n)
𝝈 𝒏 +
𝒑
Portion séquentielle Portion parallèle
Nombre de processeurs
16/05/2022
Analyse des performances
• Loi d’Amdhal:
• Si le surcoût du parallélisme est négligé (К(n, p) = 0), alors:
𝝈 𝒏 + ϕ(n)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
ϕ(n)
𝝈 𝒏 +
𝒑
• Soit S la proportion de la partie séquentielle intrinsèque :
𝝈 𝒏
𝑺=
𝝈 𝒏 + ϕ(n)
16/05/2022
Analyse des performances
• Loi d’Amdhal:
• Si le surcoût du parallélisme est négligé (К(n, p) = 0), alors:
𝟏
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
1
𝑺+ (𝟏 − 𝑺)
𝒑
Loi d’Amdhal : Si S est la fraction des opérations qui doivent absolument s’exécuter en parallèle (où 𝟎 ≤ 𝑺 ≤
𝟏), alors l’accélération maximale possible en exécution parallèle sur p processeurs est égale à :
𝟏
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏𝒎𝒂𝒙𝒊𝒎𝒂𝒍𝒆 𝒏, 𝒑 =
1
𝑺+ (𝟏 − 𝑺)
𝒑
On en déduit la borne maximale :
𝟏 𝟏
𝐥𝐢𝐦 =
1
𝑺 + (𝟏 − 𝑺) 𝑺
𝒑→∞
16/05/2022 𝒑
Analyse des performances
• Loi d’Amdhal:
16/05/2022
Analyse des performances
• Exercice 1:
• Quel est le maximum d’accélération que l’on peut obtenir avec :
• 10 processeurs
• 85 % du calcul est parallélisable
16/05/2022
Analyse des performances
• Exercice 1:
• Quel est le maximum d’accélération que l’on peut obtenir avec :
• 10 processeurs
• 85 % du calcul est parallélisable
• S = 15%
𝟏
• 𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏 𝒏, 𝒑 ≤ 1 ≈ 𝟒. 𝟐𝟓
𝟎.𝟏𝟓+ 𝟏𝟎
𝟏 −𝟎.𝟏𝟓
16/05/2022
Analyse des performances
• Discussion: « Loi d’Amdhal »
• La loi d’Amdhal donne une estimation optimiste du
parallélisme:
• Ignore le surcoût dû au parallélisme К(n, p)
• Pour un problème de taille fixe n:
• La loi d’Amdhal montre la diminution du temps de calcul lorsque p
augmente
• Pour un nombre de processeurs fixe p, l’accélération est une
fonction croissante de la taille du problème (n):
• Lorsque n augmente:
• S peut diminuer
ϕ𝒏
• 𝒑
devient beaucoup plus important que К(n, p)
La loi d’Amdhal peut sous-estimer l’accélération pour des
problème large
16/05/2022
Analyse des performances
Définitions et objectifs
Loi d’Amdhal
Loi de Gustafson-Barsis
Métrique de Karp-Flatt
Métrique d’iso-efficacité
16/05/2022
Analyse des performances
• Gustafson-Barsis:
• Admettons que la taille n du problème augmente avec le nombre de
processeurs p
• La loi d’Amdhal suppose que le taille du problème est fixe
• Soit S la proportion de temps dépensée par un calcul parallèle sur p
processeurs dans le traitement de la partie séquentielle intrinsèque:
𝝈 𝒏
𝑺=
ϕ(n)
𝝈 𝒏 +
𝒑
16/05/2022
Analyse des performances
• Gustafson-Barsis:
ϕ(n)
𝒑
• Alors: 1 – S =
ϕ(n)
𝝈 𝒏 +
𝒑
ϕ(n)
𝝈 𝒏 = (𝝈 𝒏 + )S
𝒑
ϕ(n)
ϕ(n) = (𝝈 𝒏 + ) (1-S) p
𝒑
16/05/2022
Analyse des performances
• Gustafson-Barsis:
𝝈 𝒏 + ϕ(n)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
ϕ(n)
𝝈 𝒏 +
𝒑
ϕ(n)
𝑺 + 𝟏 − 𝑺 𝒑 (𝝈 𝒏 +
𝒑
)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
ϕ(n)
(𝝈 𝒏 +
𝒑
)
16/05/2022
Analyse des performances
• Loi de Gustafson-Barsis: étant donné un programme parallèle de
taille n exécuté sur p processeurs, si S est le temps d’exécution de la
partie séquentielle du calcul alors l’accélération maximale est égale à:
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏𝒎𝒂𝒙𝒊𝒎𝒂𝒍𝒆 𝒏, 𝒑 = 𝒑 + 𝟏 − 𝒑 𝑺
16/05/2022
Analyse des performances
• Discussion: « Gustafson-Barsis »
• Traite les problèmes de plus grande taille en utilisant plus de
processeurs (scaled speed-up)
• Le surcoût du parallélisme est négligé
Surestimation de l’accélération
• La meilleure accélération possible est égale au nombre de
processeurs:
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏 ≤ 𝒑 + 𝟏 − 𝒑 𝑺 ⇒ 𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏 ≤ 𝒑
• Si S=1 c’est qu’il n’y a pas d’accélération
16/05/2022
Analyse des performances
• Exercice 2: « Gustafson-Barsis »
16/05/2022
Analyse des performances
• Exercice 2: « Gustafson-Barsis »
𝑺𝒑𝒆𝒆𝒅𝒖𝒑 ≤ 𝟔𝟒 + 𝟏 − 𝟔𝟒 𝒙 𝟎. 𝟎𝟓 ≈ 𝟔𝟎. 𝟖𝟓
16/05/2022
Analyse des performances
Définitions et objectifs
Loi d’Amdhal
Loi de Gustafson-Barsis
Métrique de Karp-Flatt
Métrique d’iso-efficacité
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »:
• Amdhal et Gustafson-Barsis surestime l’accélération du fait de
l’élimination du surcoût du parallélisme ( К(n, p) = 0 ) .
• La fraction séquentielle déterminée expérimentalement ℮ prend en
considération:
• Le surcoût du parallélisme
• En plus d’autres sources de surcoût:
• Temps de démarrage des processus
• Temps de synchronisation
• Mauvaise répartition de la charge
• Surcoût liée à l’architecture
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »:
• La fraction séquentielle déterminée expérimentalement ℮ est
définie comme suit:
𝝈 𝒏 +К(n, p)
e (n,p) =
𝝈 𝒏 +ϕ(n)
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »:
• Soit A(n,p) l’accélération du programme parallèle mesurée
expérimentalement pour p processeurs:
𝑻(𝒏,𝟏)
A (n,p) =
𝑻(𝒏,𝒑)
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »: Détermination de e en fonction d’une
accélération donnée ?
• Rappel:
• La fraction séquentielle intrinsèque (loi d’Amdhal):
𝝈 𝒏 𝝈 𝒏
𝑺= =
𝝈 𝒏 + ϕ(n) 𝑻(𝒏, 𝟏)
• 𝑶𝒏 𝒆𝒏 𝒅é𝒅𝒖𝒊𝒕: 𝝈 𝒏 = 𝑻 𝒏, 𝟏 𝑺 et ϕ(n) = 𝑻 𝒏, 𝟏 (𝟏 − 𝑺)
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »: Détermination de e en fonction d’une
accélération donnée ?
• Si on ignore le surcoût du parallélisme on obtient:
ϕ(n)
𝑻 𝒏, 𝒑 = 𝝈 𝒏 + (NB: Nous supposons un équilibrage de charge parfait !!)
𝒑
𝑻 𝒏,𝟏 (𝟏 −𝑺)
𝑻 𝒏, 𝒑 = 𝑻 𝒏, 𝟏 𝑺 +
𝒑
• On obtient finalement:
𝑻(𝒏,𝟏) 𝟏
A (n,p) = =
𝑻(𝒏,𝒑) 𝑺+(𝟏 −𝑺)/𝒑
16/05/2022
Analyse des performances
• Métrique de « Karp-Flatt »: Détermination de e en fonction d’une
accélération donnée ?
𝑻(𝒏,𝟏) 𝟏
A (n,p) = =
𝑻(𝒏,𝒑) 𝑺+(𝟏 −𝑺)/𝒑
• Soit e(n,p) la fraction séquentielle déterminée expérimentalement:
• Calculant e(n,p) en fonction de A(n,p) (mesurée expérimentalement):
𝟏 𝟏
−
𝑨(𝒏, 𝒑) 𝒑
e(n,p) =
𝟏
𝟏 −
𝒑
16/05/2022
Analyse des performances
• Exercice 3: Métrique de « Karp-Flatt »:
• L’analyse des performances d’un programme parallèle sur 1, 2, .. 8
processeurs donne les mesures suivantes:
#processeurs 2 3 4 5 6 7 8
16/05/2022
Analyse des performances
• Exercice 3: Métrique de « Karp-Flatt »:
• L’analyse des performances d’un programme parallèle sur 1, 2, .. 8
processeurs donne les mesures suivantes:
#processeurs 2 3 4 5 6 7 8
#processeurs 2 3 4 5 6 7 8
16/05/2022
Analyse des performances
• Exercice 4: Métrique de « Karp-Flatt »:
• L’analyse des performances d’un programme parallèle sur 1, 2, .. 8
processeurs donne les mesures suivantes:
#processeurs 2 3 4 5 6 7 8
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Une bonne capacité au passage à l’échelle est la capacité d’un
programme parallèle à augmenter ses performances au fur et à
mesure que le nombre de processeurs augmente.
• L’iso-efficacité est la mesure de la capacité du programme parallèle à
évoluer (scalability).
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Soit T0 (n,p) le temps total passé par l’ensemble des processus parallèles:
𝑻𝟎 𝒏, 𝒑 = 𝒑 𝒙 𝑻𝒆𝒎𝒑𝒔 𝒑𝒂𝒓𝒂𝒍𝒍è𝒍𝒆 − 𝑻𝒆𝒎𝒑𝒔 𝒔é𝒒𝒖𝒆𝒏𝒕𝒊𝒆𝒍
Soit:
𝑻𝟎 𝒏, 𝒑 = (p −𝟏)𝝈 𝒏 + p К(n, p)
• T0 (n,p) inclut :
• Le temps passé par p-1 processeurs a effectuer le calcul séquentiel intrinsèque
• Le temps passé par tous les processeurs dans les communications et les calculs
redondants
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Soit T0 (n,p) le temps total passé par l’ensemble des processus parallèles:
𝝈 𝒏 + ϕ(n)
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
ϕ(n)
𝝈 𝒏 + + К(n, p)
𝒑
𝒑(𝝈 𝒏 +ϕ(n))
𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
𝝈 𝒏 + ϕ(n) +(𝒑−𝟏)𝝈 𝒏 +pК(n, p)
𝒑(𝝈 𝒏 +ϕ(n))
⇨ 𝑨𝒄𝒄é𝒍é𝒓𝒂𝒕𝒊𝒐𝒏(𝒏, 𝒑) ≤
𝝈 𝒏 + ϕ(n) + 𝑻𝟎 𝒏,𝒑
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Soit T (n,1) le temps du calcul séquentiel pour résoudre le problème:
Rappel:
𝑻𝒆𝒎𝒑𝒔 𝒅′ 𝒆𝒙é𝒄𝒖𝒕𝒊𝒐𝒏 𝒔é𝒒𝒖𝒆𝒏𝒕𝒊𝒆𝒍𝒍𝒆
• Efficacité (Efficiency) =
𝑵𝑩𝑷𝒓𝒐𝒄𝒆𝒔𝒔𝒆𝒖𝒓𝒔𝑼𝒕𝒊𝒍𝒊𝒔é𝒔 ∗ 𝑻𝒆𝒎𝒑𝒔 𝒅′ 𝒆𝒙é𝒄𝒖𝒕𝒊𝒐𝒏 𝒑𝒂𝒓𝒂𝒍𝒍é𝒍𝒆
𝝈 𝒏 +ϕ(n)
• Efficacité 𝑛, 𝑝 ≤
𝒑(𝝈 𝒏 +
ϕ(n)+К(n, p))
𝒑
𝟏 𝟏
⇨ Efficacité 𝑛, 𝑝 ≤ ≤
𝟏+
T0 (n,p) 𝟏+
T0 (n,p)
𝝈 𝒏 + ϕ(n) T (n,1)
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Soit T (n,1) le temps du calcul séquentiel pour résoudre le problème:
𝑻𝒆𝒎𝒑𝒔 𝒅′ 𝒆𝒙é𝒄𝒖𝒕𝒊𝒐𝒏 𝒔é𝒒𝒖𝒆𝒏𝒕𝒊𝒆𝒍𝒍𝒆
Rappel: Efficacité (Efficiency) = 𝑵𝑩 ∗ 𝑻𝒆𝒎𝒑𝒔 𝒅′ 𝒆𝒙é𝒄𝒖𝒕𝒊𝒐𝒏 𝒑𝒂𝒓𝒂𝒍𝒍é𝒍𝒆
𝑷𝒓𝒐𝒄𝒆𝒔𝒔𝒆𝒖𝒓𝒔𝑼𝒕𝒊𝒍𝒊𝒔é𝒔
𝟏 𝟏
Efficacité 𝑛, 𝑝 ≤ ≤
𝟏+
T0 (n,p) T
𝟏+ 0
(n,p)
𝝈 𝒏 + ϕ(n) T (n,1)
Efficacité 𝑛,𝑝
⇨ 𝑇 𝑛, 1 ≥ T (n,p)
1 −Efficacité 𝑛,𝑝 0
16/05/2022
Analyse des performances
• Métrique d’iso-efficacité:
• Notons:
• Ɛ(n,p) l’efficacité du programme
Ɛ(n,p)
• 𝑪= , constante d’efficacité (Ɛ(n,p) constante)
𝟏 − Ɛ(n,p)
16/05/2022
Analyse des performances
• Exercice 5: Métrique d’iso-efficacité
• Algorithme de réduction
• Définition: Un algorithme de réduction est un algorithme qui permet
de transformer un algorithme complexe en un ou plusieurs instances
d’un autre problème plus simple.
• Réduction séquentielle: O(n)
• Réduction parallèle: O(log(p))
16/05/2022
Analyse des performances
• Exercice 5: Métrique d’iso-efficacité
• Algorithme de réduction
• Définition: Un algorithme de réduction est un algorithme qui permet
de transformer un algorithme complexe en un ou plusieurs instances
d’un autre problème plus simple.
• Réduction séquentielle: O(n)
• Réduction parallèle: O(log(p))
• Le temps séquentiel: T(n,1) = n
• Chacun des processeurs participe à ce calcul : 𝑻𝟎 𝒏, 𝒑 = O(plog(p))
𝒏 ≥ 𝑪 plog(p)
16/05/2022
Analyse des performances
• Exercice 6: Métrique d’iso-efficacité
• Méthode des différences finies: est une technique courante de recherche
de solutions approchées d’équations aux dérivées partielles qui consiste à
résoudre un système liant les valeurs des fonctions inconnues en certains
points suffisamment proches les uns des autres.
• Le problèmes est résolu en grille de taille : nxn
𝑛 𝑛
• Chaque processeur est responsable d’une sous grille de taille: x
𝑝 𝑝
• A chaque étape chaque processeur envoie à𝑛ses voisins des valeurs approximatives;
Une communication nécessite un temps: o( )
𝑝
• Quelle les la relation d’efficacité nécessaire pour une meilleure scalabilité
du problème?
16/05/2022
Supplément
• Rappel sur le calcul de la complexité algorithmique
16/05/2022
Supplément: Complexité
Complexité: La complexité d’un algorithme est le nombre
d’opérations élémentaires qu’il doit effectuer pour mener à bien un
calcul en fonction de la taille des données d’entrée.
Augmentation du temps de calcul d’un algorithme en fonction de la taille des
données
16/05/2022
Supplément: Complexité
Complexité: Taille des données
• Nombre d’éléments
• Nombre de bits nécessaires à la représentation des données
• Polynômes : le degré, le nombre de coefficients non nuls
• Matrices m × n : max(m,n), m.n, m + n ;
• Graphes : nombre de sommets, nombre d’arcs, produit des deux
• Listes, tableaux, fichiers : nombre de cases, d’éléments ;
• Mots : leur longueur
16/05/2022
Supplément: Complexité
Complexité: Temps de calcul
• Quantité de données
• Leur encodage : représentation
• Qualité du code engendré par le compilateur
• Nature et la rapidité des instructions du langage
• Qualité de la programmation
• Efficacité de l’algorithme (Augmentation du temps de calcul en fonction de la
taille des données )
16/05/2022
Supplément: Complexité
Complexité: Temps de calcul
• Quantité de données
• Leur encodage : représentation
• Qualité du code engendré par le compilateur
• Nature et la rapidité des instructions du langage
• Qualité de la programmation
• Efficacité de l’algorithme (Augmentation du temps de calcul en fonction de la
taille des données )
16/05/2022
Supplément: Complexité
Complexité: Temps de calcul:
Nombre d’opérations fondamentales à exécuter
• Opérations fondamentales
16/05/2022
Supplément: Complexité
Complexité: Temps de calcul:
Complexité temporelle coût de l’ensemble des opérations en temps
• Solution 1: Multiplier le nombre d’opérations par le coût moyen de toutes les
opérations
• Solution 2: pour un algorithme avec essentiellement des calculs numériques,
compter les opérations coûteuses (multiplications, racine, exponentielle, …)
• Solution 3: compter le nombre d’appels à l’opération la plus fréquente
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme:
Complexité dans le meilleur cas
Complexité en moyenne
Complexité dans le pire cas: le plus utilisé
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme: Complexité dans le pire cas
Elle est donnée par :
MaxA (n) = max {coûtA (d ) / d∈ Dn } .
• C’est cette complexité qui est généralement calculée car c’est une
borne supérieure du temps d’exécution associé à une entrée
quelconque
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme: Complexité dans le pire cas
• Calcul du factoriel
FACTORIEL (n)
entrée : un entier n
sortie : n!
1. Si n = 0
2. alors résultat ← 1
3. sinon
4. résultat ← n × FACTORIEL(n−1)
5. fin si
6. retourne résultat
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme: Complexité dans le pire cas
• Calcul du factoriel
• Soit T(n) le temps d’exécution en fonction de l’argument n (c1: test, c2 :
multiplication).
FACTORIEL (n=1):
T(0) = c1
T(1) = c1 + c2
T(n) = c1 + c2 + T(n-1)
T(n) = c1 + c2 + (c1 + c2 + T(n-2))
…
T(n) = (n -1)c1 + (n-2)c2 + (T(n – (n-1)))
T(n) = n c1 + (n-1)c2
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme: Complexité dans le pire cas
• Calcul du factoriel
• Soit T(n) le temps d’exécution en fonction de l’argument n (c1: test, c2 :
multiplication).
FACTORIEL (n=1):
T(0) = c1
T(1) = c1 + c2
Supposons que: T(n) = c1 + c2 + (n-1) (c1 + c2 ) pour n>=1
On a:
T(n+1) = c1 + c2 + T(n)
T(n+1) = c1 + c2 + c1 + c2 + (n-1) (c1 + c2 )
T(n+1) = c1 + c2 + n(c1 + c2)
Récurrence: Comme c’est vrai pour n=1 et n+1 c’est vrai quelque soit n
16/05/2022
Supplément: Complexité
Calcul de la complexité d’un algorithme: Complexité dans le pire cas
• Calcul du factoriel
• Soit T(n) le temps d’exécution en fonction de l’argument n (c1: test, c2 :
multiplication).
FACTORIEL (n=1):
T(0) = c1
T(1) = c1 + c2
Supposons que: T(n) = c1 + c2 + (n-1) (c1 + c2 ) pour n>=1
On a: Complexité = O(n)
T(n+1) = c1 + c2 + T(n)
T(n+1) = c1 + c2 + c1 + c2 + (n-1) (c1 + c2 )
T(n+1) = c1 + c2 + n(c1 + c2)
Récurrence: Comme c’est vrai pour n=1 et n+1 c’est vrai quelque soit n
16/05/2022
Supplément: Complexité
Exercice: Calcul de la complexité
On considère, pour effectuer la recherche d’un élément dans un tableau, la
recherche séquentielle et la recherche dichotomique. On s’intéresse à leur
complexité temporelle.
Pour cela, considérer un tableau ayant mille éléments (version trié, et
version non trié).
1. Pour chaque algorithme, et pour chaque version du tableau, combien de
comparaisons sont à effectuer pour :
a) Trouver un élément qui y figure ?
b) Trouver un élément qui n'y figure pas ?
2. Quels sont les cas où le tableau est parcouru complètement et les cas où
un parcours partiel est suffisant ?
3. Conclure en donnant la complexité temporelle pour chaque algorithme
16/05/2022
Supplément: Complexité
Exercice: Calcul de la complexité
Opérations élémentaires retenues: les comparaisons
1. Recherche séquentielle dans un tableau de 1000 éléments non trié
11. élément ne s’y trouvant pas (complexité au pire) : 1000 comparaisons (tableau est parcouru
complètement)
12. élément qui s’y trouve (complexité moyenne) : n/2=500 comparaisons (parcours partiel
suffisant)
• Algorithme en O(n)
2. Recherche séquentielle dans un tableau trié
13. élément ne s’y trouvant pas (complexité au pire) : 1000 comparaisons (parcours
partiel suffisant)
14. élément qui s’y trouve (complexité moyenne) : n/2=500 comparaisons (parcours
partiel suffisant)
• Algorithme en O(n)
3. Recherche dichotomique (dans un tableau non trié): impossible
16/05/2022
Questions
16/05/2022