web-dev-qa-db-fra.com

Installation de CUDA sur Ubuntu 12.04 avec le pilote nvidia 295.59

J'ai essayé de faire en sorte que cuda fonctionne sur un ordinateur portable basé sur nvidia gt 650m. J'utilise Ubuntu 12.04 avec le pilote nvidia 295.59. De plus, mon ordinateur portable utilise Optimus et j'ai donc installé le pilote via bumblebee. Bumblebee ne fonctionne pas encore correctement, mais j'estime qu'il est possible d'installer CUDA de manière indépendante.

Pour installer CUDA, j'ai suivi les instructions détaillées ici: Comment puis-je obtenir que nVidia CUDA ou OpenCL fonctionne sur un ordinateur portable doté d'une carte nVidia/Intel Integrated Graphics?

Cependant, je rencontre toujours des problèmes pour construire le SDK. J'ai apporté les modifications spécifiées sur le lien ci-dessus dans common.mk, mais j'ai obtenu le fragment suivant du processus de construction:

    make[2]: Entering directory `/home/john/NVIDIA_GPU_Computing_SDK/C/src/fluidsGL'
    /usr/bin/ld: warning: libnvidia-tls.so.302.17, needed by /usr/lib/nvidia-current/libGL.so, not found (try using -rpath or -rpath-link)
    /usr/bin/ld: warning: libnvidia-glcore.so.302.17, needed by /usr/lib/nvidia-current/libGL.so, not found (try using -rpath or -rpath-link)
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv018tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv012glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv017glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv012tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv015tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv019tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv000glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv017tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv013tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv013glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv018glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv022tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv007tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv009tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv020tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv014glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv015glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv016tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv001glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv006tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv021tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv011tls'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv020glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv019glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv002glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv021glcore'
    /usr/lib/nvidia-current/libGL.so: undefined reference to `_nv014tls'
    collect2: ld returned 1 exit status
    make[2]: *** [../../bin/linux/release/fluidsGL] Error 1
    make[2]: Leaving directory `/home/john/NVIDIA_GPU_Computing_SDK/C/src/fluidsGL'
    make[1]: *** [src/fluidsGL/Makefile.ph_build] Error 2
    make[1]: Leaving directory `/home/john/NVIDIA_GPU_Computing_SDK/C'
    make: *** [all] Error 2

Les bibliothèques que ld met en garde se trouvent sur mon système et sont installées sur celui-ci:

    $ locate libnvidia-tls.so.302.17 libnvidia-glcore.so.302.17
    /usr/lib/nvidia-current/libnvidia-glcore.so.302.17
    /usr/lib/nvidia-current/libnvidia-tls.so.302.17
    /usr/lib/nvidia-current/tls/libnvidia-tls.so.302.17
    /usr/lib32/nvidia-current/libnvidia-glcore.so.302.17
    /usr/lib32/nvidia-current/libnvidia-tls.so.302.17
    /usr/lib32/nvidia-current/tls/libnvidia-tls.so.302.17

cependant,/usr/lib/nvidia-current et/usr/lib32/nvidia-current ne sont pas récupérés par ldconfig. J'ai essayé de les ajouter en ajoutant un fichier à /etc/ld.so.conf.d/ qui dépasse cette erreur, mais je reçois maintenant l'erreur suivante:

    make[2]: Entering directory `/home/john/NVIDIA_GPU_Computing_SDK/C/src/deviceQueryDrv'
    cc1plus: warning: command line option ‘-Wimplicit’ is valid for C/ObjC but not for C++ [enabled by default]
    obj/x86_64/release/deviceQueryDrv.cpp.o: In function `main':
    deviceQueryDrv.cpp:(.text.startup+0x5f): undefined reference to `cuInit'
    deviceQueryDrv.cpp:(.text.startup+0x99): undefined reference to `cuDeviceGetCount'
    deviceQueryDrv.cpp:(.text.startup+0x10b): undefined reference to `cuDeviceComputeCapability'
    deviceQueryDrv.cpp:(.text.startup+0x127): undefined reference to `cuDeviceGetName'
    deviceQueryDrv.cpp:(.text.startup+0x16a): undefined reference to `cuDriverGetVersion'
    deviceQueryDrv.cpp:(.text.startup+0x1f0): undefined reference to `cuDeviceTotalMem_v2'
    deviceQueryDrv.cpp:(.text.startup+0x262): undefined reference to `cuDeviceGetAttribute'
    deviceQueryDrv.cpp:(.text.startup+0x457): undefined reference to `cuDeviceGetAttribute'
    deviceQueryDrv.cpp:(.text.startup+0x4bc): undefined reference to `cuDeviceGetAttribute'
    deviceQueryDrv.cpp:(.text.startup+0x502): undefined reference to `cuDeviceGetAttribute'
    deviceQueryDrv.cpp:(.text.startup+0x533): undefined reference to `cuDeviceGetAttribute'
    obj/x86_64/release/deviceQueryDrv.cpp.o:deviceQueryDrv.cpp:(.text.startup+0x55e): more undefined references to `cuDeviceGetAttribute' follow
    collect2: ld returned 1 exit status
    make[2]: *** [../../bin/linux/release/deviceQueryDrv] Error 1
    make[2]: Leaving directory `/home/john/NVIDIA_GPU_Computing_SDK/C/src/deviceQueryDrv'
    make[1]: *** [src/deviceQueryDrv/Makefile.ph_build] Error 2
    make[1]: Leaving directory `/home/john/NVIDIA_GPU_Computing_SDK/C'
    make: *** [all] Error 2

