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.
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é!
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.
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...