Cuda Nvidia Hyper Q和Nvidia Streams之间有什么区别?

Cuda Nvidia Hyper Q和Nvidia Streams之间有什么区别?,cuda,nvidia,gpgpu,cuda-streams,Cuda,Nvidia,Gpgpu,Cuda Streams,我一直认为Hyper-Q技术只是GPU中的流。后来我发现我错了(是吗?)。所以我读了一些关于Hyper-Q的书,更加困惑了。 我读了一篇文章,其中有两种说法: A.Hyper-Q是一种灵活的解决方案,允许从多个CUDA流、多个消息传递接口(MPI)进程,甚至一个进程内的多个线程进行单独的连接 B.Hyper-Q通过允许32个同时的硬件管理连接(与Fermi提供的单个连接相比),增加了主机和GK110 GPU之间的连接总数(工作队列) 在上述几点中,点B表示可以从主机创建多个连接到单个GPU的连接

我一直认为Hyper-Q技术只是GPU中的流。后来我发现我错了(是吗?)。所以我读了一些关于Hyper-Q的书,更加困惑了。 我读了一篇文章,其中有两种说法:

A.Hyper-Q是一种灵活的解决方案,允许从多个CUDA流、多个消息传递接口(MPI)进程,甚至一个进程内的多个线程进行单独的连接

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


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

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

在HyperQ到来之前,例如在Fermi上,主机上的驱动程序将来自所有流的命令(内核启动、内存传输等)放在一个工作队列中。这意味着命令不能相互超越,您必须做到最好的重叠

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

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

请注意,在32个硬件队列中,默认情况下只有8个用于节省资源。如果需要更多,请将设置为更高的值。

(如果未打开MPS)是否可以同时在hyper-q的多个工作队列中同时调度通过多个MPI进程或多个线程创建的多个CUDA上下文?