0% ont trouvé ce document utile (0 vote)
253 vues37 pages

Cours 1 - Introduction

Ce document présente les objectifs et le plan d'un cours sur les systèmes concurrents. Il introduit la nature des programmes concurrents et les défis posés par la conception de tels programmes par rapport à la programmation séquentielle, en raison de l'exécution simultanée d'activités et de leur interdépendance.

Transféré par

Mouhamed Rassoul Gueye
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
253 vues37 pages

Cours 1 - Introduction

Ce document présente les objectifs et le plan d'un cours sur les systèmes concurrents. Il introduit la nature des programmes concurrents et les défis posés par la conception de tels programmes par rapport à la programmation séquentielle, en raison de l'exécution simultanée d'activités et de leur interdépendance.

Transféré par

Mouhamed Rassoul Gueye
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 37

Systèmes concurrents

Philippe Quéinnec

Département Informatique et Mathématiques appliquées


ENSEEIHT

18 septembre 2017

Systèmes concurrents 1 / 37
Objectifs de la matière

Objectif
Être capable de comprendre et développer des applications
parallèles (concurrentes)

→ modélisation pour la conception de programmes parallèles


→ connaissance des schémas (patrons) essentiels
→ raisonnement sur les programmes parallèles : exécution,
propriétés
→ pratique de la programmation parallèle avec un environnement
proposant les objets/outils de base
pour la programmation d’activités concurrentes (gros grain) :
Java, principalement
pour la programmation parallèle (grain fin) : OpenMP
Organisation de la matière
Cours (40%) : définitions, principes, modèles
TD (20%) : conception et méthodologie
TP (30%) : implémentation des schémas et principes
Evaluation
BE OpenMP
Projet (10%) application de synthèse : réalisation d’un service
de support à la programmation concurrente, parallèle ou
répartie.
Travail en groupe de 3 ± 1 (selon le thème du projet)
présentation mi-octobre
suivi + points d’étape réguliers
rendu final début janvier
Examen : écrit, sur la conception de systèmes concurrents.
Page de l’enseignement :
http://queinnec.perso.enseeiht.fr/Ens/sc.html
http://moodle-n7.inp-toulouse.fr
Contact : [email protected], [email protected]
Plan du cours

1 Introduction : problématique
2 Exclusion mutuelle
3 Synchronisation à base de sémaphores
4 Interblocage
5 Synchronisation à base de moniteur
6 API Java, Posix Threads
7 Processus communicants – Ada
8 Transactions – mémoire transactionnelle
9 Synchronisation non bloquante
10 Calcul parallèle : OpenMP, etc [A.Buttari]

Systèmes concurrents 4 / 37
Activités concurrentes
Conception
Avantages/inconvénients

Première partie

Introduction

Systèmes concurrents 5 / 37
Activités concurrentes
Conception
Avantages/inconvénients

Contenu de cette partie

Nature et particularités des programmes concurrents


⇒ conception et raisonnement systématiques et rigoureux
Modélisation des systèmes concurrents
Points clés pour faciliter la conception des applications
concurrentes
Intérêt et limites de la programmation parallèle
Mise en œuvre de la programmation concurrente sur les
architectures existantes

Systèmes concurrents – Introduction 6 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Plan

1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités

2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?

3 Avantages/inconvénients

Systèmes concurrents – Introduction 7 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Le problème

Ouvrier
Récepteur travaux urgents

Ouvrier Résultats
Livreur
Récepteur (émetteur)
Ouvrier
Récepteur travaux normaux
Ouvrier

coopération : les activités  se connaissent 

compétition : les activités  s’ignorent 

vitesse d’exécution arbitraire

Systèmes concurrents – Introduction 8 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Intérêt de la programmation concurrente

Facilité de conception
le parallélisme est naturel sur beaucoup de systèmes
temps réel : systèmes embarqués, applications multimédia
mode de fonctionnement : modélisation et simulation de
systèmes physiques, d’organisations, systèmes d’exploitation
Pour accroı̂tre la puissance de calcul
algorithmique parallèle et répartie
Pour faire des économies
mutualisation de ressources coûteuses via un réseau
Parce que la technologie est mûre
banalisation des systèmes multi-processeurs, des stations de
travail/ordinateurs en réseau, services répartis

Systèmes concurrents – Introduction 9 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Nécessité de la programmation concurrente

La puissance de calcul monoprocesseur atteint un plafond


