Nvidia Hyper Q和Nvidia Streams有什么区别?

时间:2019-05-22 05:18:47

标签: cuda nvidia gpgpu cuda-streams

我一直认为Hyper-Q技术不过是GPU中的流。后来我发现我错了(是吗?)。因此,我在阅读有关Hyper-Q的文章时感到困惑。 我正在阅读一篇文章,它有以下两种说法:

A。 Hyper-Q是一种灵活的解决方案,它允许来自多个CUDA流,多个消息传递接口(MPI)进程甚至一个进程中的多个线程的单独连接

B。 Hyper-Q通过允许32个同时进行的硬件管理的连接(与Fermi可用的单个连接相比),增加了主机与GK110 GPU之间的连接(工作队列)总数

在上述几点中, B点说,主机可以创建多个连接到单个GPU。这是否意味着我可以通过不同的应用程序在一个简单的GPU上创建多个上下文?这是否意味着我将不得不在不同的流上执行所有应用程序?如果我的所有连接都占用内存并计算资源消耗,谁来管理资源(内存/内核)调度,该怎么办?

1 个答案:

答案 0 :(得分:3)

将HyperQ视为在设备端的硬件中实现的流。

在HyperQ到来之前,例如在Fermi上,主机上的驱动程序将所有流中的命令(内核​​启动,内存传输等)放在单个工作队列中。这意味着命令不能互相超越,并且您必须careful issuing them in the right order on the host才能实现最佳重叠。

在带有HyperQ的GK110 GPU和更高版本的设备上,该设备上至少有32个工作队列。这意味着来自不同队列的命令可以相对于彼此重新排序,直到它们开始执行。因此,上面链接的示例中的两种排序都可以在GK110设备上实现良好的重叠。

这对于多线程主机代码尤为重要,在这种情况下,如果没有线程之间的额外同步,就无法控制顺序。

请注意,默认情况下,在32个硬件队列中仅使用8个来节省资源。如果需要更多,请将CUDA_​DEVICE_​MAX_​CONNECTIONS environment variable设置为更高的值。