我在文件kernel.cu中有简单的内核
__global__ void add1( double * pi, double c )
{
*pi += c;
}
并且可以使用:
轻松地将其编译为ptx文件kernel.ptxnvcc -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。 &安培;&安培;使
没有构建ptx文件。如何使用cmake重现上述nvcc命令的行为?特别是,如何:
将ptx文件的独立编译添加到目标(例如全部):我注意到当同一个CMakeFile中有另一个cuda_add_executable时,它也会构建ptx文件,否则不会
将文件命名为源文件,但使用.ptx而不是.cu结尾: 与此问题相关: How do I change the output filename of cuda_compile_ptx in CMake?
答案 0 :(得分: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文件。
答案 1 :(得分: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 include / -DCUDA_MATLAB