【问题标题】:CUDA graph stream capture with thrust::reduceCUDA 图形流捕获与thrust::reduce
【发布时间】:2020-07-13 04:10:02
【问题描述】:

当我尝试捕获流执行以构建 CUDA 图时,调用 thrust::reduce 会导致运行时错误 cudaErrorStreamCaptureUnsupported: operation not permitted when stream is capturing。我已经尝试将归约结果返回给主机和设备变量,并且我通过thrust::cuda::par.on(stream) 在适当的流中调用归约。有什么方法可以将 thrust 函数执行添加到 CUDA 图中?

【问题讨论】:

    标签: cuda thrust cuda-streams


    【解决方案1】:

    Thrust 的归约操作是主机端的阻塞操作。我假设您正在使用归约结果作为以下内核之一的参数。因此,当您捕获 CUDA 图时,它无法实例化图可执行文件,因为您依赖于主机端的变量,但在缩减内核完成执行之前不可用。作为一种解决方案,您可以尝试将主机节点添加到返回缩减结果的图表中。

    【讨论】:

    • 我还在一些较早的答案中发现reduce 只返回主机;然而,在推力文档中,reduce 被声明为__host__ __device__ T thrust::reduce——事情是否发生了变化,它现在可以返回设备了吗?
    • 如果从设备或全局函数调用它,它将返回到设备。但是,如果您从主机端调用该函数,则返回值在主机内存中。因此,您不能将从主机调用的归约操作的结果存储在设备变量中。
    猜你喜欢
    • 2022-01-11
    • 2012-02-21
    • 2019-11-19
    • 2014-09-11
    • 2011-01-24
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多