0Pricing
CUDA Academy · Leçon

Lectures fusionnées ou avec stride

Découvrez l’importance de la correspondance entre threads et adresses.

Lectures fusionnées ou avec stride est une leçon CUDA Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.

Tout est une question de correspondance

La fusion dépend de l’adresse à laquelle chaque thread accède. La correspondance entre thread et adresse détermine si une seule transaction suffit pour tout le warp.

Le schéma fusionné

Lorsque des threads voisins lisent des adresses voisines, le warp couvre une seule séquence contiguë. Cette organisation régulière constitue un accès fusionné.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float v = data[i];

Pourquoi est-il efficace

Le thread 0 accède à l’index 0, le thread 1 à l’index 1, et ainsi de suite. Les 32 adresses tiennent dans une seule ligne alignée : le GPU n’a donc besoin que d’une seule transaction.

Introduire le pas

Un pas est un écart fixe entre les adresses auxquelles accèdent des threads successifs. Dès que cet écart dépasse un élément, la fusion commence à se dégrader.

float v = data[i * stride];

Les lectures avec un pas s’éparpillent

Avec un pas de 2, le thread 0 lit 0, le thread 1 lit 2 et le thread 2 lit 4. Le warp couvre désormais deux fois plus de mémoire et nécessite donc davantage de transactions.

Le coût augmente

Si vous doublez le pas, vous doublez approximativement le nombre de lignes concernées. De grands pas peuvent pousser un warp à effectuer de nombreuses transactions tout en n’utilisant qu’une petite partie de chaque ligne.

Un piège courant

Attribuer à chaque thread une colonne entière d’une matrice stockée par lignes crée un pas énorme. Le code paraît ordonné, mais il éparpille discrètement chaque warp.

float v = matrix[threadIdx.x * width + row];

Transposer la correspondance

Souvent, il suffit d’inverser l’indice qui varie le plus rapidement avec le thread. Faites parcourir aux threads consécutifs des emplacements mémoire consécutifs, et les lectures seront de nouveau fusionnées.

float v = matrix[row * width + threadIdx.x];

Les décalages nuisent aussi

Même un schéma fusionné souffre s’il commence au milieu d’une ligne. Un décalage non aligné fait franchir une limite au warp et divise une lecture en deux.

Raisonner en warps

Pour évaluer un schéma, n’imaginez pas un seul thread. Représentez-vous les 32 voies simultanément et demandez-vous combien de lignes leurs adresses couvrent ensemble. 🔍

La règle générale

Faites suivre à l’indice qui varie le plus rapidement threadIdx.x. Cette seule habitude permet de garder la plupart de vos lectures globales fusionnées, sans effort supplémentaire.

Vérification rapide

Choisissez le schéma d’accès qui se fusionne le mieux.

Récapitulatif

Vous avez vu que les lectures fusionnées gardent les éléments voisins ensemble, tandis qu’un pas les éparpille sur plusieurs lignes. Faites piloter l’indice le plus rapide par threadIdx.x. 🎉

Questions Fréquemment Posées

La leçon « Lectures fusionnées ou avec stride » est-elle gratuite ?

Oui — le texte complet de « Lectures fusionnées ou avec stride » 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 « Lectures fusionnées ou avec stride » ?

Découvrez l’importance de la correspondance entre threads et adresses. 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 2 sur 4.

Combien de temps prend la leçon « Lectures fusionnées ou avec stride » ?

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. Qu’est-ce qu’une transaction mémoire
  2. Lectures fusionnées ou avec stride
  3. Structure de tableaux ou tableau de structures
  4. Mesurer la bande passante effective
← Retour à CUDA Academy