【问题标题】:Is there a maximum number of streams in CUDA?CUDA 中是否有最大流数?
【发布时间】:2017-05-25 18:24:52
【问题描述】:

在 CUDA 中可以创建的流的最大数量吗?

为了澄清,我的意思是 CUDA 流,即允许您执行内核和内存操作的流。

【问题讨论】:

  • 你是指CUDA流(witch提供并行内存操作和内核执行)还是CUDA线程(执行单个内核)。

标签: cuda


【解决方案1】:

您可以创建的流的数量没有实际限制(至少 1000 个)。但是,您可以有效用于实现并发的流的数量是有限的。

在 Fermi 中,该架构支持 16 路并发内核启动,但从主机到 GPU 只有一个连接。因此,即使您有 16 个 CUDA 流,它们最终也会汇集到一个硬件队列中。这可能会创建错误的数据依赖关系,并限制可以轻松获得的并发量。

使用 Kepler,主机和 GPU 之间的连接数现在是 32(而不是使用 Fermi)。借助新的 Hyper-Q 技术,现在可以更轻松地让 GPU 忙于并发工作。

【讨论】:

  • 您可能想提到创建和销毁流的开销,如果创建和销毁许多流,这将产生影响。
  • @Mark Ebersole 但是为什么我们需要在主机和 GPU 之间建立 32 个连接来实现 Kepler 上仅有的 16 路并发内核启动 Streams?
  • 只有一个默认流,AFAIK:流 0(也称为“空流”)。如果您的意思是“每个线程的默认流”选项,它是每个主机线程一个。
【解决方案2】:

我没有在任何文档中看到限制,但这并不意味着所有流都将同时执行,因为这是硬硬件限制(多处理器、寄存器等)。

【讨论】:

    【解决方案3】:

    根据此 NVIDIA 演示文稿,最多为 16 个流(在 Fermi 上)。 http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf

    澄清一下,我已经成功创建了超过16个流,但我认为硬件只能支持16个并发内核,所以多余的在并发方面被浪费了。

    开普勒可能不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      相关资源
      最近更新 更多