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

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

并且可以使用以下命令轻松将其编译为 ptx 文件 kernel.ptx:



现在,我想使用带有以下 CMakeLists.txt 的 cmake 重现相同的行为:
cmake_minimum_required(VERSION 2.8)
project(cmake_ptx)
find_package(CUDA REQUIRED)
cuda_compile_ptx(
  test
  kernel.cu
)

但是当我打字的时候



没有构建 ptx 文件。如何使用 cmake 重现上述 nvcc 命令的行为?特别是,如何:
  • 将 ptx 文件的独立编译添加到目标(例如所有) :我注意到当同一个 CMakeFile 中有另一个 cuda_add_executable 时,它​​也会构建 ptx 文件,否则不会。
  • 像源文件 一样命名文件,但使用 .ptx 而不是 .cu 结尾:
    与这个问题相关:
    How do I change the output filename of cuda_compile_ptx in CMake?
  • 最佳答案

    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 文件。

    关于cuda - NVCC 使用 CMAKE 的 cuda_compile_ptx 编译为 ptx,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26198294/

    10-13 04:49