2014-10-04 116 views
3

我在文件kernel.cu簡單的內核PTXNVCC編譯使用cmake的cuda_compile_ptx

__global__ void add1(double * pi, double c) 
{ 
    *pi += c; 
} 

,並可以很容易地把它編譯成一個PTX文件kernel.ptx:

NVCC -ptx kernel.cu

現在,我想重現使用cmake具有以下的CMakeLists.txt相同的行爲:

cmake_minimum_required(VERSION 2.8) 
project(cmake_ptx) 
find_package(CUDA REQUIRED) 
cuda_compile_ptx(
    test 
    kernel.cu 
) 

但是當我鍵入

cmake的。 & & make

沒有建立ptx文件。如何使用cmake重現上述nvcc命令的行爲?特別是,如何:

回答

5

cuda_compile_ptx只創建規則來生成文件,但沒有按」將它們添加到任何目標。您需要添加自定義的目標,這取決於PTX文件:

cmake_minimum_required(VERSION 2.8) 
project(cmake_ptx) 
find_package(CUDA REQUIRED) 
cuda_compile_ptx(
    cuda_ptx_files 
    kernel.cu 
) 
add_custom_target(ptx ALL 
    DEPENDS ${cuda_ptx_files} kernel.cu 
    SOURCES kernel.cu) 

現在,如果你運行makemake ptx,它會生成PTX文件。

+0

很大,這樣的作品,但它給了我一個叫 '銅文件da_compile_ptx_generated_kernel.cu.ptx'由於FindCUDA中的這一行:(請參見[線程](http://stackoverflow.com/questions/10135795/how-do-i-change-the-output-filename-of-cuda-compile -ptx-in-cmake)我上面提到) 'set(generated_file_basename「$ {cuda_target} _generated _ $ {basename} .ptx」)' 因爲我不明白如何破解FindCUDA文件只是使用我的CMakeList,有沒有辦法將存儲在$ {cuda_ptx_files}中的輸出重命名爲使用CMake的格式? – adrelino 2014-10-05 08:33:48

+0

您可以使用'add_custom_command'命名它:'add_custom_command(OUTPUT $ {CMAKE_BINARY_DIR}/my_ptx。ptx COMMAND $ {CMAKE_COMMAND} -E複製$ {cuda_ptx_files} $ {CMAKE_BINARY_DIR} /my_ptx.ptx DEPENDS $ {cuda_ptx_files})'並在'add_custom_target'中使用'$ {CMAKE_BINARY_DIR}/my_ptx.ptx'。 – jet47 2014-10-05 09:12:03

+0

謝謝你,那曾經工作過 – adrelino 2014-10-05 18:26:08

1

僅供參考,這是我的項目設置什麼工作(我有一個src /和包括/文件夾),使用技巧,從接受的答案:

cmake_minimum_required(VERSION 2.8) 

project(cmake_ptx) 

find_package(CUDA REQUIRED) 
include_directories(include/) 

cuda_compile_ptx(
    cuda_ptx_files 
    src/common_kernels.cu 
    OPTIONS -DCUDA_MATLAB 
) 
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/common_kernels.ptx COMMAND ${CMAKE_COMMAND} -E rename ${cuda_ptx_files} ${CMAKE_BINARY_DIR}/common_kernels.ptx DEPENDS ${cuda_ptx_files}) 
add_custom_target(ptx ALL 
    DEPENDS ${CMAKE_BINARY_DIR}/common_kernels.ptx src/common_kernels.cu 
    SOURCES src/common_kernels.cu 
) 

這給了我一模一樣作爲調用輸出:

NVCC -ptx的src/common_kernels.cu -I包括/ -DCUDA_MATLAB