2012-06-19 20 views
8

Estoy usando GeForce 8400M GS en Ubuntu 10.04 y estoy aprendiendo programación CUDA. Estoy escribiendo y ejecutando algunos programas básicos. Estaba usando cudaMalloc, y no dejaba de darme un error hasta que ejecuté el código como root. Sin embargo, tuve que ejecutar el código como root solo una vez. Después de eso, incluso si ejecuto el código como usuario normal, no obtengo un error en malloc. ¿Que esta pasando?¿Se requiere acceso raíz para CUDA?

+0

¿También compiló el código como root esa vez? Quizás necesites actualizar tus permisos de archivo antes de que el compilador pueda sobrescribir tu binario. –

Respuesta

7

Esto probablemente se deba a que su GPU no se inicializó correctamente durante el arranque. Me he encontrado con este problema al usar Ubuntu Server y otras instalaciones donde un servidor X no se inicia automáticamente. Intente lo siguiente para solucionarlo:

Cree un directorio para un script para inicializar sus GPU. Usualmente uso /root/bin. En este directorio, cree un archivo llamado cudainit.sh con el siguiente código (este script proviene de los foros de Nvidia).

#!/bin/bash 

/sbin/modprobe nvidia 

if [ "$?" -eq 0 ]; then 

    # Count the number of NVIDIA controllers found. 
    N3D=`/usr/bin/lspci | grep -i NVIDIA | grep "3D controller" | wc -l` 
    NVGA=`/usr/bin/lspci | grep -i NVIDIA | grep "VGA compatible controller" | wc -l` 

    N=`expr $N3D + $NVGA - 1` 
    for i in `seq 0 $N`; do 
     mknod -m 666 /dev/nvidia$i c 195 $i; 
    done  

    mknod -m 666 /dev/nvidiactl c 195 255 

else 
    exit 1 
fi 

Ahora tenemos que hacer que esta secuencia de comandos se ejecute automáticamente en el arranque. Edite /etc/rc.local para que se parezca a lo siguiente.

#!/bin/sh -e 
# 
# rc.local 
# 
# This script is executed at the end of each multiuser runlevel. 
# Make sure that the script will "exit 0" on success or any other 
# value on error. 
# 
# In order to enable or disable this script just change the execution 
# bits. 
# 
# By default this script does nothing. 

# 
# Init CUDA for all users 
# 
/root/bin/cudainit.sh 

exit 0 

Reinicie su computadora e intente ejecutar su programa CUDA como usuario habitual. Si estoy en lo cierto sobre cuál es el problema, entonces debería ser corregido.

0

Para trabajar con Ubuntu 14.04 Seguí https://devtalk.nvidia.com/default/topic/699610/linux/334-21-driver-returns-999-on-cuinit-cuda-/ para agregar nvidia-uvm a etc/modules, y para agregar una línea a una regla de udev personalizada. Crear /etc/udev/rules.d/70-nvidia-uvm.rules con esta línea:

KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/bin/mknod -m 666 /dev/nvidia-uvm c $(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0;'" 

No entiendo por qué sudo modprobe nvidia-uvm trabaja para crear un adecuado /dev/nvidia-uvm (como lo hace sudo cuda_program), pero la lista /etc/modules requiere la regla udev.

Cuestiones relacionadas