Programmation GPU

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.

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

Autres questions sur Programmation GPU

  1. 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 ?
  2. 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 ?
  3. Que peut-il se produire si un noyau GPU utilise trop de registres par thread ?
  4. Quelle est la définition de l'occupation (occupancy) d'un GPU ?
  5. Quelle est la principale méthode par laquelle le GPU masque la longue latence mémoire (plusieurs centaines de cycles) ?

Comparatifs sur ce thème