J'apprécierais toute aide que n'importe qui peut me fournir. Si je peux fournir des informations supplémentaires s'il vous plaît faites le moi savoir.

Merci.

5
johnmcd

Le problème des références indéfinies aux fonctions est que vous ne liez pas la bibliothèque libcuda à l'aide de -lcuda. Le guide à l’adresse Comment puis-je faire fonctionner nVidia CUDA ou OpenCL sur un ordinateur portable doté d’une carte discrète nVidia/Intel Integrated Graphics? mentionne que vous devez supprimer -lcuda à un emplacement commun.mk, travaille pour moi. Mais, comme le compilateur n’a pas pu trouver la bibliothèque, il est important d’ajouter le répertoire où se trouve la bibliothèque afin que la ligne correspondante dans common.mk (c’est la ligne 276 pour moi) ressemble à

    LIB += -L/usr/lib/nvidia-current -lcuda $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB}

Une correction similaire a dû être effectuée dans le fichier Makefile du dossier src/deviceQuery, dernière ligne, en modifiant

    LIB += -lcuda

à

    LIB += -L/usr/lib/nvidia-current -lcuda

J'espère que ça t'as aidé!

2
Ondřej Černotík

Tout ce que j'ai à faire est de placer le chemin du pilote nvidia dans LD_LIBRARY_PATH en faisant: export LD-LIBRARY_PATH = $ LD_LIBRARY_PATH:/usr/lib/nvidia-current.

1
Sam

J'ai le même problème.

Je pense que cette question est également liée: erreur "ne trouve pas -lOpenCL" lors de la création du SDK Cuda

Pour pouvoir compiler les exemples cuda et openCL, j'ai procédé comme suit.

J'ai suivi ce guide: Comment faire fonctionner nVidia CUDA ou OpenCL sur un ordinateur portable avec carte discrète nVidia/Intel Integrated Graphics? sans installer bumblebee et utiliser xswat ppa: https: // launchpad .net/~ ubuntu-x-swat/+ archive/x-updates /

gksudo gedit /etc/environment 
change 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 
to 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/cuda/bin" 

Recharger le chemin:

source /etc/environment 

Définissez LD_LIBRARY_PATH:

gksudo gedit /etc/ld.so.conf.d/cuda.conf

Paste into the file: 
/usr/local/cuda/lib64 
/usr/local/cuda/lib 
/usr/lib/nvidia-current
/usr/lib32/nvidia-current

Save and quit the editor. 

Rechargez LD_LIBRARY_PATH:

Sudo ldconfig 

Edité ~/.bash.rc, ajouté:

 export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/lib:/usr/lib/nvidia-current:/usr/lib32/nvidia-current

Recharger ~/bash.rc

 source ~/bash.rc

Vérifiez si openCL est trouvé:

    ldconfig -v | grep "OpenCL"

    ...
    libOpenCL.so.1 -> libOpenCL.so.1.0.0
libOpenCL.so.1 -> libOpenCL.so.1.0.0
    ...

Les échantillons doivent maintenant être compilés. Cependant, n'obtenez pas votre espoir. Je pense que le pilote nvidia est défectueux car l'erreur suivante s'affiche pour les échantillons cuda:

[vectorAddDrv] starting...

Vector Addition (Driver API)
checkCudaErrors() Driver API error = 0100 "CUDA_ERROR_INVALID_VALUE" from file <vectorAddDrv.cpp>, line 207.

et pour les échantillons openCL:

./oclDeviceQuery 
 [oclDeviceQuery] starting...

 ./oclDeviceQuery Starting...

 OpenCL SW Info:

  Error -1001 in clGetPlatformIDs Call !!!


  !!! Error # -1000 (Unspecified Error) at line 46 , in file oclDeviceQuery.cpp !!!

   Exiting...
0
kiepmad