Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CMAKE';将NVCC编译为ptx;s cuda_编译_ptx_Cuda_Cmake_Nvcc - Fatal编程技术网

使用CMAKE';将NVCC编译为ptx;s cuda_编译_ptx

使用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

我在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复制相同的行为:

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相同的文件名?