在我的上一个问题OpenCl cleanup causes segfault.中,有人暗示缺少事件处理,即不等待代码完成,可能导致seg错误。从那时起,我再次查看我使用的教程,但他们没有注意事件(Matrix Multiplication 1 (OpenCL)和NVIDIA_OpenCL_GettingStartedLinux.pdf
)或详细讨论它(对我来说)是可以理解的。
您是否了解OpenCL中where and how to wait
的教程?
的Merci!
答案 0 :(得分:6)
我没有关于OpenCL事件的教程,我不是专家,但是因为没有其他人在回应......
根据经验,您需要等待任何名为clEnqueue*
的函数。这些函数在作业完成之前立即返回。确保队列完成的最简单方法是调用clFinish()
。在整个队列完成之前,它不会返回。
如果你想获得一点点发烧友,大多数clEnqueue*
函数都有一个可以传递的可选cl_event
参数。你可以使用clGetEventInfo()
检查特定事件,并且您可以等待特定的一组事件以clWaitForEvents()
完成。