【发布时间】:2018-12-10 18:33:51
【问题描述】:
由于较新的驱动程序附带 CUDA 运行时(我可以在驱动程序下载页面中选择 9.1 或 9.2),我的问题是:我的库(内部使用 CUDA 内核)是否应该附带 -lcudart_static?
我在使用 9.1 CUDA 驱动程序的系统上启动使用 9.2 编译的内核时遇到问题。确保我的库在安装了最新 CUDA 驱动程序的任何地方都能运行的最“兼容”方式是什么? (我已经在为虚拟架构进行编译了)
【问题讨论】:
由于较新的驱动程序附带 CUDA 运行时(我可以在驱动程序下载页面中选择 9.1 或 9.2),我的问题是:我的库(内部使用 CUDA 内核)是否应该附带 -lcudart_static?
我在使用 9.1 CUDA 驱动程序的系统上启动使用 9.2 编译的内核时遇到问题。确保我的库在安装了最新 CUDA 驱动程序的任何地方都能运行的最“兼容”方式是什么? (我已经在为虚拟架构进行编译了)
【问题讨论】:
由于较新的驱动程序附带 CUDA 运行时(我可以在驱动程序下载页面中选择 9.1 或 9.2)
不,这是不正确的。驱动程序下载页面中的选择与每个 CUDA 版本都有a minimum required driver version associated with it 的事实有关。这并不意味着驱动程序附带 CUDA 运行时(换句话说,驱动程序不会在 linux 上安装 libcudart.so 并且从未安装过 - 通过对全新安装进行一些仔细的实验,您可以向自己证明这一点。)
一些额外的 cmets:
-lcudart_static 实际上是nvcc 的当前/最新版本的默认。您可以通过阅读the nvcc manual 来发现这一点。因此,默认情况下,您的可执行文件在使用nvcc 编译/构建时应该已经静态链接到与您用于编译的nvcc 版本相对应的CUDA 运行时库。您可能需要指定此内容或类似内容的原因是,如果您正在构建一个应用程序,例如gnu 工具链(在 linux 上)而不是 nvcc。
静态链接到 CUDA 运行时库的目的是,正如您所猜测的那样,可以以不需要安装 CUDA 工具包即可正常运行的方式构建应用程序。它只需要一台安装了正确 GPU 驱动程序的机器。
确保应用程序能够在安装了一系列 GPU 驱动程序的一系列机器上运行的最兼容方法是使用满足您打算涵盖的范围内最早的 GPU 驱动程序。同样,您可以参考表格here。
【讨论】:
kernel_launching<<<..>>> 使用 CUDA 9.2 在低于 396.xx 的驱动程序上编译的应用程序时出现的问题(正如您链接的那样,它是支持 9.2 的最低要求)?