【问题标题】:What is the difference between Nvidia Hyper Q and Nvidia Streams?Nvidia Hyper Q 和 Nvidia Streams 有什么区别?
【发布时间】:2019-05-22 05:18:46
【问题描述】:

我一直认为 Hyper-Q 技术不过是 GPU 中的流。后来我发现我错了(是吗?)。所以我读了一些关于 Hyper-Q 的书,却更加困惑了。 我正在浏览一篇文章,它有以下两个陈述:

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

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

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

【问题讨论】:

    标签: cuda nvidia gpgpu cuda-streams


    【解决方案1】:

    将 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 设置为更高的值。

    【讨论】:

    • (如果没有开启MPS)通过多个MPI进程或多个线程创建的多个CUDA上下文可以同时调度到hyper-q的多个工作队列中吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2019-03-18
    相关资源
    最近更新 更多