CUDA中是否有流的最大数量限制?

30

在CUDA中是否存在可以创建的流的最大数量?

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


你是指提供并行内存操作和内核执行的CUDA流(CUDA streams),还是用于执行单个内核的CUDA线程(CUDA threads)? - KoppeKTop
3个回答

26

您可以创建的流的数量没有实际限制(至少有成千上万个)。但是,使用流来实现并发性的数量是有限制的。

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

使用Kepler后,主机与GPU之间的连接数现在为32个(而不是Fermi的1个)。通过新的Hyper-Q技术,现在更容易让GPU保持繁忙并进行并发工作。


2
你可能需要提到创建和销毁流的开销,如果创建和销毁许多流,则会产生影响。 - harrism
1
但是为什么我们需要在Kepler上进行16路并发内核启动的流之间的主机和GPU之间有32个连接呢?@Mark Ebersole - Alex
据我所知,只有一个默认流:流0(也称为“空流”)。如果您指的是“每个线程的默认流”选项,则每个主机线程有一个默认流。 - harrism
这个答案急需更新(我现在无法编辑它)。CC 7.5 - 9.0(图灵,安培,艾达和霍珀)都支持最多128个并发启动。更多信息请参见此处(第二个表格,第一项)。 - paleonix

18

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


我没有在任何文档中看到过这方面的限制,但并不意味着所有的流都能够并发执行,因为这受到硬件限制(例如多处理器、寄存器等)的制约。

13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接