【发布时间】:2019-01-17 03:01:46
【问题描述】:
我有一个相当大的 CUDA/C++ 项目,可以编译成静态库。工具链是 CUDA Toolkit 9.0/9.2 和 VS 2017。我无法更改公司工具链。我们最昂贵的内核受到 9.0 工具包中引入的 nvcc 编译器回归的影响。我已经向 Nvidia 开发者的网站提交了这个文件,并收到了回归的确认。那是大约一年前的事了,票还开着。也许 10.0 Toolkit 会修复它。
但我等不及了。所以我的计划是使用 8.0 nvcc 编译器和 v140 (VS 2015) 编译器来编译这个特定的内核。它是一个带有用于内核声明的 __device__ 装饰器的单个 .hpp 文件,以及一个带有定义的 .cu 文件。内核不调用其他内核;这是一个相当简单的内核。
从 v140 Native Tools 命令提示符,我执行了:
nvcc -x cu -arch=sm_61 -dc kernel.cu
并获得了一个kernel.obj文件。我已经阅读了NVCC documentation on CUDA Compiler Driver NVCC。我承认不完全理解。有几个编译阶段,我看不出哪种方法适合我的情况。
我的问题是如何将此目标文件链接到我更大的静态库中?如果有人能指出正确的命令系列,或者更好的是,如何将其包含到 VS 项目中,大概是 kernel.hpp 和 kernel.obj,我将不胜感激。
【问题讨论】:
-
静态库只是目标文件的集合。目标文件被添加到静态库中,而不是链接。在 Windows 上,您将使用库管理器
lib来执行此操作。您可能会发现 thread on the NVIDIA forums 很有用,我通过一个工作示例演示了在 Linux 和 Windows 上处理静态库的过程。我不处理 GUI,所以不能告诉你如何在 VS 项目中使用lib。
标签: visual-studio cuda nvcc