Introducción
Un posible problema que puede aparecer es que el kernelExecTimeout esté activado. Esto proboca que la ejecución de un kernel no pueda exceder un tiempo predefinido.
Comprobación del temporizador
A continuación se presenta un código que nos permitirá comprobar el estado de ese temporizador en tiempo de ejecución.
cudaDeviceProp propiedades; int device = -1; // Preguntar que device esta seleccionado printf("Preguntanto por DEVICE: s\n",cudaGetErrorString(cudaGetDevice(&device))); // Preguntar por las propiedades del device seleccionado printf("Comprobando propiedades de la Tarjeta: %s\n",cudaGetErrorString(cudaGetDeviceProperties (&propiedades, device))); if (propiedades.kernelExecTimeoutEnabled) printf("Temporizadores de la tarjeta activados\n"); else printf("Temporizadores de la tarjeta desactivados\n");
Solución
Si se está utilizando un sistema Linux, un posible procedimiento sería:
Parar la X y usar en modo texto desde un terminal. Una forma de hacerlo es arrancar la máquina en nivel 3 (init 3: arranca sin entorno gráfico).
Una vez que la maquina está arrancada si intentamos ejecutar algún ejecutable cuda, obtendremos un error que nos idicara que no hay ningún dispositvo cuda.
Por tanto hay que montar el dispositvo. Una forma de hacerlo es startx y una vez que están las X arrancadas matarlas con ctrl+C.