将排队的OpenCL内核出列

将排队的OpenCL内核出列,opencl,Opencl,如果要释放GPU资源,我需要将排队的OpenCL内核出列。有可能吗 我所做的是将内核和I/O拷贝排队。然后在主机端检查此结果是否正确。但是,由于70%的时间是不正确的,我在主机中检查结果时排队等待另一次运行(CPU+GPU是并行的!)。这样,GPU的使用率为100% 然而,一旦我发现结果是正确的,我就不能取消正在进行的内核。这是在浪费GPU资源 我并行使用了许多OpenCL队列和内核,因此这有效地降低了我的速度,并在GPU中设置了瓶颈。甚至可以将该内核出列吗 谢谢 这是不可能的。即使是clRel

如果要释放GPU资源,我需要将排队的OpenCL内核出列。有可能吗

我所做的是将内核和I/O拷贝排队。然后在主机端检查此结果是否正确。但是,由于70%的时间是不正确的,我在主机中检查结果时排队等待另一次运行(CPU+GPU是并行的!)。这样,GPU的使用率为100%

然而,一旦我发现结果是正确的,我就不能取消正在进行的内核。这是在浪费GPU资源

我并行使用了许多OpenCL队列和内核,因此这有效地降低了我的速度,并在GPU中设置了瓶颈。甚至可以将该内核出列吗

谢谢


这是不可能的。即使是
clReleaseCommandQueue
也会等待内核完成它的执行。

我想了一下,但我需要一些确认。谢谢关于如何优化这种情况,还有其他想法吗?您可以在设备端检查结果吗?您不能将运行内核的请求出列。您可以让自己的队列为真实队列提供数据,然后从那里将其出列。如果您在检查和内核执行之间有一个周期的延迟,您就能够保持真正的队列足够满,以保证性能。@Dithermaster也可以这样做,但我认为只能使用多个并行线程。一个队列可能会以这种方式运行得更慢。我有一个这样的用例,我将内核分为几个具有不同偏移量的运行,以处理数据的每个部分。这样,当我不需要处理所有数据时,我可以更好地控制停止的能力。这显然不会在所有情况下都起作用,但由于大多数优化的GPGPU代码已经被分成了几个小的并行处理组,所以这不应该是一个太大的问题。因此,对于您的情况,您应该运行_A_PART_1,运行_A_PART_2,然后运行_B_PART_1,运行_B_PART_2,然后当您释放命令队列时,它将只完成当前正在执行的一小部分。