Multicœur et synchronisation

Si 64 cœurs mettent à jour en continu et simultanément un compteur partagé unique par instruction atomique, l’ajout de cœurs n’accélère pas le traitement. Quelle en est la raison principale ?

  1. ALes instructions atomiques ne peuvent s’exécuter que sur un seul cœur
  2. BAvec beaucoup de cœurs, la valeur du compteur diminue automatiquement
  3. CLa ligne de cache du compteur passe de cœur en cœur, et les mises à jour ne progressent qu’une à la fois
Afficher la réponse et l'explication

Réponse : C. La ligne de cache du compteur passe de cœur en cœur, et les mises à jour ne progressent qu’une à la fois

Une mise à jour atomique exige que le cœur détienne la ligne à l’état M ; la ligne migre donc vers un autre cœur à chaque mise à jour. La migration coûte le temps d’une communication entre cœurs, et un seul cœur peut mettre à jour à la fois ; ajouter des cœurs ne fait qu’allonger l’attente. Il faut réduire les écritures partagées, par exemple en faisant compter chaque cœur dans son propre emplacement puis en totalisant à la fin.

S'entraîner sur ce thème Retour au thème

Autres questions sur Multicœur et synchronisation

  1. Quelle description d’un système NUMA (accès mémoire non uniforme) est correcte ?
  2. Avec la politique de premier contact (first touch) couramment utilisée sur les systèmes NUMA sous Linux (la page est placée dans la mémoire du nœud où s’exécute le thread qui y écrit en premier), à quoi faut-il prendre garde ?
  3. Parmi les causes suivantes expliquant que les performances d’un programme parallèle progressent moins que prévu avec l’ajout de cœurs, laquelle ne s’applique pas ?
  4. Pour répartir les itérations d’une boucle entre plusieurs threads, quelle répartition convient lorsque la charge de calcul varie fortement d’une itération à l’autre ?
  5. 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 ?

Comparatifs sur ce thème