9

我有一个应用程序,我想在多个进程之间共享一个 GPU。也就是说,这些进程中的每一个都将创建自己的 CUDA 或 OpenCL 上下文,以相同的 GPU 为目标。根据 Fermi 白皮书 [1],应用程序级别的上下文切换不到 25 微秒,但启动在 GPU 上启动时会被有效地序列化——因此 Fermi 不能很好地解决这个问题。根据 Kepler 白皮书 [2],有一种称为 Hyper-Q 的东西,它允许来自多个 CUDA 流、MPI 进程或进程中的线程的多达 32 个同时连接。

我的问题:有没有人在 Kepler GPU 上尝试过这个并验证了它的内核在从不同的进程调度时是同时运行的?这只是 CUDA 功能,还是也可以在 Nvidia GPU 上与 OpenCL 一起使用?AMD 的 GPU 是否支持类似的东西?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

4

2 回答 2

7

针对第一个问题,NVIDIA 在博客中发布了一些 hyper-Q 的结果。该博客指出,移植 CP2K 的开发人员能够更快地获得加速结果,因为 hyper-Q 允许他们或多或少地使用应用程序的 MPI 结构并在单个 GPU 上运行多个等级,并获得这样可以提高 GPU 的有效利用率。正如评论中提到的,这个(hyper-Q)功能目前仅在 K20 处理器上可用,因为它依赖于 GK110 GPU。

于 2012-10-05T13:51:40.303 回答
-1

我已经从 Fermi 架构运行了同步内核,它运行得非常好,事实上,这通常是从硬件中获得高占用率的唯一方法。我使用了 OpenCL,您需要从单独的 cpu 线程运行单独的命令队列才能执行此操作。Hyper-Q 能够从另一个内核中分派新的数据并行内核。这仅在开普勒上。

于 2013-05-29T08:24:18.877 回答