Multicœur et synchronisation
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 ?
- AAvec le premier contact, les pages sont placées sur des nœuds aléatoires
- BL’emplacement de toutes les pages est fixé dès l’appel à malloc
- CSi un seul thread initialise à 0 un grand tableau, tout est placé sur un seul nœud, et les threads des autres nœuds utilisent une mémoire éloignée
Afficher la réponse et l'explication
Réponse : C. Si un seul thread initialise à 0 un grand tableau, tout est placé sur un seul nœud, et les threads des autres nœuds utilisent une mémoire éloignée
Une simple allocation par malloc n’attribue pas de pages physiques ; c’est lors du défaut de page de la première écriture que la page est placée dans la mémoire du nœud du thread concerné. Si l’initialisation est faite par un seul thread, tout le tableau se concentre sur ce nœud, et dans le calcul parallèle une grande partie de la zone dont chaque thread a la charge se trouve en mémoire éloignée. En parallélisant l’initialisation avec la même répartition que le calcul, chaque partie est placée près du thread qui en a la charge.
Continuer : 9 autres questions sur Multicœur et synchronisation