tutorial samples example c++ cuda gpu gpgpu

c++ - samples - CUDA cudaMalloc



cuda tutorial (2)

Empecé a escribir una nueva aplicación CUDA. Sin embargo, di un divertido desvío en el camino. Llamar al primer cudaMalloc en una variable x, falla la primera vez. Sin embargo, cuando lo llamo por segunda vez, devuelve cudaSuccess. Recientemente actualizado a CUDA 4.0 SDK, es un error realmente extraño.

Incluso hice algunas pruebas y parece que la primera llamada de cudaMalloc falla.


La primera llamada a cualquiera de las funciones de la biblioteca cuda inicia una subrutina de inicialización. Puede ocurrir que de alguna manera falle la inicialización y no el cudaMalloc mismo. (Guía de programación de CUDA, sección 3.2.1)

De alguna manera, más tarde, sin embargo parece que funciona, a pesar del fracaso inicial. No conozco tu configuración ni tu código, así que no puedo ayudarte más. Verifique la guía de programación!


Recomiendo utilizar la macro CUDA_SAFE_CALL si no lo está: forzar la sincronización del hilo, al menos mientras depura el código:

CUDA_SAFE_CALL(cudaMalloc((void**) &(myVar), mem_size_N ));

Actualización: según @talonmies, no necesitas la biblioteca cutil. Entonces, reescribamos la solución:

/* Allocate Data */ cudaMalloc((void**) &(myVar), mem_size_N ); /* Force Thread Synchronization */ cudaError err = cudaThreadSynchronize(); /* Check for and display Error */ if ( cudaSuccess != err ) { fprintf( stderr, "Cuda error in file ''%s'' in line %i : %s./n", __FILE__, __LINE__, cudaGetErrorString( err) ); }

Y como se señala en la otra respuesta, es posible que desee incluir la sincronización y la verificación antes de asignar la memoria solo para asegurarse de que la API se haya inicializado correctamente.