Multicœur et synchronisation
Un faux partage se produit dans un tableau de compteurs par thread déclaré « long cnt[8]; ». Quelle est la mesure la plus appropriée ?
- AChanger le type des compteurs de long en int pour réduire le tableau
- BInsérer un remplissage entre les compteurs ou les aligner pour les placer dans des lignes de cache distinctes
- CAugmenter le nombre de threads pour répartir les temps d’attente
Afficher la réponse et l'explication
Réponse : B. Insérer un remplissage entre les compteurs ou les aligner pour les placer dans des lignes de cache distinctes
Si un long fait 8 octets, les 8 compteurs tiennent dans une seule ligne de 64 octets, que tous les threads se disputent. En insérant un remplissage pour placer chaque compteur tous les 64 octets, ou en alignant une structure sur la taille d’une ligne de cache, chaque thread utilise une ligne distincte. Il est aussi efficace que chaque thread compte dans une variable locale et n’ajoute qu’une seule fois le résultat à l’emplacement partagé, à la fin.
Continuer : 9 autres questions sur Multicœur et synchronisation