【问题标题】:How do I release a command queue that contains waiting kernels?如何释放包含等待内核的命令队列?
【发布时间】:2015-09-17 02:01:12
【问题描述】:

在我的命令队列中,我有一个用户事件 E 和内核 K1、K2 和 K3。

我将 K1 加入队列,等待事件到 E。

我将 K2 加入队列,等待事件设置为 K1 的完成事件。

我将 K3 入队,等待事件设置为 K2 的完成事件。

假设我需要在 E 触发之前释放这个命令队列。我该怎么做呢?目前,发布只是挂起。事件如果我将 E 上的事件状态设置为 -1,仍然不会释放。

【问题讨论】:

    标签: opencl


    【解决方案1】:

    至少在

    我知道,这很糟糕。

    释放队列会先调用队列中的clFinish(),导致锁的情况。


    我遇到了这种情况,当时我有足够的 GPU 资源,而 CPU 是瓶颈。所以我在 GPU 中对下一次迭代进行排队,根据 CPU 结果,是否足够,我运行更多迭代或丢弃 GPU 结果。

    一旦 CPU 知道它不再需要的数据就能够停止排队的执行会很棒。但是你要么稍后排队(导致一些 GPU 空闲时间),要么一直运行它,但如果不需要它就不要等待结果(导致额外的 GPU 使用)。

    【讨论】:

    • 谢谢,伙计。我的目标版本是 1.2。我认为我的解决方案是:运行小的连续批次:在旧批次完成后重新排队新批次。我现在正在运行这个。它不是最优雅的解决方案,但看起来它不会影响性能,所以这很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2013-12-28
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多