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?
Respuesta
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.
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.
- 1. ¿Cómo se mapean/deforman/hilos CUDA en núcleos CUDA?
- 2. Parámetros para núcleos CUDA
- 3. envoltorio CUDA para Qt
- 4. CUDA para .net?
- 5. ¿Se requiere ODP.NET para Oracle 11g Client?
- 6. ¿Se requiere @DocumentId para Hibernate Search?
- 7. ¿Se requiere HttpWebRequest.GetResponse para completar un POST?
- 8. ¿Se requiere conversión endian para datos wchar_t?
- 9. NHibernate: No se requiere para NHibernate.Criterion.SqlFunctionProjection
- 10. ¿Se requiere carga lenta para nHibernate?
- 11. ¿Se requiere EntityState.Modified para una actualización?
- 12. CUDA fundió el acceso a la memoria global
- 13. ¿Cuándo se requiere IPPROTO_UDP?
- 14. ¿Se requiere main.cpp?
- 15. ¿Se requiere ROLLBACK TRANSACTION?
- 16. ¿Cuándo se requiere "auto"?
- 17. Makefile para CUDA y C
- 18. Ejecutando comandos dentro de python que necesitan acceso raíz
- 19. ¿Cómo crear aplicaciones de Android con acceso a la raíz?
- 20. Android - Detectar si Wifi Requiere Acceso del navegador
- 21. Acceso raíz de MySQL desde todos los hosts
- 22. Obteniendo acceso de raíz w/Elevated Helper y SMJobBless
- 23. ¿Cómo instalar módulos de Python sin acceso a la raíz?
- 24. ¿Cómo se lanza un kernel CUDA?
- 25. creando zip sin registrar las rutas de acceso raíz; programación
- 26. Invocación asincrónica: ¿se requiere EndInvoke?
- 27. Javascript acceso a objetos anidada nivel de la raíz
- 28. Se requiere acceso de bloqueo a un bool o es Overkill
- 29. ¿Cuándo se requiere ScriptManager/ScriptManagerProxy?
- 30. heroku: Gemfile.lock se requiere cuestión
¿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. –