Qu'est-ce que Mémoire partagée (shared memory) ?

Petite mémoire rapide située dans chaque SM du GPU et partagée par les threads d'un même bloc. C'est le programme qui décide de ce qu'on y place.

Nom japonais: シェアードメモリ

« Mémoire partagée (shared memory) » apparaît dans 16 questions d'entraînement réparties sur 3 thèmes, dont Programmation GPU, Système d'exploitation et matériel, Pile matérielle et logicielle de l'IA.

Domaine: Programmation GPU

S'entraîner : questions sur Mémoire partagée (shared memory)

Quelle est la caractéristique de la mémoire partagée (shared memory) en CUDA ?

  1. AUne mémoire principale de grande capacité partagée par tous les GPU et CPU
  2. BUne zone où la mémoire GPU est partagée avec le disque dur
  3. CUne petite mémoire rapide sur puce, partagée par les threads d'un même bloc et utilisée explicitement par le programme
Afficher la réponse et l'explication

Réponse : C. Une petite mémoire rapide sur puce, partagée par les threads d'un même bloc et utilisée explicitement par le programme

La mémoire partagée est une mémoire rapide située dans chaque SM, d'environ quelques dizaines de Ko par bloc, accessible plusieurs dizaines de fois plus vite que la mémoire globale (DRAM du GPU). Les threads d'un même bloc peuvent y placer et partager des données ; on l'utilise pour lire une seule fois depuis la mémoire globale des données réutilisées de nombreuses fois, ou pour échanger des résultats intermédiaires entre threads. Contrairement à un cache, c'est le programme qui décide de ce qui y est placé.

Quelle est la définition des conflits de banc (bank conflicts) de la mémoire partagée CUDA ?

  1. AUn problème de deux GPU utilisant le même compte bancaire
  2. BUn problème d'arrêt du programme par manque de capacité de la mémoire partagée
  3. CLa mémoire partagée étant divisée en 32 bancs, lorsque plusieurs threads d'un warp accèdent simultanément à des adresses différentes d'un même banc, les accès sont sérialisés et ralentis
Afficher la réponse et l'explication

Réponse : C. La mémoire partagée étant divisée en 32 bancs, lorsque plusieurs threads d'un warp accèdent simultanément à des adresses différentes d'un même banc, les accès sont sérialisés et ralentis

La mémoire partagée est constituée de 32 bancs attribués successivement tous les 4 octets, chaque banc ne pouvant accéder qu'à une adresse à la fois. Si les 32 threads d'un warp utilisent des bancs différents, un seul accès suffit ; si deux threads accèdent à des adresses différentes d'un même banc, l'accès se fait en deux fois. Par exemple, une lecture tous les 32 éléments concentre tous les threads sur un même banc et l'accès se scinde en 32. Lorsque tous lisent la même adresse, la valeur est diffusée à tous et il n'y a pas de conflit.

« Mémoire partagée (shared memory) » dans les explications

Questions mentionnant « Mémoire partagée (shared memory) » (16)

  1. Quelle est la caractéristique de la mémoire partagée (shared memory) en CUDA ?
  2. Quelle est la définition des conflits de banc (bank conflicts) de la mémoire partagée CUDA ?
  3. Un tableau de 32×32 float est placé en mémoire partagée ; sa lecture par colonne (verticalement) par les 32 threads d'un warp provoque des conflits de banc. Quelle contre-mesure est couramment utilisée ?
  4. Lors du calcul d'un produit de grandes matrices sur GPU, pourquoi découpe-t-on les matrices en petites tuiles chargées en mémoire partagée ?
  5. Lors de la transposition d'une grande matrice sur GPU (b[j][i] = a[i][j]), quel est l'objectif principal du passage par la mémoire partagée ?
  6. Quelle description de la paravirtualisation est correcte ?
  7. Quelle est la hiérarchie correcte des threads en CUDA (du plus grand au plus petit) ?
  8. Quel est le rôle de __syncthreads() en CUDA ?
  9. Quelle est la définition de l'occupation (occupancy) d'un GPU ?
  10. Quelle est la relation entre les blocs et les SM (multiprocesseurs de flux) en CUDA ?
  11. Pour construire sur GPU l'histogramme des valeurs de pixels, faire ajouter directement par tous les threads via atomicAdd dans les 256 cases en mémoire globale peut être lent. Quelle méthode l'améliore ?
  12. Pour calculer sur GPU la somme d'un grand nombre de valeurs, pourquoi utilise-t-on une réduction en arbre (répétition de l'addition de voisins qui divise par deux le nombre de valeurs) ?
  13. Quelle règle générale guide le choix du nombre de threads par bloc en CUDA ?
  14. Quelle est la caractéristique générale des caches GPU par rapport à ceux des CPU ?
  15. Quel est un exemple de mécanisme de programmation pour le calcul parallèle sur GPU et autres, utilisable aussi sur des GPU autres que NVIDIA ?

Termes associés

GPU CUDA Multiprocesseur de flux (SM) Banc (bank) Ouverture numérique (NA) Via Découpe (dicing) Bascule (flip-flop) Hyperviseur Taux d'occupation (occupancy)

Retour au glossaire