Qu'est-ce que NUMA ?

Abréviation de Non-Uniform Memory Access. Architecture où il existe des mémoires proches et éloignées d'un cœur, l'accès à une mémoire éloignée étant plus lent. Placer données et threads du même côté accélère le traitement.

Nom japonais: NUMA

« NUMA » apparaît dans 4 questions d'entraînement réparties sur 3 thèmes, dont Multicœur et synchronisation, Analyse des performances, DRAM.

Domaine: Multicœur et synchronisation

S'entraîner : questions sur NUMA

Quelle description d’un système NUMA (accès mémoire non uniforme) est correcte ?

  1. ATous les cœurs accèdent à toute la mémoire en un temps identique
  2. BIl existe des mémoires proches et éloignées d’un cœur, et l’accès à une mémoire éloignée prend plus de temps
  3. CChaque cœur ne peut lire que sa propre mémoire et ne peut pas utiliser celle des autres cœurs
Afficher la réponse et l'explication

Réponse : B. Il existe des mémoires proches et éloignées d’un cœur, et l’accès à une mémoire éloignée prend plus de temps

Dans un serveur à plusieurs sockets CPU, chaque socket dispose d’une mémoire directement reliée, et la mémoire des autres sockets est accessible via l’interconnexion entre sockets. La mémoire éloignée est donc plus lente et offre moins de bande passante que la mémoire proche. Toute la mémoire apparaît dans un espace d’adressage unique et les programmes fonctionnent tels quels, mais placer données et threads du même côté améliore les performances.

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 ?

  1. AAvec le premier contact, les pages sont placées sur des nœuds aléatoires
  2. BL’emplacement de toutes les pages est fixé dès l’appel à malloc
  3. 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.

« NUMA » dans les explications

Questions mentionnant « NUMA » (4)

  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. Pourquoi, lors de mesures de performances sur un système multicœur ou NUMA, fixe-t-on parfois les threads sur des cœurs spécifiques (réglage de l'affinité) ?
  4. Dans la plupart des processeurs de PC actuels, où se trouve le contrôleur mémoire qui pilote la DRAM ?

Termes associés

Via Contact Défaut de page (page fault) Acquisition-libération (acquire-release) Barrière mémoire Cohérence séquentielle Compare-and-swap Course aux données (data race) Espionnage de bus (snooping) Faux partage (false sharing)

Retour au glossaire