0

動的並列処理を使用する GTX TITAN があります。

「-rdc = true」とフラグ「-lcudadevrt」を追加していくつかのテストを行いましたが、コンパイル時に常にリンク エラーが発生します。

これは私の Makefile です:

DEP                     =       main.o Optimizer.o cudaOptimizer.o
CUDA_INSTALL_PATH       = /usr/local/cuda
INC_CUDA                = -I$(CUDA_INSTALL_PATH)/include
LIB_CUDA                = -L$(CUDA_INSTALL_PATH)/lib64 -lcuda -lcudart -lcublas -lcublas_device -lcudadevrt

optx: $(DEP)
    g++ $(LIB_CUDA) -o optx $(DEP)

main.o:
    g++ $(INC_CUDA) -c main.cpp

Optimizer.o:
    g++ $(INC_CUDA) -c Optimizer.cpp

cudaOptimizer.o:
    nvcc --compiler-options '-fPIC -O3' -arch sm_35 -c cudaOptimizer.cu -rdc=true

これはアウトです:

g++ -I/usr/local/cuda/include -c main.cpp
g++ -I/usr/local/cuda/include -c Optimizer.cpp
nvcc --compiler-options '-fPIC -O3' -arch sm_35 -c cudaOptimizer.cu -rdc=true
g++ -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcublas_device -lcudadevrt -o optx main.o Optimizer.o cudaOptimizer.o
cudaOptimizer.o: In function`__sti____cudaRegisterAll_48_tmpxft_00003942_00000000_6_cudaOptimizer_cpp1_ii__Z4ciaov()':tmpxft_00003942_00000000-3_cudaOptimizer.cudafe1.cpp:(.text.startup+0x1d): undefined reference to `__cudaRegisterLinkedBinary_48_tmpxft_00003942_00000000_6_cudaOptimizer_cpp1_ii__Z4ciaov'
collect2: error: ld returned 1 exit status
make: *** [optx] Error 1

どうすればこの問題を解決できますか?

ありがとう

4

1 に答える 1

2

あなたはg ++とリンクしています。

デバイスコードのリンクを行っており、 g++ はデバイスコードを認識していないため、 nvcc とリンクする必要があります。

于 2013-10-11T22:16:26.913 に答える