打开CL clEnqueueReadBuffer执行时间

时间:2012-03-22 14:41:33

标签: opencl execution-time

我正在写开放式fl flocking,我有一个奇怪的问题。在Kernel Execute之前,clEnqueueReadBuffer从gpu mem读取到程序mem 20000数组float没有问题,非常快,但是在内核执行后对那个传递的数组做了一些操作,readbuffer持续时间太长(~150 ms)。为什么?在这两种情况下,数组都填充了数据。我的内核可能做错了什么? (传递数组是__global)。

1 个答案:

答案 0 :(得分:2)

clEnqueueNDRangeKernel实际上没有启动内核,它会“排列”它们。 OpenCL实现可以随时启动内核(在这种情况下,当您要求读取结果时,因为它需要运行内核来了解结果)。

但是,您可以强制实现通过clFinish启动内核。

在您的情况下,150ms延迟实际上是内核运行所需的时间。

如果在执行和第二次读取之间调用clFinish,它将起作用。