Multicœur et synchronisation
Quelle description du faux partage (false sharing), qui survient dans les programmes multithreads, est correcte ?
- ADes threads différents modifient des variables différentes, mais comme celles-ci se trouvent dans la même ligne de cache, la ligne fait des allers-retours entre les cœurs et ralentit l’exécution
- BDeux threads modifient la même variable sans synchronisation et la valeur est corrompue
- CLes threads s’attendent mutuellement pour leurs verrous et se bloquent
Afficher la réponse et l'explication
Réponse : A. Des threads différents modifient des variables différentes, mais comme celles-ci se trouvent dans la même ligne de cache, la ligne fait des allers-retours entre les cœurs et ralentit l’exécution
La cohérence est gérée par ligne de cache (généralement 64 octets). Même si le cœur 0 ne modifie que la variable a et le cœur 1 que la variable b, si a et b sont dans la même ligne, chaque écriture invalide la copie de l’autre et la ligne fait des allers-retours entre les deux cœurs. Le résultat est correct, mais les performances chutent fortement : c’est le faux partage. Il survient facilement avec des tableaux de comptage par thread, par exemple.
Continuer : 9 autres questions sur Multicœur et synchronisation