在OpenCL中重复调用enqueueNDRangeKernel

时间:2011-10-16 17:02:56

标签: opencl gpu gpgpu gpu-programming

重复调用enqueueNDRangeKernel时应该调用哪些其他OpenCL函数?

我无法找到以这种方式显示enqueueNDRangeKernel使用的教程,但遗憾的是,我的编码尝试导致了未处理的异常错误。之前已经提出了类似的问题,但答案似乎并不适用于我的情况。

我目前有一个循环,我按以下顺序调用OpenCL函数:

  1. setArg
  2. enqueueNDRangeKernel
  3. enqueueMapBuffer
  4. enqueueUnmapMemObject
  5. 我正在调用setArg,因为在每次调用enqueueNDRangeKernel之前,内核的输入都会发生变化。我正在调用enqueueMapBuffer和enqueueUnmapMemObject,因为内核的输出用在主机代码中。内核第一次运行正常(输出正确)但在第二次通过循环期间,我在调用enqueueMapBuffer时遇到未处理的异常错误。

    我正在使用以下设置:

    1. 带有CL_DEVICE_TYPE_CPU的Intel OpenCL SDK(在Intel i7 CPU上)
    2. Windows 7上的Visual Studio 2010 IDE
    3. 主机代码使用OpenCL C ++绑定以C ++编写。
    4. 感谢。

2 个答案:

答案 0 :(得分:1)

解决了问题......事实证明我正在使用正确的OpenCL函数调用序列。我的内核中存在一个问题,它只在循环的第一次迭代后出现。

答案 1 :(得分:0)

我正在尝试和你做同样的事情,但我一度陷入困境。我设法使OpenCL程序和内核都工作,但是当我尝试循环它时,它只有当我从创建一个分配设备循环整个代码到dealloc all mem _...