l’augmentation des performances d’un processeur dépend
directement de sa fréquence d’horloge f
l’énergie consommée et dissipée augmente comme f 3
→ une limite physique est atteinte depuis quelques années
Les gains de parallélisme au niveau mono-processeur sont
limités : processeurs vectoriels, architectures pipeline, GPU
conviennent mal à des calculs irréguliers/généraux
La loi de Moore reste valide : la densité des transistors double
tous les 18 à 24 mois

Les architectures multiprocesseurs sont (pour l’instant) le principal


moyen d’accroı̂tre la puissance de calcul

Systèmes concurrents – Introduction 10 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Concurrence vs parallélisme

Parallélisme
Exécution simultanée de plusieurs codes.

Concurrence
Structuration d’un programme en activités ± indépendantes qui
interagissent et se coordonnent.
Pas de concurrence Concurrence
Pas de parallélisme prog. séquentiel multi-activités
sur un mono-processeur
Parallélisme parallélisation multi-activités
automatique / sur un multi-processeurs
implicite

Systèmes concurrents – Introduction 11 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Différence avec la programmation séquentielle


Activités ± simultanées ⇒ explosion de l’espace d’états
P1 P2
for i := 1 to 10 for j := 1 to 10
print(i) print(j)

P1 seul → 10 états ,
P1 k P2 → 10 x 10 = 100 états /
P1 ; P2 → 1 exécution ,
P1 k P2 → 184756 exécutions /
Interdépendance des activités
logique : production/utilisation de résultats intermédiaires
chronologique : disponibilité des résultats
⇒non déterminisme

⇒ nécessité de méthodes et d’outils (conceptuels et logiciels) pour


le raisonnement et le développement
Systèmes concurrents – Introduction 12 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Composants matériels

Architecture d’un ordinateur :


Processeurs
Mécanisme d’interconnexion
Mémoire et caches

Systèmes concurrents – Introduction 13 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Processeur

Vision simpliste : à chaque cycle, le processeur exécute une


instruction machine à partir d’un flot séquentiel (le code).
En pratique :
pipeline : plusieurs instructions en cours dans un même cycle :
obtention, décodage, exécution, écriture du résultat
superscalaire : plusieurs unités d’exécution
instructions vectorielles
réordonnancement (out-of-order)

Systèmes concurrents – Introduction 14 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Interconnexion

Bus unique
interconnecte des processeurs entre eux
interconnecte les processeurs et la mémoire
interconnecte les processeurs et des unités d’E/S
médium à diffusion : usage exclusif
Plusieurs bus dédiés
Mini réseaux locaux (parallélisme massif)
Réseaux locaux classiques (système réparti)

Systèmes concurrents – Introduction 15 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Mémoire
La mémoire et le processeur sont éloignés : un accès mémoire est
considérablement plus lent que l’exécution d’une instruction (peut
atteindre un facteur 100 dans un ordinateur, 10000 en réparti).
Principe de localité :
temporelle si on utilise une adresse, on l’utilisera probablement
de nouveau dans peu de temps
spatiale si on utilise une adresse, on utilisera probablement
une adresse proche dans peu de temps
⇒ conserver près du CPU les dernières cases mémoire accédées
⇒ Cache : mémoire rapide proche du processeur

Plusieurs niveaux de caches : de plus en plus gros, de moins en


moins rapides (actuellement 3 niveaux).
CPU Cache L1 Cache L2 Mémoire

Systèmes concurrents – Introduction 16 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Cache

Différents principes de placement dans le cache (associatif,


mappé, k-associatif. . . )
Différentes stratégies de remplacement (LRU - least recently
used. . . )
Différentes stratégies d’invalidation - cohérence mémoire

Systèmes concurrents – Introduction 17 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Architecture multi-processeurs
Multi-processeurs  à l’ancienne  :
Bus
CPU Cache L1 Cache L2

CPU Cache L1 Cache L2


Mémoire
CPU Cache L1 Cache L2

CPU Cache L1 Cache L2

Multi-processeurs multi-cœurs :
CPU Cache L1
Cache L2
CPU Cache L1
Mémoire
CPU Cache L1
Cache L2
CPU Cache L1

Systèmes concurrents – Introduction 18 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Architecture multi-processeurs

SMP Symmetric multiprocessor : une mémoire + un


ensemble de processeurs
CPU
CPU RAM
CPU
NUMA Non-Uniform Memory Access : un graphe
d’interconnexion de {CPU+mémoire}
CPU CPU CPU
RAM RAM RAM

CPU CPU CPU


RAM RAM RAM

CC-NUMA Cache-Coherent Non-Uniform Memory Access

Systèmes concurrents – Introduction 19 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Écritures en mémoire

Comme fonctionne l’écriture d’une case mémoire en présence de


