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

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

我一直以为Hyper-Q技术就是GPU中的流。后来我发现我错了(我是吗?)。所以我正在阅读一些有关 Hyper-Q 的资料,结果更加困惑了。 我正在浏览一篇文章,其中有以下两个陈述:

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

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

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

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

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

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

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

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