cudart_static - 何时需要使用?

3
自从新的驱动程序与CUDA运行时一起发布(我可以在驱动程序下载页面中选择9.1或9.2),我的问题是:我的库(内部使用CUDA内核)是否应该与-lcudart_static一起发布?
我在使用9.2 CUDA驱动程序的系统上启动已编译的内核时遇到了问题。确保我的库在安装了最新的CUDA驱动程序的任何地方都能运行的最兼容的方法是什么?(我已经为虚拟架构编译了代码)
1个回答

7

由于新的驱动程序附带CUDA运行时(我可以在驱动程序下载页面上选择9.1或9.2)

不,那是不正确的。驱动程序下载页面中的这个选择与每个CUDA版本都有一个最低所需的驱动程序版本相关。这并不意味着驱动程序附带CUDA运行时(换句话说,在Linux上,驱动程序不会安装libcudart.so,从未安装过-通过一些仔细的实验,您可以自己证明这一点。)

一些额外的评论:

-lcudart_static 实际上是当前/最近版本的 nvcc 的默认设置。 您可以通过阅读 nvcc 手册 来了解这一点。 因此,使用 nvcc 编译/构建时,默认情况下您的可执行文件应已静态链接到与您用于编译的 nvcc 版本相对应的 CUDA 运行时库。 如果您正在使用 gnu 工具链(在 Linux 上)而不是 nvcc 构建应用程序,则可能需要指定此选项或类似选项。

静态链接到 CUDA 运行时库的目的正如您所猜测的那样,是使应用程序以这种方式构建,以便它不需要安装 CUDA 工具包即可正确运行。 它只需要一个安装有适当 GPU 驱动程序的机器。

最兼容的方法是使用最旧的CUDA工具包编译您的应用程序,以满足您想覆盖的GPU驱动程序范围中最早的驱动程序的需求。您可以参考这里的表格。

谢谢,那么当我在使用CUDA 9.2编译的应用程序在低于396.xx的驱动程序上运行时出现问题时,我该如何解决呢?(正如您提供的链接所述,396.xx是支持9.2的最低版本) - Dean
我已经编辑了我的答案。简单来说,您需要使用旧的CUDA工具包版本进行构建,尽可能旧以支持您希望支持的最老的驱动程序。CUDA具有向前兼容性,因此这样的应用程序(使用静态cudart链接)应该在新的安装中正确运行,但是目前它不支持向后兼容性,对于使用较新工具包编译并在较旧驱动程序上运行的应用程序。 - Robert Crovella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接