Une macro CUDA_CHECK réutilisable
Encapsulez chaque appel pour plus de sécurité.
Une macro CUDA_CHECK réutilisable 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.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Checking Every Call Is Tedious
Writing an if-statement after every CUDA call clutters your code fast. A reusable CUDA_CHECK macro fixes that with one clean line. 🧹
The Goal of the Macro
You want to wrap any call, grab its return code, and bail out loudly if it failed. One macro can do this everywhere.
CUDA_CHECK(cudaMalloc(&d, n));Capturing the Result
Inside, the macro stores the call result in a local cudaError_t so it can be inspected once without calling twice.
cudaError_t e = (call);Comparing to Success
It then tests the code against cudaSuccess. If they match, nothing happens and your program flows on as normal.
if (e != cudaSuccess) { /* report */ }Printing Where It Failed
On failure it prints a readable message using __FILE__ and __LINE__, so you jump straight to the offending line.
printf("CUDA error %s at %s:%d\n", msg, __FILE__, __LINE__);The do-while(0) Trick
The body is wrapped in a do-while(0). This makes the macro a single statement that works safely even inside an unbraced if.
#define CUDA_CHECK(c) do { /* ... */ } while(0)A Full Macro Sketch
Put it together and you get a compact, reusable safety net you can paste into any CUDA project header.
#define CUDA_CHECK(c) do { cudaError_t e=(c); if(e) exit(1); } while(0)Wrapping API Calls
Use it on any call that returns a code: cudaMalloc, cudaMemcpy, cudaFree. One wrapper guards them all uniformly.
CUDA_CHECK(cudaMemcpy(d, h, n, cudaMemcpyHostToDevice));Also Guard the Launch
Kernels return nothing, so wrap cudaGetLastError and a sync after the launch instead of wrapping the launch line itself.
kernel<<<g, b>>>();
CUDA_CHECK(cudaGetLastError());Keep It in a Header
Drop the macro in a shared header so every file uses the same check. Consistency here saves hours of confusing debugging.
Fail Fast, Fail Clearly
The big win is failing fast: the instant a call breaks, you get a precise file, line, and message instead of silent garbage.
Quick Check
Test your grasp of the CUDA_CHECK macro.
Recap: One Macro to Guard Them All
A CUDA_CHECK macro captures the code, compares to success, and prints file and line on failure. Define it once, use it everywhere. 🎉
Questions Fréquemment Posées
La leçon « Une macro CUDA_CHECK réutilisable » est-elle gratuite ?
Oui — le texte complet de « Une macro CUDA_CHECK réutilisable » 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 « Une macro CUDA_CHECK réutilisable » ?
Encapsulez chaque appel pour plus de sécurité. 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 « Une macro CUDA_CHECK réutilisable » ?
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
- Codes de retour ou erreurs asynchrones
- cudaGetLastError après le lancement
- Une macro CUDA_CHECK réutilisable
- Décoder cudaGetErrorString