Instalando o CUDA no Ubuntu 12.04 com o driver nvidia 295.59

5

Eu tenho tentado fazer o cuda rodar em um laptop baseado no nvidia gt 650m. Estou executando o Ubuntu 12.04 com o driver nvidia 295.59. Além disso, meu laptop usa o Optimus, então eu instalei o driver via zangão. O Bumblebee ainda não está funcionando corretamente - no entanto, acredito que seja possível instalar o CUDA independentemente.

Para instalar o CUDA, segui as instruções detalhadas aqui: Como posso obter o nVidia CUDA ou o OpenCL funcionando em um laptop com placa discreta da nVidia / Intel Integrated Graphics?

No entanto, ainda estou encontrando problemas no desenvolvimento do SDK. Fiz as alterações especificadas no link acima em common.mk, mas recebi o seguinte (snippet) do processo de criação:

    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

As bibliotecas que ld alertam estão no meu sistema e estão instaladas no sistema:

    $ 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

no entanto / usr / lib / nvidia-current e / usr / lib32 / nvidia-current não estão sendo selecionados pelo ldconfig. Eu tentei adicioná-los, adicionando um arquivo para /etc/ld.so.conf.d/ que supera esse erro, no entanto, agora estou recebendo o seguinte erro:

    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

Eu gostaria de receber qualquer ajuda que alguém possa me fornecer. Se eu puder fornecer mais informações, por favor me avise.

Obrigado.

    
por johnmcd 02.07.2012 / 23:53

3 respostas

2

O problema com referências indefinidas para as funções é porque você não liga a biblioteca libcuda usando -lcuda. O guia em por Ondřej Černotík 23.08.2012 / 17:25

1

Tudo o que preciso fazer é colocar o caminho do driver nvidia no LD_LIBRARY_PATH fazendo: exportar LD_LIBRARY_PATH = $ LD_LIBRARY_PATH: / usr / lib / nvidia-current.

    
por Sam 21.01.2014 / 04:36
0

Eu tenho o mesmo problema.

Acho que esta questão também está relacionada: "não é possível encontrar o erro -lOpenCL" ao criar o Cuda SDK

Para poder compilar as amostras cuda e openCL, fiz o seguinte.

Eu segui este guia: Como posso obter o nVidia CUDA ou o OpenCL funcionando em um laptop com placa discreta da nVidia / Intel Integrated Graphics? sem instalar o bumblebee e usando xswat ppa: link

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" 

Recarregue o PATH:

source /etc/environment 

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

Recarregue o LD_LIBRARY_PATH:

sudo ldconfig 

Editado ~ / .bash.rc, adicionado:

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

Recarregar ~ / bash.rc

 source ~/bash.rc

Verifique se o openCL está localizado:

    ldconfig -v | grep "OpenCL"

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

As amostras devem agora compilar. No entanto, não tenha a sua esperança. Eu acho que o driver nvidia está com defeito como eu recebo o seguinte erro para amostras cuda:

[vectorAddDrv] starting...

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

e para amostras 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...
    
por kiepmad 06.07.2012 / 17:04