在我的命令队列中,我有一个用户事件E和内核K1,K2和K3。
我将K1排队,并将等待事件发送给E。
我将K2排队,等待事件设置为K1的完成事件。
我将K3排队,等待事件设置为K2的完成事件。
假设我需要在E触发之前释放此命令队列。我该怎么做呢?目前,发布只是挂起。事件如果我将E上的事件状态设置为-1,仍然不会释放。
答案 0 :(得分:1)
至少在<中没有办法做到这一点CL 2.0。 唯一的解决方案是不要将它们排在第一位。
我知道,这很糟糕。
释放队列将首先调用队列中的clFinish()
,从而导致锁定情况。
当我拥有足够的GPU资源并且CPU是瓶颈时,我遇到了这种情况。所以我在GPU中排队下一次迭代,并根据CPU结果,是否足够,我运行更多迭代或丢弃GPU结果。
一旦CPU知道不再需要数据,就能够立即停止排队执行。但是您要么稍后排队(导致一些GPU空闲时间),要么一直运行它,但是如果不需要则不要等待结果(导致额外的GPU使用)。