Programmation GPU

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 ?

  1. APour réutiliser de nombreuses fois en mémoire partagée les données lues en mémoire globale et réduire le nombre d'accès à la mémoire lente
  2. BPour réduire les valeurs des matrices et éviter les dépassements
  3. CPour réduire le nombre de calculs et obtenir un résultat approché
Afficher la réponse et l'explication

Réponse : A. Pour réutiliser de nombreuses fois en mémoire partagée les données lues en mémoire globale et réduire le nombre d'accès à la mémoire lente

Dans un produit de matrices, un même élément sert à de nombreux calculs. Écrit naïvement, chaque thread relit à chaque fois depuis la mémoire globale et la bande passante mémoire devient insuffisante. En découpant en tuiles chargées en mémoire partagée, tous les threads du bloc réutilisent la tuile de nombreuses fois, et la quantité lue en mémoire globale diminue proportionnellement à la taille de la tuile. C'est le même principe que le blocage (blocking) pour le cache des CPU.

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

Autres questions sur Programmation GPU

  1. Que peut-il se produire si un noyau GPU utilise trop de registres par thread ?
  2. Quelle est la définition de l'occupation (occupancy) d'un GPU ?
  3. Quelle est la principale méthode par laquelle le GPU masque la longue latence mémoire (plusieurs centaines de cycles) ?
  4. Quel énoncé est correct au sujet de l'occupation d'un GPU ?
  5. Quelle est la relation entre les blocs et les SM (multiprocesseurs de flux) en CUDA ?

Comparatifs sur ce thème