Threads
Programmation multicore Mod `eles de multithreading
Cores, Processeurs, Multithreading
Il y un continuum entre ces diff ´erentes alternatives
Le SE peut g ´en ´eralement traiter un “hardware thread” comme un CPU 4 processeurs dual-core
'
1 octa-coreMotivations
M ˆemes que communication entre processus:
•
Pour profiter du parall ´elisme•
Pour des raisons de modularit ´e•
Efficacit ´e du partage d’information Mais aussi•
Un thread est plus “l ´eger” qu’un processus•
Des fois il n’y a pas de processus (e.g. `a l’int ´erieur du noyau)•
Eviter de se bloquer sur une op ´eration (responsiveness)´Exemples d’usage
Serveur web: beaucoup de requ ˆetes ind ´ependantes
•
Cr ´eer un processus pour chaque requ ˆete est inefficace•
Utiliser un seul thread emp ˆeche de profiter du parall ´elisme D ´ecoupler les t ˆaches ind ´ependantes:•
S’occuper de l’interface utilisateur•
Chercher des donn ´ees•
Faire de la correction orthographique•
R ´eorganiser les donn ´ees pour optimiser les acc `es futursParall ´elisme vs concurrence
Termes cousins mais distincts
•
Parall ´elisme: acc ´el ´erer l’ex ´ecution d’une t ˆache en la divisant en´el ´ements ex ´ecutables en m ˆeme temps
•
Concurrence: D ´ecomposition en plusieurs t ˆaches ind ´ependantesTypes de parall ´elisme
•
parall ´elisme de donn ´ees: les donn ´ees du calcul sont r ´eparties entre les sous-t ˆaches qui font toutes plus ou moins la m ˆeme op ´eration•
parall ´elisme de t ˆaches: chaque t ˆache fait une op ´eration distincteProgrammation multithreaded
Avenir peu brillant pour la performance single-threaded Moins difficile d’augmenter le nombre de processeurs Plus de travail pour nous
•
Diviser le travail en sous-t ˆaches ind ´ependantes•
Equilibre entre la quantit ´e de travail des t ˆaches´•
R ´epartition des donn ´ees pour ´eviter les conflits•
Synchronisation•
Tester, v ´erifier, d ´eboguerLoi d’Amdahl
Les portions de code s ´equentielles sont d ´eterminantes
N
, nombre de processeurs;S
, portion d’ex ´ecution s ´equentiellespeedup
≤ 1
S +
1−SN75% d’ex ´ecution en parall `ele sur 1024 processurs
⇒ 3.99x
Threads noyau et threads utilisateur
Threads utilis ´ees par une application viennent d’une librairie Threads du noyau viennent... du noyau
Les deux sont en partie ind ´ependants
•
One-to-one: un thread de l’application = un thread du noyau•
Many-to-one: un seul thread noyau partag ´e•
Many-to-many: N threads application, M threads noyau•
One-to-many: usage interne de threads noyauPOSIX threads ( Pthreads)
Cr ´eer un nouveau thread:
err = pthread_create (&tid, attr, func, arg);
Terminer un thread:
pthread_exit (retval);
Attendre la fin d’un thread:
err = pthread_join (tid, &retval);
Demande de terminaison:
err = pthread_cancel (tid);
D ´etails s ´emantiques
fork
etexec
: que faire avec les autres threads?M ´emoire thread-local
Int ´eractions avec la conversion user-thread
↔
kernel-thread Gestion des signauxSignaux POSIX
Utilis ´es pour notifier les processus d’ ´ev ´enements particuliers
•
Examples: SIGFPE, SIGCHILD, SIGSTOP, ...Un signal handler r ´epond `a un signal
•
Par d ´efaut, tuer le processus•
Peut ˆetre bloqu ´e, ou ignor ´e•
Peut appeler une fonction au choix du programmeSignal rec¸u de mani `ere asynchrone, comme une interruption Quel thread rec¸oit quels signaux? [ + user/kernel thread? ]