0Pricing
CUDA Academy · Leçon

Éviter les conflits de banques

Pourquoi le remplissage peut accélérer l’accès partagé.

Éviter les conflits de banques est une leçon CUDA Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage CUDA Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours CUDA Academy comprend 4 leçons au total.

La mémoire partagée possède des banques

La mémoire partagée est divisée en 32 banques, une pour chaque thread d’un warp. Répartir les accès entre ces banques permet aux 32 threads de lire à pleine vitesse.

Correspondance entre adresses et banques

Les mots consécutifs de 4 octets sont placés dans des banques consécutives, avec un retour au début après 32. Le mot 0 est donc dans la banque 0, tout comme le mot 32.

Qu’est-ce qu’un conflit de banques

Un conflit de banques se produit lorsque deux threads d’un warp accèdent à la même banque, mais à des mots différents. Le matériel doit alors sérialiser ces accès.

La sérialisation réduit la vitesse

Un conflit à N voies transforme un accès rapide en N accès lents. Un conflit à 32 voies peut rendre la mémoire partagée aussi lente qu’un accès en file unique. 🐢

Le cas idéal : un pas de un

Lorsque chaque thread lit tile[threadIdx.x], chaque thread accède à une banque distincte. Il n’y a alors aucun conflit et la bande passante est maximale.

float v = tile[threadIdx.x];

Le piège : un pas de 32

Une lecture avec un pas de 32 envoie chaque thread vers la même banque. C’est le pire cas : un conflit complet à 32 voies.

float v = tile[threadIdx.x * 32];

Les pas pairs posent aussi problème

Tout pas pair qui partage un facteur avec 32 provoque des conflits partiels. Un pas de 2, par exemple, entraîne un conflit à 2 voies dans le warp.

L’exception de diffusion

Bonne nouvelle : si tous les threads lisent la même adresse, le matériel la diffuse en une seule opération. Lire le même mot ne pose aucun problème ; seul l’accès à la même banque avec des mots différents provoque un conflit.

Le remplissage à la rescousse

Pour les tuiles 2D, ajoutez une colonne supplémentaire avec un remplissage de +1. Cela décale chaque ligne afin que les accès aux colonnes n’aboutissent plus tous dans la même banque.

__shared__ float tile[32][33];

Pourquoi +1 fonctionne

La colonne supplémentaire rend la longueur de la ligne première avec 32. Ainsi, parcourir une colonne vers le bas visite une banque différente à chaque fois, ce qui élimine le conflit.

Profilez, ne devinez pas

Les conflits de banques sont invisibles dans le code source. Utilisez Nsight Compute pour mesurer les conflits de mémoire partagée avant de consacrer du temps à les corriger.

Vérification rapide

Vérifions ce qui rend les accès partagés rapides.

Récapitulatif

Vous avez appris que la mémoire partagée possède 32 banques, que les accès à une même banque avec des mots différents sont sérialisés et qu’un remplissage de +1 corrige les conflits de colonnes. Ensuite : la mémoire partagée dynamique. 🎯

Questions Fréquemment Posées

La leçon « Éviter les conflits de banques » est-elle gratuite ?

Oui — le texte complet de « Éviter les conflits de banques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours CUDA Academy, passe à CoddyKit PRO. Le cours CUDA Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Éviter les conflits de banques » ?

Pourquoi le remplissage peut accélérer l’accès partagé. Tu pratiques CUDA Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer CUDA Academy ?

Aucune expérience préalable n'est requise. CUDA Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Éviter les conflits de banques » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon CUDA Academy ?

Oui. Chaque leçon CUDA Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Déclarer des tableaux __shared__
  2. Synchroniser avec __syncthreads
  3. Éviter les conflits de banques
  4. Mémoire partagée dynamique
← Retour à CUDA Academy