caches ?
Write-Through diffusion sur le bus à chaque valeur écrite
+ visible par les autres processeurs ⇒ invalidation
des valeurs passées
+ la mémoire et le cache sont cohérents
− trafic inutile : écritures répétées, écritures de
variables privées au thread
Write-Back diffusion uniquement à l’éviction de la ligne
+ trafic minimal
− cohérence cache - mémoire - autres caches ?

Systèmes concurrents – Introduction 20 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Cohérence mémoire
Si un processeur écrit la case d’adresse a1 , quand les autres
processeurs verront-ils cette valeur ? Si plusieurs écritures
consécutives en a1 , a2 . . . , sont-elles vues dans cet ordre ? Et les
lectures indépendantes d’une écriture ?
Règles de cohérence mémoire
Cohérence séquentielle le résultat d’une exécution parallèle est le
même que celui d’une exécution séquentielle qui
respecte l’ordre partiel de chacun des processeurs.
Cohérence PRAM (pipelined RAM ou fifo) les écritures d’un
même processeur sont vues dans l’ordre où elles ont
été effectuées ; des écritures de processeurs différents
peuvent être vues dans des ordres différents.
Cohérence  lente  (slow consistency) : une lecture retourne une
valeur précédemment écrite, sans remonter dans le
temps.
Systèmes concurrents – Introduction 21 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Cohérence Mémoire – exemple

Init : x = 0 ∧ y = 0

Processeur P1 Processeur P2
(1) x ← 1 (a) y ← 1
(2) t1 ← y (b) t2 ← x

Un résultat t1 = 0 ∧ t2 = 0 est possible en cohérence PRAM et


slow, impossible en cohérence séquentielle.

Systèmes concurrents – Introduction 22 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Activité

Activité/processus/tâches/threads/processus légers/. . .
exécution d’un programme séquentiel
entité logicielle
exécutable par un processeur
interruptible et commutable

Systèmes concurrents – Introduction 23 / 37


Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Interaction par mémoire partagée

Système centralisé multi-tâches


communication implicite, résultant de l’accès par chaque
activité à des variables partagées
activités anonymes (interaction sans identification)
coordination (synchronisation) nécessaire (pour déterminer
l’instant où une interaction est possible)

Activité

Mémoire
Activité

Activité
Exemples
multiprocesseurs à mémoire partagée,
processus légers,
Unix : couplage mémoire (mmap), fichiers
Systèmes concurrents – Introduction 24 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités

Interaction par échange de messages


Activités communiquant par messages
communication explicite par transfert de données (messages)
désignation nécessaire du destinataire (ou d’un canal de
communication)
coordination implicite, découlant de la communication

Mémoire Activité

Medium Activité Mémoire

Mémoire Activité

Exemples
processeurs en réseau,
architectures logicielles réparties (client/serveur. . . ),
Unix : tubes, signaux
Systèmes concurrents – Introduction 25 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Plan

1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités

2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?

3 Avantages/inconvénients

Systèmes concurrents – Introduction 26 / 37


Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Contrôler

Concevoir une application concurrente


contrôler un ensemble d’activités concurrentes
contrôler la progression et les interactions de chaque activité
assurer leur protection réciproque

Moyen
attente (par blocage – suspension – de l’activité)

Systèmes concurrents – Introduction 27 / 37


Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Contrôler

Hypothèses de bon comportement des activités : un protocole


définit les interactions possibles :
Opérations et paramètres autorisés.
Séquences d’actions autorisées.
Un ouvrier ne doit pas déposer plus de résultats qu’il n’a pris
de travaux.

Systèmes concurrents – Introduction 28 / 37


Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Décrire

Compteurs d’événements
Compter les actions ou les changements d’états et les relier entre
eux.

Exemple
#nb de travaux soumis = #nb travaux effectués
+ #nb travaux en cours
+ #nb travaux en attente

Systèmes concurrents – Introduction 29 / 37


Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Décrire

Triplets de Hoare
précondition/action/postcondition

Exemple
{t = nb travaux en attente ∧ t > 0 ∧ r = nb résultats}
ouvrier effectue un travail
{nb travaux en attente = t − 1 ∧ nb résultats = r + 1}

Sérialisation : {p}A1 ; A2 {q12 }, {p}A2 ; A1 {q21 }


{p}A1 k A2 {q12 ∨ q21 }
Indépendance :
A1 et A2 sans interférence, {p}A1 {q1 }, {p}A2 {q2 }
{p}A1 k A2 {q1 ∧ q2 }

Systèmes concurrents – Introduction 30 / 37


Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Décrire
Propriétés temporelles
Linéaires : pour toutes les exécutions possibles,
à tout moment d’une exécution.
Arborescentes : pour certaines exécutions possibles,
à tout moment d’une exécution.

