包含 CUDA 驱动程序 API 的应用程序需要分发哪些文件?
Which files need to be distributed with an application containing CUDA Driver API?
使用 CUDA 驱动程序 API 创建的应用程序 (exe) 需要分发的文件与使用 CUDA 运行时 API 创建的文件有何不同?
除了实际属于您的应用程序一部分的文件(即您构建的东西)之外,可能没有任何区别。
任何您打算将代码 运行 用于其上的机器都必须具有受支持的 GPU 和正确安装的驱动程序,其版本足够新以支持您用于构建应用程序的任何构建环境(例如 CUDA 版本) .
您无法通过选择特定的可再分发文件来影响它。
因此,我们唯一剩下的就是您的应用程序本身。
一个正确构建的驱动程序 API 应用程序只需要我描述的上述设置,除了构成您的应用程序本身的任何文件。
一个正确构建的 运行time API 应用程序只需要我描述的上述设置,除了构成您的应用程序本身的任何文件。
一个 运行time API 应用程序默认 nvcc
构建 links 静态 到 CUDA 运行time API 库(例如 linux 上的 libcudart.so,但从技术上讲,在讨论的这一点上,参考是 libcudart_static.a)。如果你构建你的 CUDA 运行time 应用程序并且不知何故不 link 到静态 CUDA 运行time API 库(这可以通过指定一个非默认开关到nvcc
或通过 linking 选项,例如 linux 上的 g++),那么您还必须重新分发 CUDA 运行time API 库(例如 libcudart.so 和它 symlinks 的任何东西)。这些是 valid redistributables.
此讨论未考虑其他库,例如 CUBLAS、CURAND 以及可能的许多其他库。您没有询问它们,从概念上讲,这与询问如何重新分发任何其他库(如 fftw3)没有什么不同。此外,对于这些库,分发使用 运行time API 构建的应用程序与分发使用 API 驱动程序构建的应用程序之间没有任何区别。您是否需要重新分发任何其他库将主要取决于这些库如何 linked 到您的应用程序(静态或动态)。
在本次讨论中,我避免讨论实际构成您的应用程序的文件。这里几乎有无限的多样性,因为您可以创建一个应用程序,该应用程序使用您自己创建的任意数量的动态 linked 库,显然必须与您的应用程序一起分发。
另一方面,当然可以创建 运行只需要一个文件(“可执行文件”)的时间应用程序。
我个人不知道如何使用驱动程序 API(除了通过 ),所以对于驱动程序 API 应用程序,考虑到应用程序文件本身,在大多数情况下您可能会分发至少 2 个文件。显然,您可以想出自解压存档样式包装器或其他隐藏文件结构并使其看起来好像您的驱动程序 API 应用程序实际上只包含 1 个文件的方法。
使用 CUDA 驱动程序 API 创建的应用程序 (exe) 需要分发的文件与使用 CUDA 运行时 API 创建的文件有何不同?
除了实际属于您的应用程序一部分的文件(即您构建的东西)之外,可能没有任何区别。
任何您打算将代码 运行 用于其上的机器都必须具有受支持的 GPU 和正确安装的驱动程序,其版本足够新以支持您用于构建应用程序的任何构建环境(例如 CUDA 版本) .
您无法通过选择特定的可再分发文件来影响它。
因此,我们唯一剩下的就是您的应用程序本身。
一个正确构建的驱动程序 API 应用程序只需要我描述的上述设置,除了构成您的应用程序本身的任何文件。
一个正确构建的 运行time API 应用程序只需要我描述的上述设置,除了构成您的应用程序本身的任何文件。
一个 运行time API 应用程序默认 nvcc
构建 links 静态 到 CUDA 运行time API 库(例如 linux 上的 libcudart.so,但从技术上讲,在讨论的这一点上,参考是 libcudart_static.a)。如果你构建你的 CUDA 运行time 应用程序并且不知何故不 link 到静态 CUDA 运行time API 库(这可以通过指定一个非默认开关到nvcc
或通过 linking 选项,例如 linux 上的 g++),那么您还必须重新分发 CUDA 运行time API 库(例如 libcudart.so 和它 symlinks 的任何东西)。这些是 valid redistributables.
此讨论未考虑其他库,例如 CUBLAS、CURAND 以及可能的许多其他库。您没有询问它们,从概念上讲,这与询问如何重新分发任何其他库(如 fftw3)没有什么不同。此外,对于这些库,分发使用 运行time API 构建的应用程序与分发使用 API 驱动程序构建的应用程序之间没有任何区别。您是否需要重新分发任何其他库将主要取决于这些库如何 linked 到您的应用程序(静态或动态)。
在本次讨论中,我避免讨论实际构成您的应用程序的文件。这里几乎有无限的多样性,因为您可以创建一个应用程序,该应用程序使用您自己创建的任意数量的动态 linked 库,显然必须与您的应用程序一起分发。
另一方面,当然可以创建 运行只需要一个文件(“可执行文件”)的时间应用程序。
我个人不知道如何使用驱动程序 API(除了通过