【问题标题】:Dequeue a queued OpenCL kernel将排队的 OpenCL 内核出列
【发布时间】:2013-08-22 18:41:23
【问题描述】:

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

我正在做的是对内核和 I/O 副本进行排队。然后在主机端检查这个结果是否正确。但是由于 70% 的时间是不正确的,所以我在主机中检查结果时将另一个运行排队(CPU+GPU 是并行的!)。这样,GPU 就 100% 处于使用状态。

但是,一旦我发现结果是正确的,我就无法取消正在进行的内核。就是在浪费 GPU 资源。

我正在并行使用许多 OpenCL 队列和内核,因此这实际上减慢了我的速度并将瓶颈置于 GPU 中。甚至可以使内核出队吗?

谢谢。

【问题讨论】:

  • 我有一个这样的用例,我将内核分成几个不同偏移量的运行来处理数据的每个部分。这样,当我不需要处理所有数据时,我可以更好地控制停止的能力。这显然不会在所有情况下都有效,但由于大多数优化的 GPGPU 代码已经分成小的并行处理组,这应该不是太大的问题。因此,对于您的情况,您将拥有 RUN_A_PART_1, RUN_A_PART_2 然后 RUN_B_PART_1, RUN_B_PART_2 然后当您释放命令队列时,它只会完成当前正在执行的小子集。

标签: opencl


【解决方案1】:

这是不可能的。甚至clReleaseCommandQueue 也会等待内核完成执行。

【讨论】:

  • 我虽然知道,但我想要一些确认。谢谢!
  • 关于如何优化这种情况的任何其他想法?
  • 能在设备端查看结果吗?
  • 您无法将请求出列以运行内核。您可以让自己的队列为真正的队列提供服务,然后从那里将其出队。如果您在检查和内核执行之间有一个周期的延迟,那么您将能够使实际队列保持足够满以提高性能。
  • @Dithermaster 这也可以,但我认为只能使用多个并行线程。这样一来,一个队列可能会运行得更慢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2021-09-27
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2011-12-06
相关资源
最近更新 更多