Exemple
Sûreté : rien de mauvais ne se produit
Deux ouvriers ne peuvent jamais prendre le même travail.
Vivacité : quelque chose de bon finit par se produire
Un travail déposé finit par être pris par un ouvrier.
Possibilité : deux travaux déposés consécutivement peuvent
être exécutés séquentiellement par le même ouvrier.
Systèmes concurrents – Introduction 31 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Modèle : l’entrelacement
Raisonner sur tous les cas parallèles est trop complexe
⇒ on raisonne sur des exécutions séquentielles obtenues par
entrelacement des instructions des différentes activités.
Deux activités P = p1 ; p2 et Q = q1 ; q2 . L’exécution concurrente
PkQ est vue comme (équivalente à) l’une des exécutions :
p1 ; p2 ; q1 ; q2 ou p1 ; q1 ; p2 ; q2 ou p1 ; q1 ; q2 ; p2 ou q1 ; p1 ; p2 ; q2 ou
q1 ; p1 ; q2 ; p2 ou q1 ; q2 ; p1 ; p2
(p+q)!
Nombre d’entrelacements : p! q!

Attention
Ne pas oublier que c’est un modèle simplificateur (vraie
concurrence, cohérence mémoire. . . )
Il peut ne pas exister de code séquentiel équivalent au code
parallèle.
Systèmes concurrents – Introduction 32 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?

Raisonner

Contrôler les effets des interactions


isoler (raisonner indépendamment) ⇒ modularité
contrôler/spécifier l’interaction
schémas connus d’interaction (design patterns)

Systèmes concurrents – Introduction 33 / 37


Activités concurrentes
Conception
Avantages/inconvénients

Plan

1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités

2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?

3 Avantages/inconvénients

Systèmes concurrents – Introduction 34 / 37


Activités concurrentes
Conception
Avantages/inconvénients

Avantages/inconvénients

+ utilisation d’un système multi-processeurs.


+ utilisation de la concurrence naturelle d’un programme.
+ modèle de programmation naturel, en explicitant la
synchronisation nécessaire.
− surcoût d’exécution (synchronisation, implantation du
pseudo-parallélisme).
− surcoût de développement : nécessité d’expliciter la
synchronisation, vérifier la réentrance des bibliothèques,
danger des variables partagées.
− surcoût de mise-au-point : debuggage souvent délicat (pas de
flot séquentiel à suivre) ; effet d’interférence entre des
activités, interblocage. . .

Systèmes concurrents – Introduction 35 / 37


Activités concurrentes
Conception
Avantages/inconvénients

Parallélisme et performance
Mythe du parallélisme
 Si je remplace ma machine mono-processeur par une machine à

N processeurs, mon programme ira N fois plus vite 

Soit un système composé par une partie p parallélisable + une


partie 1 − p séquentielle.
Loi d'Amdahl
20.00

18.00
Portion parallèle
16.00 50%
75%

CPU durée p = 40% p = 80% 14.00 90%


95%
12.00

1 p + (1 − p) 100 100

Speedup
10.00
p
4 4 + (1 − p) 70 40 8.00

p
8 8 + (1 − p) 65 30 6.00

4.00
p
16 16 + (1 − p) 62, 5 25 2.00

∞ 60 20 0.00

16384

32768

65536
1024

2048

4096

8192
128

256

512
16

32

64
1

8
1
Loi d’Amdahl : maximal speedup = 1−p
Nombre de Processeurs

(source : wikicommons)

Systèmes concurrents – Introduction 36 / 37


Activités concurrentes
Conception
Avantages/inconvénients

Parallélisme et performance
Mythe de la performance
 Si je remplace ma machine par une machine N fois plus rapide,

mon programme traitera des problèmes N fois plus grands dans le


même temps 

Pour un problème de taille n soluble en temps T , taille de problème


soluble dans le même temps sur une machine N fois plus rapide :
complexité N=4 N = 16 N = 1024
O(n) √ 4n √ 16n √ 1024n
O(n2 ) √ 4n = 2n √ 16n = 4n √ 1024n = 32n
3
O(n ) 3
4n ≈ 1.6n 3
16n ≈ 2.5n 3
1024n ≈ 10n
O(e n ) ln(4)n ≈ 1.4n ln(16)n ≈ 2.8n ln(1024)n ≈ 6.9n
En supposant en outre que tout est 100% est parallélisable et qu’il
n’y a aucune interférence !
Systèmes concurrents – Introduction 37 / 37

Vous aimerez peut-être aussi