使用CMAKE';将NVCC编译为ptx;s cuda_编译_ptx
我在kernel.cu文件中有一个简单的内核使用CMAKE';将NVCC编译为ptx;s cuda_编译_ptx,cuda,cmake,nvcc,Cuda,Cmake,Nvcc,我在kernel.cu文件中有一个简单的内核 __global__ void add1( double * pi, double c ) { *pi += c; } 并且可以使用以下工具轻松地将其编译为ptx文件kernel.ptx: nvcc-ptx kernel.cu __global__ void add1( double * pi, double c ) { *pi += c; } 现在,我想通过以下CMakeLists.txt使用cmake复制相同的行为: cm
__global__ void add1( double * pi, double c )
{
*pi += c;
}
并且可以使用以下工具轻松地将其编译为ptx文件kernel.ptx:
nvcc-ptx kernel.cu
__global__ void add1( double * pi, double c )
{
*pi += c;
}
现在,我想通过以下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文件的独立编译添加到目标(例如all):我注意到,当同一CMAKE文件中有另一个cuda_add_可执行文件时,它也会构建ptx文件,否则不会
- 将文件命名为与源文件类似的名称,但以.ptx而不是.cu结尾: 关于这个问题:
cuda\u compile\u 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文件。仅供参考,这是我的项目设置(我有一个src/和一个include/文件夹)的工作原理,使用接受答案中的提示:
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
很好,这是可行的,但是它给了我一个名为
cuda\u compile\u ptx\u generated\u kernel.cu.ptx
的文件,因为FindCUDA中的这一行:(见我上面提到的)set(generated\u file\u basename“${cuda\u target}}u generated\u${basename}.ptx”)
因为我不知道如何仅仅使用我的CMakeList来破解FindCUDA文件,有没有办法使用CMake将存储在${cuda_ptx_files}中的输出重命名为我想要的格式?您可以使用add_custom_命令
:add_custom_命令(output${CMake_BINARY_DIR}/my_ptx.ptx命令${CMake command}-E copy${cuda_ptx_files}${CMake BINARY_DIR
并在add_custom_target
@jet47中使用${CMAKE_BINARY_DIR}/my_ptx.ptx
:我是否可以将复制设置为通用,以便在生成.o文件的位置生成.ptx文件?或者在其他地方,但使用与.cu相同的文件名?