CUDA 计算和复制引擎队列限制

Posted

技术标签:

【中文标题】CUDA 计算和复制引擎队列限制【英文标题】:CUDA compute and copy engine queue limits 【发布时间】:2013-04-19 07:25:23 【问题描述】:

我似乎遇到了可以在计算引擎队列中排队的异步内核启动数量的限制。在此限制之后,主机被阻塞,GPU-CPU 并发丢失。这在 CUDA 编程指南中没有提到。

可以在计算引擎队列中排队的异步内核启动的最大数量是多少? 这个最大数量是否在某种程度上取决于正在启动的内核? CPU 将内核启动放入计算引擎队列所需的时间是否取决于正在启动的内核? 可以在复制引擎队列中排队的异步 memcpy 的最大数量是多少?

【问题讨论】:

【参考方案1】:

我不确定这个问题是否有一个通用的答案,在某种程度上它是平台和 CUDA 版本特定的 AFAIK。回答你的要点

我相信,限制是队列大小,因此存在队列操作的最大数量,而不是内核启动。相同的总限制应适用于内核、复制操作和流事件的任何组合。操作总数取决于平台和 CUDA 版本 没有 不会,但是一旦驱动队列被填满,提交任何异步操作的时间将会大大增加 参见第一点。我认为驱动程序不会区分副本、内核启动或事件。

我记得在 CUDA 2.1 左右进行了一些基准测试,发现一切都运行得很快,直到 24 个操作排队,然后后续操作排队的时间变慢了。到 CUDA 3.0 发布时,我没有任何代码可以达到旧版本中存在的限制,因此发生了一些变化。编写一个基准来检查更现代的 CUDA 版本的功能应该是微不足道的。

【讨论】:

以上是关于CUDA 计算和复制引擎队列限制的主要内容,如果未能解决你的问题,请参考以下文章

似乎达到了 CUDA 限制,但那是啥限制?

丢失在 CUDA 设备指针中

是否可以对给定代码的 Cuda 编程中使用的内核数量设置限制?

在 cuda 中使用静态分配的内存时的全局设备内存大小限制

cuda中如何选择block尺寸

AWS批处理 - 如何限制并发作业的数量