cudart_static - 啥时候需要?
Posted
技术标签:
【中文标题】cudart_static - 啥时候需要?【英文标题】:cudart_static - when is it necessary?cudart_static - 什么时候需要? 【发布时间】:2018-12-10 18:33:51 【问题描述】:由于较新的驱动程序附带 CUDA 运行时(我可以在驱动程序下载页面中选择 9.1 或 9.2),我的问题是:我的库(内部使用 CUDA 内核)是否应该附带 -lcudart_static
?
我在使用 9.1 CUDA 驱动程序的系统上启动使用 9.2 编译的内核时遇到问题。确保我的库在安装了最新 CUDA 驱动程序的任何地方都能运行的最“兼容”方式是什么? (我已经在为虚拟架构进行编译了)
【问题讨论】:
【参考方案1】:由于较新的驱动程序附带 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 的最低要求)?
我已经编辑了我的答案。很简单,您需要使用较旧的 CUDA 工具包版本进行构建,以支持您希望支持的范围内最旧的驱动程序。 CUDA 具有前向兼容性,因此此类应用程序(具有静态 cudart 链接)应在较新的安装上正确运行,但目前对于针对在旧驱动程序上运行的较新工具包编译的应用程序不具有向后兼容性。以上是关于cudart_static - 啥时候需要?的主要内容,如果未能解决你的问题,请参考以下文章
归纳一下html中啥时候需要分号啥时候需要冒号啥时候中间啥都不加而是空格