2017-11-20 11 views
0

cmakeとの動的並列処理を使用するCUDAコードをコンパイルする必要があります。cmakeと3.5計算能力でCUDAコードをコンパイル

#include <stdio.h> 

__global__ void childKernel() { 
    printf("Hello ");  
} 

__global__ void parentKernel() {  
    childKernel<<<1,1>>>(); 
    cudaDeviceSynchronize();  
    printf("World!\n");  
} 

int main(int argc, char **argv){ 

    parentKernel<<<1, 1>>>(); 

    return 0; 
} 

とcmakeのは以下の通りである: コードがある

cmake_minimum_required(VERSION 2.8) 

find_package(CUDA QUIET REQUIRED) 

include_directories(/usr/include) 
include_directories(/usr/local/cuda/lib) 
include_directories(/usr/local/cuda-8.0/lib) 
include_directories(/usr/local/cuda/include) 
include_directories(/usr/local/cuda-8.0/include) 

set(CUDA_SEPARABLE_COMPILATION ON) 
find_package(CUDA QUIET REQUIRED) 
set(CUDA_PROPAGATE_HOST_FLAGS OFF) 

set(
    CUDA_NVCC_FLAGS 
    ${CUDA_NVCC_FLAGS}; 
    -arch=compute_35 -rdc=true -lcudadevrt 
) 

cuda_add_executable(
    prova 
    test.cu 
) 

私は-arch=compute_35 -rdc=true -lcudadevrtを渡すNVCCと直接コードをコンパイルしようとしたし、それは完全にコンパイルしますが、 は私がしようとすると、 cmakeでコンパイルすると、次のエラーが返されます:

CMakeFiles/prova.dir/prova_intermediate_link.o: In function `__cudaRegisterLinkedBinary_66_tmpxft_00001101_00000000_13_cuda_device_runtime_compute_62_cpp1_ii_8b1a5d37': 
link.stub:(.text+0xcc): undefined reference to `__fatbinwrap_66_tmpxft_00001101_00000000_13_cuda_device_runtime_compute_62_cpp1_ii_8b1a5d37' 
link.stub:(.text+0xd0): undefined reference to `__fatbinwrap_66_tmpxft_00001101_00000000_13_cuda_device_runtime_compute_62_cpp1_ii_8b1a5d37' 
collect2: error: ld returned 1 exit status 
CMakeFiles/prova.dir/build.make:200: recipe for target 'prova' failed 
make[2]: *** [prova] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/prova.dir/all' failed 
make[1]: *** [CMakeFiles/prova.dir/all] Error 2 
Makefile:83: recipe for target 'all' failed 
make: *** [all] Error 2 

答えて

1

表示されている未定義のシンボルは、libcudadevrt.a。私はそれにリンクするCMakeに言っているが、コンパイラはそれを見つけることができないようだ。

VERBOSE=1 make 

を、あなたがライブラリを/usr/local/cuda/lib64を検索しているかどうかを確認するために出力を検査:コマンドラインでこれを試してみてください。

これは無関係かもしれませんが、私はまた、CMakeにヘッダファイルのために/usr/local/cuda/lib/usr/local/cuda-8.0/libを検索するように指示していることに気付きました。これらのディレクトリにはライブラリのみが含まれているため、これは間違っています。答えを

0

おかげで、私は、TegraはのX2(compute_62)の正確な計算機能を使用しようとしました、と私は冗長な作りの出力を検査していると私は次の出力が見つかりました:それは

CMakeFiles/prova.dir/prova_generated_test.cu.o CMakeFiles/prova.dir/prova_intermediate_link.o -o prova -rdynamic /usr/local/cuda-8.0/lib64/libcudart_static.a -lpthread -ldl -lrt 

をリンカが/usr/local/cuda-8.0/lib64/libcudart_static.aを検索しようとしますが、libcudadevrt.aは検索しないようです。

関連する問題