Build 我应该如何让CMake也为我的内核创建PTX文件

Build 我应该如何让CMake也为我的内核创建PTX文件,build,cmake,cuda,ptx,Build,Cmake,Cuda,Ptx,我正在使用CUDA代码构建一个项目,使用一个最新的CMake,该CMake具有内在的CUDA支持(版本>=3.8或更高版本,如果需要) 我如何告诉CMake为我的各种内核生成PTX文件 我试过的一些不起作用的东西: 从CMake 3.9开始,我们可以使用以下方法定义对象库,使其具有PTX而不是各种对象: 然而,这并不是问题的正确解决方案——缺少了一些东西。假设我们有ina.cu: __global__ void foo() { return; } __global__ void bar(int

我正在使用CUDA代码构建一个项目,使用一个最新的CMake,该CMake具有内在的CUDA支持(版本>=3.8或更高版本,如果需要)

我如何告诉CMake为我的各种内核生成PTX文件

我试过的一些不起作用的东西: 从CMake 3.9开始,我们可以使用以下方法定义对象库,使其具有PTX而不是各种对象:

然而,这并不是问题的正确解决方案——缺少了一些东西。假设我们有in
a.cu

__global__ void foo() { return; }
__global__ void bar(int* a) { *a = 5; }
b.cu
中:

__global__ void foo() { return; }
__global__ void bar(int* a) { *a = 5; }
我们使用以下
CMakeLists.txt
运行
cmake
make

cmake_minimum_required(VERSION 3.9)
add_library(myptx OBJECT a.cu b.cu)
set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)
未生成PTX文件,且nvcc未运行。不确定原因。

您可以将
--keep
命令行选项传递给nvcc,这将使其将所有中间文件保留在用于其他输出的同一目录中。对于较新的CMake版本,您可以编写:

target_compile_options(
    some_target
    another_target
    yet_another_target_etc
    PRIVATE 
    "--keep"
)

这应该可以做到。似乎
.ptx
在二进制文件所在的位置结束。但是-请注意,您还将获得大量其他文件:
.cpp4.ii
.cudafe1.c
.cudafe1.cpp
.fatbin
等等。因此,虽然这是可行的,但并不是一个很好的解决方案。

试着打开CUDA语言

cmake_minimum_required(VERSION 3.9)
enable_language(CUDA)
add_library(myptx OBJECT a.cu b.cu)
set_property(TARGET myptx PROPERTY CUDA_PTX_COMPILATION ON)

PTX位于
${CMAKE_BINARY_DIR}/CMakeFiles/myptx.DIR

@Tsyvarev:将一半答案移到了问题中。您想要PTX做什么?经过适当编译的二进制有效载荷同时包含PTX和SASS。这还不够吗?@Talonmes:我不介意PTX是否是从二进制文件中提取的。我只想检查PTX代码以及构建二进制文件。