cudart_static - 什么时候需要?

cudart_static - when is it necessary?

由于较新的驱动程序随 CUDA 运行time 一起提供(我可以在驱动程序下载页面中选择 9.1 或 9.2)我的问题是:我的库(内部使用 CUDA 内核)是否应该随 -lcudart_static?

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

Since newer drivers ship with the CUDA runtime (I can choose 9.1 or 9.2 in the drivers download page)

不,这是不正确的。驱动程序下载页面中的选择与每个 CUDA 版本都有 这一事实有关。这并不意味着驱动程序随 CUDA 运行time 一起提供(换句话说,驱动程序不会在 linux 上安装 libcudart.so 并且从未安装过 - 在全新安装上进行一些仔细的实验,你可以自己证明这一点。)

一些补充意见:

-lcudart_static 实际上是 默认 current/recent 版本的 nvcc。您可以通过阅读 the nvcc manual 来发现这一点。因此,默认情况下,您的executable,当compiled/built和nvcc应该已经静态链接到nvcc版本对应的CUDA 运行时间库您正在使用的编译。你可能需要指定这个或类似的东西的原因是,如果你正在构建一个应用程序,例如gnu 工具链(在 linux 上)而不是 nvcc.

静态链接到 CUDA 运行time 库的目的是,正如您所猜测的那样,这样就可以构建一个应用程序,不需要安装 CUDA 工具包来 运行正确。它只需要一台安装了正确 GPU 驱动程序的机器。

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