- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 CMake 项目,其中包含一个包含 C++(.cpp
) 和 CUDA C++(.cu
) 文件的目标。但是我有一些问题没有解决。
在我的 CMakeLists.txt
顶部,我有:
project(my-project CUDA CXX)
对于那些困惑的人:是的,CMake 3.8 使 CUDA C++ 成为一种内在支持的语言。所以不再需要使用像 cuda_add_executable()
这样的魔法。使用标准和 native CMake 命令一切正常。此外,显然您可以在 CMake 的 project()
命令中设置多种语言。请参阅:https://devblogs.nvidia.com/parallelforall/building-cuda-applications-cmake/
我现在的问题是我想以 CMake 的方式为不同的编译器设置不同的编译器标志(即,使用 target_compile_options()
命令)。我能想到的第一个解决方案是:
add_compile_options(my_target
PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:-Wsign-conversion>
$<$<COMPILE_LANGUAGE:CUDA>:-arch=compute_30>
)
但是,我觉得这段代码有点难看。我能想到的另一种选择是创建两个单独的目标,一个用于 .cpp
文件,一个用于 .cu
文件。然后我将能够分别为 GCC 和 NVCC 目标设置编译器选项。
上述两种解决方案似乎都有效,但我正在尝试找出更好的方法。有什么建议么?优缺点?
当我想包含多个编译器标志时,我也遇到了第一个解决方案的问题。拆分它们的正确方法是什么?只是在不同标志之间使用空格?如果我想跨越多行表达式怎么办?如果我尝试以任何方式这样做,CMake 都会给我语法错误。
最后,我想避免手动更改 CMAKE_CXX_FLAGS
和 CMAKE_CUDA_FLAGS
。
提前致谢
最佳答案
我同意@OutOfBound 的评论,最简单的解决方案是将您的代码拆分到子项目中。这样您就可以独立控制每个项目标志,甚至可以构建多个具有不同标志的 .cu
文件(如果需要)。如果这变得更复杂,您可能还想使用 nvcc
构建内核并使用 cuModuleLoad*()
加载它们。
关于c++ - CMake 3.8+ : Setting different compiler flags for projects that include both . cpp (C++) 和 .cu (CUDA) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46903060/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
由于cuda的“.cu”文件基本上是c,是否有办法使用doxygen生成“.cu”文件的文档?我注意到NVIDIA使用doxygen生成cuda的文档。但是,当我使用doxygen时,“。cu”文件将
标准约定似乎是给CUDA源代码文件一个.cu扩展名,以将它们与具有.c扩展名的C文件区分开。特定于CUDA的头文件的对应约定是什么?有一个吗? 最佳答案 某些人(包括CUDA SDK)对CUDA头文件
我希望编译后的 CUDA 代码能够在任何 Nvidia GPU 上运行,因此我使用以下选项编译每个 .cu 文件: -gencode arch=compute_20,code=sm_20 -genco
我希望编译后的 CUDA 代码能够在任何 Nvidia GPU 上运行,因此我使用以下选项编译每个 .cu 文件: -gencode arch=compute_20,code=sm_20 -genco
两个事实: CUDA 5.0 允许您在不同的目标文件中编译 CUDA 代码,以便稍后进行链接。 CUDA 架构 2.x 不再自动内联函数。 像往常一样在 C/C++ 中,我实现了一个函数 __devi
我有一个包含 cuda 文件的 visual studio c++ 项目(使用 VS 2010 和 insight 2)。这是代码 你好.h : #pragma once #pragma warnin
我想获取 HEVC HM 解码器上的 CU/PU 级别信息。我还想获得一些统计数据,以了解解码不同类型的 CU(帧内、帧间 - 单向/双向)平均需要多少时间。 HM 编码器中现有的调试是不合适的,因为
我正在使用 cu 实用程序将我的 Cubieboard 1 连接到我的笔记本电脑。当我启动我的 Cubieboard 时,它会将启动日志发送到我的终端。 我想要的是输出应该显示在我的屏幕上并发送到我指
这个问题已经有答案了: pandas select from Dataframe using startswith (5 个回答) 已关闭 3 年前。 这似乎是直截了当的事情,但找不到合适的答案。 我
我想在 cu 命令中执行“sw i01”并退出 cu(使用“~.”) 在一行或文件 bash 中,因为 il 会从远处执行它们服务器 在这张图片中我放了: cu -s 19200 -l /dev/tt
我想知道 .cu 编译单元中隐式包含了哪些 header 。例如,让我们举一些基本的例子: #include __global__ void kernel(int a, int b, int *c)
我最近将 CU9 安装到 BizTalk 2010。Microsoft 网站 (https://support.microsoft.com/en-us/kb/3136004) 声称所有以前的 CU 都
我有两个 cuda 文件,分别是 A 和 B。我需要从 A 到 B 调用一个函数,比如.. __device__ int add(int a, int b) //this is a function
我有以下文件: // Main.cpp #include "kernel_util.cuh" int main() { call_kernel(); } // kernel_util.cuh
我正在尝试使用 cu 通过 ttyS0 与另一个 UNIX 设备进行通信(谷歌“cu unix”以了解有关 cu 的更多信息)。我的程序运行得很好,但问题是,在第一次执行程序(建立连接、读取日志文件和
我正在学习使用 CUDA。我写了两个 .cu 文件,一个包含主要功能,另一个用作提供所有其他功能的库。但是我在编译这两个 .cu 文件时遇到了多个定义错误。我展示了一个玩具示例如下: main.cu
我正在尝试将 SigmoidCrossEntropyLossLayer 修改为我自己的版本。我只实现了 .cpp 版本。已经有一个 SigmoidCrossEntropyLossLayer 的 .cu
如何将 cuda 内核代码和项目中的其他 cpp 代码分开?我想将所有内核定义收集在一个文件中,因为其他 cpp 文件在需要时调用它们。我试图在 kernel.cu 中编写所有内核并通过包含 kern
我换了一个新的 GPU GeForce GTX 980 cc 5.2,所以它必须支持动态并行。但是,我什至无法编译一个简单的代码(来自编程指南)。我不会在这里提供它(没有必要,只是有一个全局内核调用另
我是一名优秀的程序员,十分优秀!