What is the difference between Nvidia Hyper Q and Nvidia Streams?

san*_*age 1 cuda gpgpu nvidia cuda-streams

I always thought that Hyper-Q technology is nothing but the streams in GPU. Later I found I was wrong(Am I?). So I was doing some reading about Hyper-Q and got confused more. I was going through one article and it had these two statements:

A. Hyper-Q is a flexible solution that allows separate connections from multiple CUDA streams, from multiple Message Passing Interface (MPI) processes, or even from multiple threads within a process

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

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

ter*_*era 5

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

在HyperQ到达之前,例如在Fermi上,主机上的驱动程序将所有流中的命令(内核​​启动,内存传输等)放置在单个工作队列中。这意味着命令不能互相超越,并且您必须小心在主机上正确的顺序发出命令以实现最佳重叠。

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

这对于多线程宿主代码尤其重要,在多宿主代码中,如果没有线程之间的额外同步,就无法控制顺序。

请注意,在32个硬件队列中,默认情况下仅使用8个队列来节省资源。在设置CUDA_?设备_?MAX_?Connections环境变量到一个较高的值,如果你需要更多。