Lección 12: Manejo de errores y sincronización
Casi toda llamada del CUDA Runtime devuelve un valor de tipo cudaError_t. Cuando todo va bien, el valor es cudaSuccess, cuyo valor numérico es 0; cualquier otro valor indica un error. Un punto crítico: lanzar un kernel con <<<>>> es asíncrono — regresa al host de inmediato, antes de que el kernel te
Enviar un kernel a la GPU es como echar una carta al buzón: en el momento en que la echas, quedas libre para seguir adelante — pero todavía no sabes si llegó. cudaGetLastError verifica si la dirección en el sobre es válida (un error al momento de enviar), y cudaDeviceSynchronize es como esperar una confirmación de entrega que te dice si algo salió mal en el camino.
- cudaError_t
- El tipo que devuelve casi cada llamada de CUDA. cudaSuccess (valor 0) significa éxito; cualquier otro valor es un error.
- cudaGetLastError
- Devuelve y reinicia el último código de error. Se llama justo después de lanzar un kernel para detectar errores de lanzamiento.
- cudaDeviceSynchronize
- Bloquea al host hasta que la GPU termina todo el trabajo, y devuelve los errores que ocurrieron durante la ejecución del kernel.
- lanzamiento asíncrono
- Un lanzamiento de kernel regresa al host de inmediato, antes de que el kernel termine. Así que la línea de lanzamiento no puede reportar errores de tiempo de ejecución.