如何发布包含等待内核的命令队列?

时间:2015-09-16 13:44:00

标签: opencl

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

我将K1排队,并将等待事件发送给E。

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

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

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

1 个答案:

答案 0 :(得分:1)

至少在<中没有办法做到这一点CL 2.0。 唯一的解决方案是不要将它们排在第一位。

我知道,这很糟糕。

释放队列将首先调用队列中的clFinish(),从而导致锁定情况。

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

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