Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Info0604Programmation multi-threadée
Pierre DelisleUniversité de Reims Champagne-Ardenne
Département de Mathématiques et Informatique18 janvier 2017
Cours 1
Présentation du moduleOrganisationIntroduction
Info0604 Cours 1 2
Pierre Delisle
● Maître de Conférences du département de Math-Info de l'URCA
● Mail– [email protected]
● Site Web– http://cosy.univ-reims.fr/~pdelisle
Info0604 Cours 1 3
Plan du cours
● Description du module– Objectifs, pré-requis
– Organisation
● Introduction– Parallélisme ?
– À la recherche du parallélisme
– Architectures
– Langages de programmation
Info0604 Cours 1 4
Objectifs du module
● Objectif général– Acquérir des connaissances théoriques et pratiques
de base en programmation multi-core
● Compétences spécifiques– Parallélisation mémoire partagée d'applications
séquentielles
– Conception d'applications parallèles
– Programmation pThreads, Java Threads
Info0604 Cours 1 5
Pré-requis
● Info0301 : Programmation en langage C● Info0302 : Systèmes d'exploitation● Moi0304/Info0305 : Linux
● Info0401 et Info0501 sont bons à connaître aussi !
Info0604 Cours 1 6
Organisation
● CM : 5 x 2 heures– Mercredi 14h00-16h00
● TD : 5 x 2 heures– S6O6 + S6O5b : Mardi 14h00-16h-00
– S6O7 : Mercredi 8h00-10h00
– À partir de la semaine 4
● TP : 5 x 2 heures– À partir de la semaine 5
– EDT bientôt disponibles sur le bureau virtuel...
Info0604 Cours 1 7
Évaluation
● Projet : 40 %– Application, rapport et soutenance orale
● DST : 60 %
Info0604 Cours 1 8
Structure du module
● Introduction au parallélisme– Architectures, Algorithmes, Programmation
● Algorithmique parallèle– Parallélisation, conception
● Programmation multi-threadée– Processus et threads
– Programmation asynchrone
– Pthreads (mutex, variables de condition, ...)
– Modèles de programmation multi-thread
Info0604 Cours 1 9
Introduction au parallélisme
Qu'est-ce que le parallélisme ?À la recherche du parallélisme...
Architectures parallèlesLangages de programmation
Info0604 Cours 1 10
Exercice 1
Comptables.....
Info0604 Cours 1 11
Les limites du mono-processeur
● L'augmentation de la vitesse d'un processeur devient de plus en plus coûteuse et les gains sont de plus en plus limités
● Pourtant, les besoins ne diminuent pas !● Une solution
– dupliquer les unités de calcul
● Difficultés– Dégager la concurrence des codes d'application
– Gérer les communications/accès mémoire
Info0604 Cours 1 12
Qu'est-ce que le parallélisme ?
● Exécution d’un algorithme en utilisant plusieurs processeurs plutôt qu’un seul
● Division d’un algorithme en tâches pouvant être exécutées en même temps sur des processeurs différents
● Le but : réduire le temps de résolution d’un problème un utilisant un ordinateur parallèle
● 3 niveaux d’abstraction– Architectures, Algorithmes, Programmation
Info0604 Cours 1 13
Architectures parallèles
● Ordinateur parallèle : ordinateur comportant plusieurs processeurs et supportant la programmation parallèle
● Plusieurs types d’architectures– Distribuées
– Centralisées
● Modèles d’architecture : simplification du fonctionnement des ordinateurs parallèles– Taxonomie de Flynn
Info0604 Cours 1 14
Taxonomie de Flynn
● SISD : Single Instruction Single Data– Ordinateurs séquentiels
● SIMD : Single Instruction Multiple Data– Tableaux de processeurs (arrays)
– Ordinateurs vectoriels en pipelilne
● MISD : Multiple Instruction Single Data– Tableaux systoliques (systolic array)
● MIMD : Multiple Instruction Multiple Data– Multiprocesseurs et Multi-Ordinateurs
Info0604 Cours 1 15
Algorithmique parallèle
● Approches de résolution de problèmes dans un contexte d’exécution parallèle
● Modèles algorithmiques : contextes d’exécution parallèle simplifiés pour faciliter la conception– PRAM
● Analyse théorique de la performance
Info0604 Cours 1 16
Programmation parallèle
● Programmation dans un langage permettant d’exprimer le parallélisme dans une application réelle
● Différents niveaux d’abstraction possibles● La parallélisation automatique serait la solution
idéale, mais c’est très difficile● La façon de programmer n’est pas
indépendante de la machine utilisée
Info0604 Cours 1 17
Bref historique du parallélisme
● …-1970 : Accessible presque uniquement aux gouvernements (défense), très coûteux
● 1970 – 1980 : Grosses entreprises (pétrole, automobile)
● 1980 – 1990 : premières machines parallèles « abordables » (microprocesseurs, VLSI)– Ordinateurs parallèles très performants, mais très
peu flexibles
– PROBLÈMES : programmation, portabilité
Info0604 Cours 1 18
Bref historique du parallélisme (suite)
● 1990 - 2000 : Machines basées sur le regroupement de PC répandus commercialement (Beowulf)
● 2000 - … : SMP, clusters, CC-NUMA, Grilles de calcul
● Depuis quelques années : processeurs multi-coeur
Info0604 Cours 1 19
Le parallélisme aujourd'hui
● Constats– Le parallélisme devient de plus en plus accessible
– Les environnements de développement deviennent de plus en plus conviviaux
● Cependant...– Il reste du travail à faire
Besoin d'intelligence ! Besoin de solutions logicielles performantes et portables
Info0604 Cours 1 20
Vue d'ensemble du calcul parallèle du début des années 2000
Architectures concrètes
SMP CC-NUMA Myrinet ATM
Cluster
Distributed Shared Memory (DSM)
Mémoire partagée (Shared memory)
Passage de messages(Message passing()
Threads
Pthreads Java Threads OpenMP MPI PVM
Applications
Info0604 Cours 1 21
Enjeux importants du parallélisme
● Situation idéale : transparence– Le système dégage le parallélisme à partir d’un
programme séquentiel
– Idéal, mais très difficile
● Situation à éviter : multiplicité inutile– Coûts de conception/développement importants
● Compromis nécessaire entre la facilité de conception/développement et la performance
● Favoriser la portabilité des applications
Info0604 Cours 1 22
À la recherche du parallélisme...
Graphe de dépendanceParallélisme de donnéesParallélisme de tâchesParallélisme en pipeline
Info0604 Cours 1 23
Graphe de dépendance
● Permet de représenter visuellement le parallélisme d’un algorithme (exemple)
● Sommet = tâche● Arc = Relation de dépendance
A
B
D E
GF
C
Info0604 Cours 1 24
Parallélisme de données
● Présent lorsque des tâches indépendantes appliquent la même opération sur différents éléments d’un ensemble de données
Pour i = 1 à 100
Lire (b[i], c[i])
Pour i = 1 à 100
a[i] = b[i] + c[i]
Pour i = 1 à 100
Écrire (b[i], c[i])
A
B B B
C
A
B
C
Info0604 Cours 1 25
Parallélisme de tâches
● Présent lorsque des tâches indépendantes appliquent des opérations différentes sur des données (différentes ou non)
a = 2
b = 3
c = 3
m = (a + c) / 2
s = (a2 + b2) / 2
v = s – m2
Graphe de dépendance ?
Info0604 Cours 1 26
Parallélisme en pipeline
● Diviser un algorithme strictement séquentiel en phases
● Résoudre plusieurs instances de problèmes à la chaîne
● La sortie (output) d’une phase représente l’entrée (input) de la phase suivante
Sablage Peinture Cirage S P C
S P C
S P C
S P C
Parallélisme
Info0604 Cours 1 27
Exemple 1
● Entreprise d'entretien ménager...
Info0604 Cours 1 28
Architectures parallèles
Multi-ordinateursMultiprocesseurs
Info0604 Cours 1 29
Multi-ordinateur
● La mémoire est physiquement distribuée entre les processeurs
● Logiquement, espaces d'adressage disjoints● Chaque processeur n'a accès qu'à sa mémoire
locale● Interactions entre processeurs effectuées par
passage de messages● Clusters, réseaux de stations, ...
Info0604 Cours 1 30
Multi-ordinateur
● La machine parallèle est composée de plusieurs ordinateurs possédant– Un système d'exploitation
– Des programmes
– Un point d'entrée
UtilisateurRéseau d’interconnexion
Ordinateur
Ordinateur
OrdinateurMulti-ordinateur
Ordinateur
Ordinateur
Ordinateur
Utilisateur
Info0604 Cours 1 31
Multiprocesseur
● Ordinateur comprenant plusieurs processeurs● Mémoire partagée● Les caches réduisent la charge sur le bus et/ou
la mémoire● Les processeurs communiquent par des
lectures/écritures sur des variables en mémoire partagée (physiquement ou virtuellement)
● SMP, Multi-coeur, ...
Info0604 Cours 1 32
Multiprocesseur centralisé/distribué
Centralisé Distribué
Partage physique Partage Virtuel
Cache
CPU
Cache
CPU
Cache
CPU
Bus
Mémoire principale
Réseau d’interconnexion
Cache
CPU
Mémoire
E/S
Cache
CPU
Mémoire
E/S
Entrées /Sorties
Info0604 Cours 1 33
Architecture multi-coeur
● Processeur → au moins 2 unités de calcul● Augmentation de la puissance de calcul sans
augmentation de la fréquence d'horloge– Réduction de la dissipation thermique
● Augmentation de la densité– Comme les coeurs sont sur le même support, la
connectique reliant à la carte mère ne change pas
Info0604 Cours 1 34
Exemples de processeurs multi-coeur
● Architectures Quad-Core
Info0604 Cours 1 35
Architecture des caches
Info0604 Cours 1 36
Partage des caches
● Pas de partage de caches– Pas de contention entre les unités de calcul
– Communication et migration plus coûteuses Passage systématique par la mémoire centrale
● Partage du cache– Communication plus rapide entre unités de calcul
– Migration plus facile → on ne passe pas par la mémoire centrale
– Problème de contention au niveau des caches
– Problème de cohérence de cache !
Info0604 Cours 1 37
Émergence d'une nouvelle architecture : les GPU
● GPU : Graphic Processor Unit● Architecture massivement parallèle● Traditionellement utilisé pour le calcul
graphique● On commence à les utiliser pour le calcul
« générique »– API CUDA → Nvidia
– API ATI Stream → ATI
– API générique → OpenCL
Info0604 Cours 1 38
Architecture GeForce 8800
Info0604 Cours 1 39
Taille des ordinateurs parallèles
● « Petits » ordinateurs parallèles– 2 < Nombre de processeurs < 64
– Typiquement de type Multiprocesseurs (SMP et multi-core)
– Vue globale de la mémoire, cohérence de cache
● « Grands ordinateurs parallèles »– 64 < Nombre de processeurs < plusieurs centaines
– Typiquement de type Multi-ordinateur
– Souvent des clusters de SMP
Info0604 Cours 1 40
Romeo I (2002)
● SMP 24 X UltraSparc III 900 Mhz● 24 Go RAM● 210 Go d'espace disque
Info0604 Cours 1 41
Romeo II (2007)
● Centre de calcul régional Champagne-Ardenne● 8 noeuds de calcul● Noeuds SMP de 4 à 16 processeurs
– Procs 1.6 Ghz Dual-core (8 à 32 coeurs par noeud)
● Entre 16 Go et 128 Go RAM par noeud● 20 disques de 146 Go chacun (2.9 To)● Coût ?
– Matériel, locaux, climatisation, support, ..., ..., ...
Info0802 Cours 1 42
Romeo II (2007)
Info0604 Cours 1 43
Architecture Romeo II
Info0802 Cours 1 44
Clovis – Romeo III (2010)
● 41 noeuds de calcul– 39 noeuds : 12 coeurs – 24 Go RAM
– 2 noeuds : 32 coeurs – 64 Go RAM
– Processeurs 2.6 Ghz Quad-core
● 532 coeurs et 1,064 To de mémoire au total● 10 To de disque● 1 noeud dédié GPGPU (2 cartes Nvidia C2050)
Info0802 Cours 1 45
Clovis – Romeo III (2010)
Info0802 Cours 1 46
Romeo IV (2013)
● 130 nœuds de calcul– 16 cœurs de calcul par nœud
– 2 accélérateurs GPU par nœud
– 32 Go de mémoire par nœud
● 245 To de disque
Info0604 Cours 1 47
Programmation parallèle
Mémoire distribuéeMémoire partagée
Info0604 Cours 1 48
Programmation mémoire distribuée
● Modèle à passage de messages– Processeurs attribués à des
processus distincts
– Chaque processeur possède sa propre mémoire
– Communications par envois et réception de messages
● Languages– PVM, MPI
Info0604 Cours 1 49
Exemple de programme C/MPI
#include <stdio.h>#include <mpi.h> /*bibliotheque MPI*/int main(int argc, char *argv[]) { int i; int id; int val; int somme;
MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &id); MPI_Comm_size(MPI_COMM_WORLD, &p); val = id + 1; MPI_Reduce(&val, &somme, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (id == 0) { printf("La reduction des valeurs donne %d\n", somme); } MPI_Finalize(); return 0;}
Info0604 Cours 1 50
Programmation mémoire distribuée
● Le succès de l'approche par passage de messages a contribué significativement au développement du parallélisme depuis ~15 ans
● L'intérêt pour le calcul parallèle s'est généralisé– Bassin d'utilisateurs plus vaste
– Chercheurs et industriels dans différents domaines, pas tous des spécialistes en info/parallélisme !
– Besoin d'environnements plus facile à utiliser
● Émergence SMP et procs multi-core
Info0604 Cours 1 51
Modèle à mémoire partagée
● Plusieurs procs s'exécutent en parallèle● Processus attribués à des processeurs distincs● Mémoire partagée (physiquement ou
virtuellement)● Communications
par lectures/écritures
dans la mémoire
partagée
Info0604 Cours 1 52
Modèle à mémoire partagée
● Particulièrement adapté aux architectures à mémoire partagée (de type SIMD et MIMD)– Multiprocesseurs
– Processeurs multi-core
● 2 principales représentations :– Threads
– Fork/Join
Info0604 Cours 1 53
Modèle de threads
● Programme : ensemble de processus légers (threads) qui coopèrent afin de réaliser un objectif commun
● Thread : entité logique, fonction, correspondant à une partie de programme– pouvant s’exécuter indépendamment des autres
parties– pouvant s’exécuter de façon concurrente– possédant des données locales et globales
Info0604 Cours 1 54
Modèle de threads
● Un programme écrit sous forme de threads peut être exécuté séquentiellement– Pseudo-parallélisme– Partage du temps CPU entre les threads durant
l’exécution– Changements de contexte (context switchs)
● Ce même programme peut aussi être exécuté de façon réellement parallèle– Répartition des threads sur les processeurs– Un ou plusieurs threads par processeur
Info0604 Cours 1 55
Modèle de threads
● Communication par les données globales stockées dans la mémoire qui est partagée
● Fonctionnalités pour– La gestion des threads (création, destruction, etc.)
– L’ordonnancement et l’état des threads (actif, exécutable, en exécution, en veille, etc.)
– La synchronisation (sémaphores, barrières, etc.)
Info0604 Cours 1 56
Modèle fork/join
● Thread maître– Exécution du code séquentiel– Débute et termine l’exécution– Fork : création de threads esclaves
● Threads esclaves– Exécutent la portion parallèle– Join : destruction des esclaves et retour
du contrôle au maître● Le nombre de threads peut varier
durant l’exécution
Thread maître
Fork
Join
Fork
Join
Info0604 Cours 1 57
Caractéristiques du modèle
● Facilité de programmation – Transparence– Ressemble beaucoup au modèle séquentiel
– Communications « indirectes » généralement plus faciles à gérer que le passage de messages
● La gestion des synchronisations doit se faire autrement que par des messages– Régions critiques
– Barrières
– Sémaphores
Info0604 Cours 1 58
Caractéristiques du modèle
● Problème de localité des données– Structurer le code pour tirer profit des caches
– Exemple : inversion ligne/colonne d’une matrice
● Efficacité non garantie– La transparence facilite la tâche du programmeur,
mais l’optimisation de la performance est plus difficile
– L’organisation matérielle de la mémoire peut avoir un impact important pour le même code sur 2 machines
Info0604 Cours 1 59
Développement d’applications basées sur le modèle à mémoire partagée
● Principaux modèles de programmation– Modèles de threads
Pthreads -> largement utilisé dans les bibliothèques des systèmes de type UNIX
Java Threads -> extension du langage Java qui encapsule une classe Thread
– Programmation à mémoire partagée structurée (Structured Shared-Memory Programming)
OpenMP
Info0604 Cours 1 60
Hello World ! En C/OpenMP
#include <stdio.h>#include <omp.h>
int main(int argc, char *argv[]) { int id;
omp_set_num_threads(atoi(argv[1])); #pragma omp parallel private (id) { id = omp_get_thread_num(); printf("Hello, world, du processus %d !\n", id); } return 0;}
Info0604 Cours 1 61
La semaine prochaine
pthreads