Nvidia función cudaMemcpy() no funciona

Ayer empecé un pequeño tutorial sobre CUDA (en versión pdf aquí), un lenguaje usado en C para programar sobre tarjetas gráficas Nvidia y aprovechar la enorme capacidad de cómputo de sus múltiplos núcleos.

El caso es que una de las instrucciones básicas es la función cudaMemcpy(), que se usa para mover contenido de la memoria del ordenador (Host) a la memoria de la GPU (Device) y viceversa para poder pasar variables entre ambos dispositivos... y si la instrucción no funciona, el compilador no avisa.


Para compilar un archivo con código CUDA debemos usar el compilador nvcc, que yo había instalado (ingenuo de mi) con el paquete "nvidia-cuda-toolkit". 
El código a ejecutar consistía en una simple prueba para ver que el intercambio de variables entre la CPU y la GPU estaban funcionando, así que en el código en C definía dos variables con valores 2 y 7 y la GPU sumaba las dos variables.

La salida del programa debía ser algo tan simple como:
2 + 7 = 9
así que ver una única línea de salida de 2 + 7 = 1 no resultaba muy esperanzador.

Tras un par de pruebas, vi que la instrucción para copiar variables entre las dos memorias no estaba funcionando, por lo que ni los valores 2 y 7 llegaban a la GPU, ni cualquiera que fuera el valor que esta calculaba regresaba al código principal.

¿Y la solución? Fácil, la versión de Cuda instalada en mi Ubuntu 14.04 era la 5.5, cuando debería haber sido la 6.5. Así que ha tocado desinstalar primero el paquete, aproveché para cambiar el driver de la gráfica, y ahora tengo la versión 6.5 de Cuda y la cosa funciona :)

Para instalar CUDA he seguido estas dos fuentes:

Así que si alguno tenéis un problema parecido, comprobad que la versión de CUDA instalada es la correcta, y la instaláis siguiendo los pasos definidos por NVIDIA.

¡A programar!
votar
edit post

Comments

Publicar un comentario

Hola, si tienes algo que decirnos este es tu sitio.