【发布时间】:2022-01-30 20:28:37
【问题描述】:
假设我们有两个 CUDA 流同时在 GPU 上运行两个 CUDA 内核。如何暂停使用我放入主机代码的指令运行的 CUDA 内核并使用主机代码中的指令恢复它? 我不知道在这种情况下如何编写示例代码,例如继续这个问题。
我的问题是,CUDA 中是否有一条指令可以暂停在 CUDA 流中运行的 CUDA 内核,然后恢复它?
【问题讨论】:
-
AFAIK,这不可能“暂停”正在运行的 CUDA 内核。所有基于流的函数都可用here。
-
CUDA 内核是运行一次并且您真的想要中断它,还是多次运行并且您想要调用之间的中断?
-
suspendDevice函数可能是一种方法吗? docs.nvidia.com/cuda/debugger-api/group__EXEC.html#group__EXEC 否则将内核重写为几个较小的内核或检查内核内部的标志,何时存储状态并终止。还请告诉我们,您为什么要暂停?为第一个内核或例如获得更多性能只是等待更多数据。在第二种情况下,内核可以继续运行,但一段时间内什么也不做。 -
@Sebastian,CUDA 内核运行一次。我有两个 CUDA 流,每个流都运行一个内核,这两个内核同时运行,我希望这两个 CUDA 流中的一个在出现条件时暂停运行其内核,并在需要时继续运行。
-
您能否说一下,是否出于性能原因暂停(例如,其他内核是否应该运行得更快)?您的内核是否有很多块(比 GPU 上的多处理器多得多)?线程的状态有多复杂,可以手动保存吗?
标签: cuda cuda-streams