在CUDA图中使用循环



我有内核A、B和C,它们需要按顺序执行。

A->B->C

它们在while循环中执行,直到满足某些条件。

while(predicate) {
A->B->C
}

while循环可以执行3到2000次-关于循环应该停止的信息由内核C产生。

由于执行与相对较小内核的多次调用有关,CUDA Graph听起来是个好主意。然而,我看到的CUDA图实现都是线性的或树状的,没有循环。

一般来说,如果循环不可能,那么从内核C调用的长度为2000、有可能提前停止的长内核链也可以。但是,是否可以通过内核内部的调用在某个位置停止图形执行?

CUDA图没有条件。当图的前一个顶点完成时,它就会被访问/执行,仅此而已。所以,从根本上说,你不能用CUDA图来做这件事。

你能做什么?

  1. 为循环迭代创建一个较小的图,并重复调度它
  2. 让A、B和C通过检查循环谓词开始执行,如果它成立,则跳过所有工作。在这种情况下,您可以安排A->B->C->A->B->C等等——从某个时候开始,这将毫无作用
  3. 不要依赖CUDA图形API。它不是一种通用的并行执行机制-(

最新更新