cudart_静态-何时需要?

cudart_静态-何时需要?,cuda,nvcc,Cuda,Nvcc,由于CUDA运行时附带了较新的驱动程序(我可以在驱动程序下载页面中选择9.1或9.2),我的问题是:我的库(内部使用CUDA内核)是否应随-lcudart\u static一起提供 我在使用9.1 CUDA驱动程序的系统上启动用9.2编译的内核时遇到问题。确保我的库在安装最新CUDA驱动程序的任何地方都能运行的最“兼容”的方法是什么?(我已经在为虚拟体系结构进行编译了) 由于CUDA运行时附带了较新的驱动程序(我可以在驱动程序下载页面中选择9.1或9.2) 不,那是不对的。驱动程序下载页面中的选

由于CUDA运行时附带了较新的驱动程序(我可以在驱动程序下载页面中选择9.1或9.2),我的问题是:我的库(内部使用CUDA内核)是否应随
-lcudart\u static
一起提供

我在使用9.1 CUDA驱动程序的系统上启动用9.2编译的内核时遇到问题。确保我的库在安装最新CUDA驱动程序的任何地方都能运行的最“兼容”的方法是什么?(我已经在为虚拟体系结构进行编译了)

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

不,那是不对的。驱动程序下载页面中的选择与每个CUDA版本都具有相同的功能这一事实有关。这并不意味着驱动程序随CUDA运行时一起提供(换句话说,驱动程序在linux上不安装libcudart.so,而且从来没有安装过——通过在干净的安装上进行仔细的实验,您可以向自己证明这一点。)

一些补充意见:

-lcudart\u static
实际上是当前/最新版本的
nvcc
的默认设置。你可以通过阅读来发现这一点。因此,默认情况下,当使用
nvcc
编译/构建可执行文件时,应已静态链接到CUDA运行时库,该库对应于用于编译的
nvcc
版本。您可能需要指定此项或类似项的原因是,如果您正在使用gnu工具链(在linux上)而不是
nvcc
构建应用程序

正如您所猜测的那样,静态链接到CUDA运行时库的目的是使应用程序的构建方式不需要安装CUDA toolkit即可正常运行。它只需要一台安装了正确GPU驱动程序的机器


要确保应用程序在一系列安装了GPU驱动程序的机器上运行,最兼容的方法是使用最旧的CUDA工具包编译应用程序,以满足您打算涵盖的范围内最早的GPU驱动程序的需要。同样,您可以参考下表。

谢谢,当
kernel\u在396.xx以下的驱动程序上启动使用CUDA 9.2编译的应用程序时,我该如何解决出现的问题(这是支持9.2的最低链接)?我已经编辑了我的答案。非常简单,您需要使用一个较旧的CUDA工具包版本进行构建,该版本尽可能旧,以支持您希望支持的范围内最旧的驱动程序。CUDA具有前向兼容性,因此此类应用程序(具有静态cudart链接)应在较新的安装上正确运行,但对于根据较旧的驱动程序上运行的较新工具包编译的应用程序,CUDA目前不具有后向兼容性。