Повторный вызов enqueueNDRangeKernel в OpenCL - PullRequest
2 голосов
/ 16 октября 2011

Какие другие функции OpenCL следует вызывать, когда enqueueNDRangeKernel вызывается повторно?

Мне не удалось найти учебник, который показывает использование enqueueNDRangeKernel таким образом, и мои попытки кодирования, к сожалению, привели к ошибке необработанного исключения. Подобный вопрос задавался ранее, но ответы, похоже, не относятся к моей ситуации.

В настоящее время у меня есть цикл, в котором я вызываю функции OpenCL в следующей последовательности:

  1. setArg
  2. enqueueNDRangeKernel
  3. enqueueMapBuffer
  4. enqueueUnmapMemObject

Я вызываю setArg, потому что вход в ядро ​​изменяется перед каждым вызовом enqueueNDRangeKernel. Я вызываю enqueueMapBuffer и enqueueUnmapMemObject, так как вывод из ядра используется в коде хоста. Ядро работает нормально с первого раза (вывод правильный), но во время второго прохода через цикл я получаю необработанную ошибку исключения при вызове enqueueMapBuffer.

Я использую следующую настройку:

  1. Intel OpenCL SDK с CL_DEVICE_TYPE_CPU (на процессоре Intel i7)
  2. Visual Studio 2010 IDE в Windows 7
  3. Хост-код написан на C ++ с привязками OpenCL C ++.

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Проблема решена ... Оказывается, я использовал правильную последовательность вызовов функций OpenCL.В моем ядре возникла проблема, которая появилась только после первой итерации цикла.

0 голосов
/ 09 декабря 2011

Я пытаюсь сделать то же самое, что и вы, но я застрял в одной точке. Мне удалось заставить работать программу OpenCL и ядро, оба, но когда я пытаюсь зациклить его несколько раз, это работает только тогда, когда я зацикливаю весь код от создания назначающего устройства для освобождения всей памяти _ _.

...