如何在未安装 CUDA 工具包的机器上运行已编译的 CUDA 代码?

Posted

技术标签:

【中文标题】如何在未安装 CUDA 工具包的机器上运行已编译的 CUDA 代码?【英文标题】:How to run a compiled CUDA code on a machine that doesn't have the CUDA toolkit installed? 【发布时间】:2015-09-21 12:51:00 【问题描述】:

与 geforce (cc5.0) 的大量 cuda 核心相比,tesla(cc2.0) 的高内存吞吐量是否会比任何内存受限的应用程序受益?

如何在另一台带有特斯拉卡的机器上运行在带有geforce卡的机器上编译的exe文件而不在特斯拉机器上安装VS2010和cuda(即我希望这个exe文件是独立的应用程序)?

【问题讨论】:

【参考方案1】:

与 geforce (cc5.0) 的大量 cuda 核心相比,tesla(cc2.0) 的高内存吞吐量是否会比任何内存受限的应用程序受益?

受内存限制的 CUDA 应用程序可能会在具有更高内存带宽的 GPU 上运行得最快。当然还有其他因素会影响这一点,但这是一个合理的一般原则。我不确定您指的是哪两张卡,但是特定 GeForce GPU 完全有可能比特定 Tesla GPU 具有更高的内存带宽。 cc2.0 Tesla GPU(例如 M2050、C/M2070、C/M2075、M2090)可能确实比我所知道的 cc5.0 GeForce GPU(例如 GeForce GTX 750/750Ti)具有更高的内存带宽(超过 100GB/s) -- 小于 90GB/s)。

如何在另一台带有特斯拉卡的机器上运行在带有geforce卡的机器上编译的exe文件而不在特斯拉机器上安装VS2010和cuda(即我希望这个exe文件是独立的应用程序)?

有一些事情很容易做到,这将使编译的 CUDA 代码从一台机器移动到另一台机器变得更加容易。

    确保 CUDART 库是静态链接的。这应该是最新 CUDA 版本的 默认 设置。你可以阅读更多关于它的信息here。如果您正在使用其他库(例如 CUBLAS 等),您将需要确保这些其他库也静态链接(如果可能)或将库(linux 中的 .so 文件,windows 中的 .dll)与您的应用程序捆绑在一起。

    针对一系列计算架构进行编译。例如,如果您知道您只需要并且想要针对 cc2.0 和 cc5.0,那么请确保您的 nvcc 编译命令行包含针对 cc2.0 和 cc5.0 的开关。这是一个相当复杂的话题,但是如果您查看CUDA sample codes(makefile 或 VS 项目),您会发现为各种架构构建的项目示例。为了获得最大的兼容性,您可能需要确保在可执行文件中同时包含 PTX 和 SASS。你可以阅读更多关于它的信息here 和here。

    确保机器具有兼容的驱动程序。例如,如果您使用 CUDA 7.0 工具包编译 CUDA 代码,您将只能在安装了兼容 GPU 驱动程序的机器上运行它(驱动程序是与工具包分开的项目。需要 GPU 驱动程序来制作使用 GPU,CUDA 工具包不是。)对于 CUDA 7,这大致意味着您希望在要运行 CUDA 7 编译代码的任何机器上安装 r346 或更新的驱动程序。其他 CUDA 工具包版本具有其他相关的最低驱动程序版本。作为参考,answer 提供了一些最新 CUDA 工具包版本所需的近似最低 GPU 驱动程序版本的概念。

【讨论】:

感谢先生提供的信息丰富的答案,我希望 GPU 驱动程序之间是否存在向后兼容性? 据我所知,没有办法在较旧的驱动程序上运行为较新的 CUDA 运行时版本编译的代码,即不支持较新运行时版本的驱动程序。我不知道你是否真的在这里问一个问题,或者这个问题到底是什么。

以上是关于如何在未安装 CUDA 工具包的机器上运行已编译的 CUDA 代码?的主要内容,如果未能解决你的问题,请参考以下文章

在未安装 Visual Studio 的其他机器上运行 c# sql 代码

通过命令行构建 .NET Core 应用程序,使其可以在未安装 .NET Core 的机器上运行

在 Windows 上使用 Jenkins 运行 Selenium 测试期间,如何在未实际登录机器时捕获屏幕截图?

CUDA 编译是不是依赖于显卡的存在? [复制]

如何在加速示例包中的示例上启用 CUDA?

我可以在没有 Visual Studio 的 Windows 7 中编译和运行 cuda 程序吗?