it-swarm.com.de

Installation von CUDA unter Ubuntu 12.04 mit dem NVIDIA-Treiber 295.59

Ich habe versucht, Cuda auf einem NVIDIA GT 650m-basierten Laptop laufen zu lassen. Ich verwende Ubuntu 12.04 mit dem Treiber nvidia 295.59. Außerdem verwendet mein Laptop Optimus, sodass ich den Treiber per Hummel installieren muss. Bumblebee funktioniert noch nicht richtig - ich glaube jedoch, dass es möglich ist, CUDA unabhängig zu installieren.

Um CUDA zu installieren, habe ich die hier beschriebenen Anweisungen befolgt: Wie kann ich nVidia CUDA oder OpenCL auf einem Laptop mit diskreter nVidia-Karte/Intel Integrated Graphics zum Laufen bringen?

Allerdings habe ich immer noch Probleme beim Erstellen der SDK. Ich habe die unter dem obigen Link angegebenen Änderungen in common.mk vorgenommen, habe jedoch Folgendes (Snippet) aus dem Build-Prozess erhalten:

    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

Die Bibliotheken, vor denen gewarnt wird, befinden sich auf meinem System und sind auf dem System installiert:

    $ 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

/ usr/lib/nvidia-current und/usr/lib32/nvidia-current werden jedoch nicht von ldconfig erfasst. Ich habe versucht, sie hinzuzufügen, indem ich eine Datei zu /etc/ld.so.conf.d/ hinzufügte, die über diesen Fehler hinausgeht. Jetzt erhalte ich jedoch den folgenden Fehler:

    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

Ich würde mich über jede Hilfe freuen, die mir jemand leisten kann. Wenn ich weitere Informationen geben kann, lassen Sie es mich bitte wissen.

Vielen Dank.

5
johnmcd

Das Problem mit undefinierten Verweisen auf die Funktionen ist, dass Sie die libcuda-Bibliothek nicht mit -lcuda verknüpfen. Die Anleitung unter Wie kann ich nVidia CUDA oder OpenCL auf einem Laptop mit diskreter nVidia-Karte/Intel Integrated Graphics zum Laufen bringen? erwähnt, dass Sie -lcuda an einer Stelle in common.mk entfernen sollten, was jedoch nicht der Fall war arbeite für mich. Da der Compiler die Bibliothek jedoch nicht finden konnte, ist es wichtig, das Verzeichnis hinzuzufügen, in dem sich die Bibliothek befindet, damit die entsprechende Zeile in common.mk (für mich Zeile 276) aussieht

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

Eine ähnliche Korrektur musste im Makefile des src/deviceQuery-Ordners in der letzten Zeile vorgenommen werden

    LIB += -lcuda

zu

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

Ich hoffe, das hilft!

2

Alles, was ich tun muss, ist, den Pfad des nvidia-Treibers in den LD_LIBRARY_PATH einzutragen: export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/usr/lib/nvidia-current.

1
Sam

Ich habe das gleiche Problem.

Ich denke, dass diese Frage auch im Zusammenhang steht: Fehler "-lOpenCL kann nicht gefunden werden" beim Erstellen des Cuda SDK

Um die cuda- und openCL-Beispiele kompilieren zu können, habe ich Folgendes ausgeführt.

Ich habe diese Anleitung befolgt: Wie kann ich nVidia CUDA oder OpenCL auf einem Laptop mit nVidia Discrete Card/Intel Integrated Graphics zum Laufen bringen? ohne Bumblebee zu installieren und mit 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" 

PATH neu laden:

source /etc/environment 

Legen Sie LD_LIBRARY_PATH fest:

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. 

LD_LIBRARY_PATH neu laden:

Sudo ldconfig 

~/.Bash.rc bearbeitet, hinzugefügt:

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

Laden Sie ~/bash.rc neu

 source ~/bash.rc

Überprüfen Sie, ob openCL gefunden wird:

    ldconfig -v | grep "OpenCL"

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

Beispiele sollten jetzt kompiliert werden. Erhöhen Sie jedoch nicht Ihre Hoffnung. Ich denke, dass der NVIDIA-Treiber fehlerhaft ist, da ich den folgenden Fehler für cuda-Beispiele erhalte:

[vectorAddDrv] starting...

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

und für openCL-Beispiele:

./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