2014-10-04 110 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