哪些文件需要与包含 CUDA Driver API 的应用程序一起分发?
Posted
技术标签:
【中文标题】哪些文件需要与包含 CUDA Driver API 的应用程序一起分发?【英文标题】:Which files need to be distributed with an application containing CUDA Driver API? 【发布时间】:2021-12-23 02:00:54 【问题描述】:使用 CUDA Driver API 创建的应用程序 (exe) 与使用 CUDA Runtime API 创建的应用程序 (exe) 一起分发的文件有什么区别?
【问题讨论】:
为什么将此问题标记为“关闭”?它是如何基于意见的?这纯粹是关于基于 CUDA 驱动程序 API 或运行时 API 的使用分发应用程序所需的文件的事实问题。请至少让我知道原因,以便我提供更多信息。而且,如果这个问题需要关闭,那么为什么会存在以下类似(不一样)的问题? ***.com/questions/27014480/… 【参考方案1】:除了实际上是您应用程序一部分的文件(即您构建的东西)之外,可能没有任何区别。
您打算在其上运行代码的任何机器都必须具有受支持的 GPU 和正确的驱动程序,并且安装了足够新的版本以支持您用于构建应用程序的任何构建环境(例如 CUDA 版本)。
您无法通过选择特定的可再分发文件来影响它。
因此,我们唯一剩下的就是您的应用程序本身。
除了构成应用程序本身的任何文件之外,正确构建的驱动程序 API 应用程序只需要我描述的上述设置。
一个正确构建的运行时 API 应用程序只需要我描述的上述设置,除了构成您的应用程序本身的任何文件。
默认情况下使用nvcc
构建的运行时 API 应用程序静态链接到 CUDA 运行时 API 库(例如,Linux 上的 libcudart.so,但从技术上讲,在讨论的这一点上,参考将指向libcudart_static.a)。如果您构建您的 CUDA 运行时应用程序并且以某种方式不链接到静态 CUDA 运行时 API 库(这可以通过将非默认开关指定为 nvcc
或通过在 Linux 上使用例如 g++ 的链接选项来实现),那么您也将拥有重新分发 CUDA 运行时 API 库(例如 libcudart.so 及其符号链接的任何内容)。这些是valid redistributables。
本次讨论没有考虑其他库,如 CUBLAS、CURAND 以及可能的许多其他库。您没有询问它们,从概念上讲,这与询问如何重新分发任何其他库(例如 fftw3)没有什么不同。此外,对于这些库,分发使用运行时 API 构建的应用程序和分发使用驱动程序 API 构建的应用程序之间没有任何区别。您是否需要重新分发任何其他库将主要取决于这些库如何链接到您的应用程序(静态或动态)。
在本次讨论中,我避免对实际构成您的应用程序的文件进行任何讨论。这里几乎有无限的变化,因为您可以创建一个应用程序,该应用程序使用您自己创建的任意数量的动态链接库,这些库显然必须与您的应用程序一起分发。
另一方面,当然可以创建只需要一个文件,即“可执行文件”的运行时应用程序。
我个人不知道如何使用驱动程序 API 做到这一点(通过 silly tricks 除外),因此可以合理地说,对于驱动程序 API 应用程序,考虑到应用程序文件本身,您可能在大多数情况下至少分发 2 个文件。显然,您可以想出自解压存档样式包装器或其他方法来隐藏文件结构并使其看起来好像您的驱动程序 API 应用程序实际上仅包含 1 个文件。
【讨论】:
感谢您的详细回答。在上一段中,您提到“通常”需要为使用 CUDA 驱动程序 API 构建的应用程序分发至少 2 个文件。 2个文件是指.exe
文件和.ptx
文件吗?
@skm:除了嵌入到库中或作为 cubin 映像的一部分可执行文件之外,永远不需要(或不建议)以任何形式分发 PTX 代码
@talonmies:谢谢,我想知道@robert 表示需要为具有驱动程序 API 的应用程序分发哪些文件?此外,在这个答案(下面的链接)中,已经提到我们不需要为使用运行时 API 创建的应用程序分发 cubin
文件,这并不意味着我们必须为应用程序单独分发 cuBin 文件使用驱动程序 API 创建的?
是的,通常会有至少一个可执行文件(主机代码)和至少一个包含设备代码的文件,以一种或另一种形式。以上是关于哪些文件需要与包含 CUDA Driver API 的应用程序一起分发?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我应该使用 CUDA Driver API 而不是 CUDA Runtime API?
关于CUDA两种API:Runtime API 和 Driver API
通过WSL2搭建Pytorch1.10+CUDA11.4+NVIDIA Driver深度学习框架