我在文件kernel.cu中有简单的内核
__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命令的行为?特别是,如何:
将ptx文件的独立编译添加到目标(例如all):我注意到当同一个CMakeFile中有另一个cuda_add_executable时,它也会构建ptx文件,否则不会.
将文件命名为源文件,但使用.ptx而不是.cu结尾:与此问题相关: 如何在CMake中更改cuda_compile_ptx的输出文件名?
jet47.. 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)
现在,如果您运行make
或make ptx
,它将生成ptx文件.
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)
现在,如果您运行make
或make ptx
,它将生成ptx文件.