Проблемы с компиляцией кода CUDA - PullRequest
0 голосов
/ 31 августа 2011

Я хочу скомпилировать этот проект рендеринга томов .Я установил инструментарий CUDA и SDK на свой компьютер с Ubuntu 10.10 и смог запустить его примеры, но я получаю следующее:

antonio@antonio-desktop:~/vfray$ make
make -f MakefileCPU
make[1]: Entering directory `/home/antonio/vfray'
make[1]: `vfRayCPU' is up to date.
make[1]: Leaving directory `/home/antonio/vfray'
make -f MakefileCUDA
make[1]: Entering directory `/home/antonio/vfray'
nvcc  -o vfRay.cu_o -c vfRay.cu --ptxas-options=-v --compiler-bindir=/usr/bin/gcc-4.3 --compiler-options -fno-strict-aliasing   -I. -I/usr/local/cuda/include -I/usr/local/cuda/SDK/C/common/inc -DUNIX -O3 
/usr/bin/gcc-4.3: No such file or directory
make[1]: *** [vfRay.cu_o] Error 1
make[1]: Leaving directory `/home/antonio/vfray'
make: *** [cuda] Error 2

Как я могу это исправить?


Редактировать: при выполнении шагов, описанных talonmies в файле vfRay.cu, я получаю:

  antonio@antonio-desktop:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" vfRay.cu
    vfRay.cu:25: fatal error: cutil.h: No such file or directory
    compilation terminated.

Новое редактирование: хорошо, когда я включил -L для включения каталога cutil.h, я получил это для vfRay.cu и vfRayKernel.cu.

antonio@antonio-desktop:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v"  vfRay.cu -I/home/antonio/NVIDIA_GPU_Computing_SDK/C/common/inc/
vfRay.cu:48: fatal error: vfRayKernel.cu: No such file or directory
compilation terminated.
antonio@antonio-desktop:~/vfray$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v"  vfRayKernel.cu -I/home/antonio/NVIDIA_GPU_Computing_SDK/C/common/inc/
vfRayKernel.cu(80): error: identifier "BLOCK_SIZE" is undefined

vfRayKernel.cu(181): error: identifier "BLOCK_SIZE" is undefined

vfRayKernel.cu(262): error: identifier "BLOCK_SIZE" is undefined

3 errors detected in the compilation of "/tmp/tmpxft_000064a5_00000000-4_vfRayKernel.cpp1.ii".

Я думаю, что это проблема make-файла, я сомневаюсь, что эта компиляция будет работать без ее изменения.

Это make-файл для проекта:

#
# Makefile CPU / CUDA
#

#-----------------------------------------------------------------------------

all:    cpu cuda

cpu:        MakefileCPU
            make -f MakefileCPU

cuda:       MakefileCUDA
            make -f MakefileCUDA

clean:
            make -f MakefileCPU clean
            make -f MakefileCUDA clean

Я сделал этот мод и он не работает:

all:    cpu cuda

cpu:    MakefileCPU
        make -f MakefileCPU

cuda:   MakefileCUDA
        make -f MakefileCUDA
        nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v"

clean:
        make -f MakefileCPU clean
        make -f MakefileCUDA clean

Редактировать: Я изменил файл common.mk так, чтобы строка 93 указывала на gcc 4.4, теперь я получаю сообщение об отсутствии cutil.Где я могу изменить это?Я попытался поместить его в папку ld в usr / bin, но ld - это программа, и я не могу стереть ее.

antonio @ antonio-desktop: ~ / vfray $ make

make -f MakefileCPU
make[1]: Entering directory `/home/antonio/vfray'
make[1]: `vfRayCPU' is up to date.
make[1]: Leaving directory `/home/antonio/vfray'
make -f MakefileCUDA
make[1]: Entering directory `/home/antonio/vfray'
g++ -fPIC -o .///vfRay  .///vfRayPreComp.o  .///vfRay.cu_o -L/usr/local/cuda/lib64 -L/usr/local/cuda/SDK/C/lib -L/usr/local/cuda/SDK/C/common/lib -lcudart -lGL -lGLU -lglut   -L/usr/local/cuda/lib64 -L/usr/local/cuda/SDK/C/lib -L/usr/local/cuda/SDK/C/common/lib -lcutil
/usr/bin/ld: cannot find -lcutil
collect2: ld returned 1 exit status
make[1]: *** [vfRay] Error 1
make[1]: Leaving directory `/home/antonio/vfray'
make: *** [cuda] Error 2

1 Ответ

3 голосов
/ 31 августа 2011

nvcc --compiler-bindir, как следует из названия, принимает в качестве аргумента каталог, а не сам исполняемый файл компилятора.Чтобы использовать альтернативный компилятор таким образом, вам нужно передать каталог, который содержит либо исполняемый файл с именем gcc, либо ссылку с именем gcc, которая указывает на допустимую версию gcc.Самый простой способ сделать это - создать каталог locate, содержащий символическую ссылку на поддерживаемую версию компилятора.Примерно так:

1.   user@cuda:~$ mkdir jdir

2.   user@cuda:~$ cd jdir

3.   user@cuda:~/jdir$ ln -s /usr/bin/gcc-4.4 ./gcc

4.   user@cuda:~$ ls -l jdir
     total 0
     lrwxrwxrwx 1 user user 12 2011-08-31 08:34 gcc -> /usr/bin/gcc-4.4

5.   user@cuda:~/jdir$ cd ..

6.   user@cuda:~$ nvcc --compiler-bindir=./jdir -arch=sm_20 -c -Xptxas="-v" particles3.cu
     ptxas info    : Compiling entry function '_Z6pointsP6float4f' for 'sm_20'
     ptxas info    : Function properties for _Z6pointsP6float4f
         0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
     ptxas info    : Used 29 registers, 44 bytes cmem[0], 4 bytes cmem[14], 12 bytes cmem[16]

РЕДАКТИРОВАТЬ 1:

В коде, который вы пытаетесь собрать, вам нужно отредактировать файл common.mk, строка 93 и измените параметр --compiler-bindir на абсолютный путь, который вы указали где-нибудь, содержащим ссылки, как показано выше.


РЕДАКТИРОВАТЬ 2:

Код, который вы пытаетесь скомпилировать, основан на NVIDIA GPU Computing SDK .Вам нужно будет либо установить переменную окружения ROOT_DIR, чтобы она указала на дерево C внутри дистрибутива SDK, либо изменить строку 50 файла common.mk, который поставляется с кодом, который вы пытаетесь создать.Вам также нужно убедиться, что библиотека cutil была скомпилирована, запустив make в каталоге C / common корня SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...