Multicœur et synchronisation
Pour calculer avec plusieurs threads la somme de tous les éléments d’un tableau, quelle méthode convient du point de vue des performances ?
- ATous les threads ajoutent chaque élément à une variable partagée unique en prenant un verrou
- BTous les threads ajoutent chaque élément à une variable partagée unique sans synchronisation
- CChaque thread somme sa part dans une variable locale, puis ces sommes sont additionnées une fois chacune à la fin
Afficher la réponse et l'explication
Réponse : C. Chaque thread somme sa part dans une variable locale, puis ces sommes sont additionnées une fois chacune à la fin
Mettre à jour une variable partagée pour chaque élément est très lent, à cause des attentes sur les verrous ou instructions atomiques et des allers-retours de la ligne de cache. Si chaque thread calcule une somme partielle dans un registre ou une variable locale, puis que la somme totale est obtenue par autant d’additions que de threads, les écritures partagées sont minimes. Cette méthode s’appelle réduction et est intégrée aux mécanismes de parallélisation comme OpenMP.
Continuer : 9 autres questions sur Multicœur et synchronisation