如何同时运行 2 个 CUDA 应用程序?

1 parallel-processing cuda gpu

我对 CUDA 和 GPU 编程很陌生。我目前有 2 个 CUDA 应用程序(A.cu 和 B.cu),并且希望分别运行它们并计算执行的总时间。但我想同时运行两个应用程序并检查执行时间。有没有办法做到这一点?

换句话说,如何同时从 2 个不同的应用程序同时启动两个内核,以便它们并行运行?

在这方面的任何帮助都是有用的。提前致谢。

Rob*_*lla 6

如果您有 2 个 GPU,您可以在一个 GPU 上启动一个应用程序(在一个进程中),另一个在另一个 GPU 上启动(例如使用环境变量CUDA_VISIBLE_DEVICES。但是使用单个 GPU,您可以启动两个应用程序,但这些内核应用程序将被序列化。也就是说,当一个应用程序的内核正在运行时,GPU 不会调度另一个应用程序的内核。

通过使用 Hyper-Q 功能,您可以在具有 cc 3.5 的 GPU 上避免此限制。公开此功能的一种方式是通过CUDA 多进程服务器

但是,如果您不熟悉 CUDA 和 GPU 编程,那可能不是您想要的。此外,它还需要 Quadro 或 Tesla GPU。

要回答您的问题,要同时运行两个应用程序,首先要确保您的 GPU 设置为默认计算模式。您可以使用 nvidia-smi 实用程序查询并修改此设置。如果它在您的 GPU 上不可设置或“不适用”,则它应该处于默认模式。

之后,您可以随意启动这两个应用程序。他们都应该找到并尝试使用 GPU,但是内核的序列化可能不会给你想要的结果。

您的 GPU 的限制(例如全局内存大小)可能会同时对两个应用程序产生影响。例如,如果每个应用程序都希望在 GPU 上分配 1.5GB 的内存,而您有一个 2GB 的 GPU,那么cudaMalloc一个应用程序的 CUDA api 函数(例如)很可能会返回错误。

简而言之,特别是对于初学者来说,我想不出任何你想要这样做的充分理由。大概您追求的是额外的“并行”级别,但是当内核从单独的 linux 进程启动时,您不会以简单的方式实现这一目标。

  • GPU 可能需要两倍的时间来完成两倍的工作。 (2认同)