Traquer les courses avec racecheck
Détecter les courses de données dans la mémoire partagée
Traquer les courses avec racecheck 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.
Qu'est-ce qu'une course de données
Une course de données se produit lorsque deux threads accèdent à la même mémoire partagée et qu'au moins l'un écrit, sans ordre entre eux. 😬
Pourquoi les courses sont sournoises
Les courses donnent souvent le bon résultat pendant les tests et le mauvais en production, car le résultat dépend du moment imprévisible des threads.
Découvrez racecheck
L'outil racecheck de compute-sanitizer analyse les accès à la mémoire partagée et signale les conflits qu'une exécution normale dissimulerait.
compute-sanitizer --tool racecheck ./reduceUne barrière manquante
Écrire dans un tableau partagé puis lire l'emplacement voisin sans barrière crée une course, car le voisin n'a peut-être pas encore été écrit.
tile[tid] = in[i];
out[tid] = tile[tid + 1];La correction : __syncthreads
Insérez __syncthreads entre l'écriture et la lecture afin que chaque thread du bloc ait terminé son écriture avant toute lecture.
tile[tid] = in[i];
__syncthreads();
out[tid] = tile[tid + 1];Conflits écriture-après-écriture
racecheck détecte également un conflit d'écriture après écriture, lorsque deux threads stockent des données dans le même emplacement partagé sans ordre entre eux.
Conflits lecture-après-écriture
Le conflit le plus courant est la lecture après écriture : un thread lit une valeur qu'un autre thread est encore en train d'écrire et obtient donc des données obsolètes.
Lire le rapport de conflits
racecheck indique le type de conflit, ainsi que les deux threads et l'adresse partagée concernés, afin que vous sachiez exactement quelle barrière manque.
Il surveille la mémoire partagée
racecheck se concentre sur la mémoire __shared__ au sein d'un bloc ; les courses globales nécessitent généralement une logique rigoureuse ou des opérations atomiques.
Ajouter les informations de ligne
Comme pour memcheck, compiler avec -lineinfo permet à racecheck d'indiquer la ligne exacte du code source correspondant à chaque conflit.
nvcc -lineinfo reduce.cu -o reduceVérifiez la correction
Relancez racecheck après avoir ajouté la barrière. Un rapport indiquant zéro conflit signifie que vos accès à la mémoire partagée sont désormais correctement ordonnés.
Vérification rapide
Quelle est la correction habituelle lorsque racecheck signale un conflit de mémoire partagée ?
Récapitulatif
Vous avez utilisé racecheck pour trouver les conflits de mémoire partagée, lu ses rapports et les avez corrigés avec des barrières __syncthreads. Les bogues de synchronisation sont révélés. 🎯
Questions Fréquemment Posées
La leçon « Traquer les courses avec racecheck » est-elle gratuite ?
Oui — le texte complet de « Traquer les courses avec racecheck » 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 « Traquer les courses avec racecheck » ?
Détecter les courses de données dans la mémoire partagée 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 « Traquer les courses avec racecheck » ?
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
- Parcourir les noyaux pas à pas dans cuda-gdb
- Trouver les fuites avec memcheck
- Traquer les courses avec racecheck
- Détecter les erreurs de synchronisation avec synccheck