Multicœur et synchronisation

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 ?

  1. AUne répartition statique, qui divise équitablement le nombre d’itérations au départ sans ajustement ultérieur
  2. BConfier toutes les itérations à un seul thread
  3. CUne répartition dynamique, qui découpe le travail en petits lots que les threads disponibles viennent chercher
Afficher la réponse et l'explication

Réponse : C. Une répartition dynamique, qui découpe le travail en petits lots que les threads disponibles viennent chercher

La répartition statique a un faible coût, mais si le poids des itérations varie, seul le thread chargé des parties lourdes prend du retard et les autres attendent. Avec une répartition dynamique, le travail suivant est pris par exemple à partir d’un compteur partagé, et les threads qui finissent tôt en prennent davantage, ce qui équilibre la charge. Cependant, des lots trop petits augmentent le coût de récupération ; leur taille doit donc être ajustée.

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

Autres questions sur Multicœur et synchronisation

  1. 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 ?
  2. Quelle est la caractéristique d’un verrou lecteurs-rédacteurs (reader-writer lock) ?
  3. Quelle est l’utilisation la plus appropriée d’un sémaphore à compteur ?
  4. Quelle est la différence entre cohérence de cache et modèle de cohérence mémoire ?
  5. Quel est le principe de la mémoire transactionnelle matérielle ?

Comparatifs sur ce thème