NVCC使用CMAKE的cuda_compile_ptx编译为ptx

adr*_*ino 3 cuda cmake nvcc

我在文件kernel.cu中有简单的内核

__global__ void add1( double * pi, double c ) 
{
    *pi += c;
}
Run Code Online (Sandbox Code Playgroud)

并且可以使用以下命令轻松将其编译为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
)
Run Code Online (Sandbox Code Playgroud)

但是当我打字的时候

cmake.&& make

没有构建ptx文件.如何使用cmake重现上述nvcc命令的行为?特别是,如何:

  • 将ptx文件的独立编译添加到目标(例如all):我注意到当同一个CMakeFile中有另一个cuda_add_executable时,它也会构建ptx文件,否则不会.

  • 将文件命名为源文件,但使用.ptx而不是.cu结尾:与此问题相关: 如何在CMake中更改cuda_compile_ptx的输出文件名?

jet*_*t47 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)
Run Code Online (Sandbox Code Playgroud)

现在,如果您运行makemake ptx,它将生成ptx文件.