由于较新的驱动程序随 CUDA 运行时一起提供(我可以在驱动程序下载页面中选择 9.1 或 9.2),我的问题是:我的库(内部使用 CUDA 内核)应该随附-lcudart_static吗?
我在使用 9.1 CUDA 驱动程序的系统上启动使用 9.2 编译的内核时遇到问题。确保我的库可以在安装了最新 CUDA 驱动程序的任何地方运行的最“兼容”的方式是什么?(我已经在编译虚拟架构)
由于较新的驱动程序随 CUDA 运行时一起提供(我可以在驱动程序下载页面中选择 9.1 或 9.2)
不,那是不正确的。驱动程序下载页面中的这一选择与每个 CUDA 版本都有与其相关联的最低要求驱动程序版本这一事实有关。这并不意味着驱动程序随 CUDA 运行时一起提供(换句话说,驱动程序不会在 linux 上安装 libcudart.so 并且从未安装过 - 通过对全新安装进行一些仔细的实验,您可以向自己证明这一点。)
一些补充意见:
-lcudart_static实际上是当前/最近版本的默认值nvcc。您可以通过阅读nvcc 手册来发现这一点。因此,默认情况下,您的可执行文件在编译/构建时nvcc应该已经静态链接到与nvcc您用于编译的版本相对应的 CUDA 运行时库。您可能需要指定此或类似内容的原因是,如果您正在使用 gnu 工具链(在 linux 上)而不是nvcc.
正如您所猜测的那样,静态链接到 CUDA 运行时库的目的是使应用程序可以构建为不需要安装 CUDA 工具包即可正常运行。它只需要一台安装了适当 GPU 驱动程序的机器。
确保应用程序在安装了一系列 GPU 驱动程序的一系列机器上运行的最兼容方法是使用最旧的CUDA 工具包编译您的应用程序,以满足您打算涵盖的范围内最早的 GPU 驱动程序的需求. 同样,您可以参考此处的表格。