Leçon 12 : Gestion des erreurs et synchronisation
Presque tous les appels du CUDA Runtime renvoient une valeur de type cudaError_t. Quand tout se passe bien, la valeur est cudaSuccess, dont la valeur numérique est 0 ; toute autre valeur indique une erreur. Un point crucial : lancer un kernel avec <<<>>> est asynchrone — ça revient au host immédiate
Envoyer un kernel au GPU, c'est comme poster une lettre dans la boîte aux lettres : au moment où tu la postes, tu es libre de continuer — mais tu ne sais pas encore si elle est arrivée. cudaGetLastError vérifie si l'adresse sur l'enveloppe est valide (une erreur au moment de l'envoi), et cudaDeviceSynchronize, c'est comme attendre un accusé de réception qui te dit si quelque chose s'est mal passé en chemin.
- cudaError_t
- Le type que renvoie presque chaque appel CUDA. cudaSuccess (valeur 0) signifie succès ; toute autre valeur est une erreur.
- cudaGetLastError
- Renvoie et réinitialise le dernier code d'erreur. On l'appelle juste après avoir lancé un kernel pour détecter les erreurs de lancement.
- cudaDeviceSynchronize
- Bloque le host jusqu'à ce que le GPU termine tout le travail, et renvoie les erreurs survenues pendant l'exécution du kernel.
- lancement asynchrone
- Un lancement de kernel revient au host immédiatement, avant que le kernel se termine. Donc la ligne de lancement ne peut pas signaler d'erreurs d'exécution.