clEnqueueWriteImage在执行时间内不稳定

时间:2018-04-05 13:10:08

标签: c++ opencl

我试图在Android智能手机上进行一些图像处理。当我尝试使用clEnqueueWriteImage读取yuv时,有时需要1ms但有时需要20ms。 gray_data是一个640x480大小的1维uchar数组。我无法弄清楚问题出在哪里。你能帮帮我吗?感谢。

size_t origin[3] = { 0, 0, 0 };
size_t region[3] = { 640, 480, 1 };
clImageFormat.image_channel_order = CL_R;
clImageFormat.image_channel_data_type = CL_UNORM_INT8;
m_clOrigin = clCreateImage2D(m_pclConfig.context, CL_MEM_READ_WRITE | CL_MEM_ALLOC_HOST_PTR, &clImageFormat, 640, 480, 0, NULL, &ret);
ret = clEnqueueWriteImage(m_pclConfig.queue, m_clOrigin, CL_TRUE, origin, region, 0, 0, (void *)gray_data, 0, NULL, NULL);

2 个答案:

答案 0 :(得分:1)

确保在测量时间之前调用clFinish。

答案 1 :(得分:1)

最终,我不认为OpenCL规范对执行时间做出任何保证,这意味着行为是实现定义的。如果这是您需要快速访问的内容,您可以尝试先将其复制并保持加载直到您确实需要它为止,但除此之外您无能为力。