4

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

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

1 回答 1

3

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

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

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

于 2013-04-25T15:58:26.713 回答