CMAKE Cuda/ptx 项目上的重复代码生成标志

Posted

技术标签:

【中文标题】CMAKE Cuda/ptx 项目上的重复代码生成标志【英文标题】:Duplicated code generation flags on CMAKE Cuda/ptx project 【发布时间】:2021-05-05 11:35:04 【问题描述】:

我想将 cuda 编译为 ptx 以进行嵌入。为此,我将 CMAKE 3.18.5 与 Visual Studio 16(2019) 生成器一起使用,这是项目的要求。我遇到的问题是目标标志重复compute_75,compute_75;compute_75,sm_75,因此 nvcc 拒绝将其编译为 ptx。

2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\BuildCustomizations\CUDA 11.2.targets(625,9):错误:指定了超过 1 个代码生成选项,仅当 NVCC 编译类型为“编译”时才允许 或'fatbin'。

对于一个最小的工作示例,我使用一个代码示例来说明如何从 github repo 执行此操作,它是 在 nvidia devblog 中出现。这个例子有效。 我将示例更改为需要 CMAKE 3.18(来自 3.8)并添加

set_property(TARGET CudaPTX PROPERTY CUDA_ARCHITECTURES 75)
set_property(TARGET ExportPTX PROPERTY CUDA_ARCHITECTURES off)

在第 51 行(在 target_include_directories 之后),我的问题就显现出来了。 screenshot.

    我做错了什么? 如何开始调试这样的事情? 鉴于我需要 cmake 3.18 和 vs2019,如何更改我的代码示例以进行编译?

【问题讨论】:

【参考方案1】:

这是由于 CMake 为 real and virtual devices 生成了架构,不幸的是,这与 PTX 生成不兼容。

仅使用虚拟架构使用以下力量,并修复问题:

set(CMAKE_CUDA_ARCHITECTURES 75-virtual)

【讨论】:

以上是关于CMAKE Cuda/ptx 项目上的重复代码生成标志的主要内容,如果未能解决你的问题,请参考以下文章

CMake + MSBuild 项目显示重复条目

在 CMake 中链接外部预建库 [重复]

Qt 和 CMake 因重复符号而失败

CMake 告诉我啥(Windows 上的错误)?

处理 cmake 重复的 git 子树

如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]