能否让不同流上的多个CUDA图主机执行节点并发执行?
问题:如何实现不同CUDA流上主机执行节点的并发?
问题背景
希望通过CUDA图的主机执行节点(cudaGraphAddHostNode)在主机端实现流的阻塞与解除逻辑,替代设备端等待核函数,同时保留CUDA图的使用方式。
测试场景
编写了两个CUDA图:
- 图1:依次执行主机到设备拷贝 → 调用主机函数循环等待
event变量不为0(阻塞逻辑)→ 设备到主机拷贝 - 图2:依次执行设备内存memset操作 → 调用主机函数将
event变量设为1(触发阻塞解除)
测试流程:在一个流上启动图1,在另一个独立流上启动图2,之后同步第一个流。
现象
两个图均正常启动,图1的“等待”主机函数执行后成功阻塞对应流,但图2的“触发”主机函数始终未执行。
推测原因
CUDA可能会序列化同一个上下文内的所有主机执行节点,导致“触发”节点一直等待“等待”节点完成。CUDA文档也明确说明:无强制顺序的主机函数(如独立流中的)执行顺序未定义,可能被序列化。
已尝试方案
从不同主机线程启动两个图,但问题仍未解决。
疑问
是否存在可行方法实现不同流上主机执行节点的并发?
内容的提问来源于stack exchange,提问作者surabax
相关产品推荐
相关产品推荐

