2013-07-29 3 views
3

У меня есть 2 ядра OpenCL, run_kernel и apply_kernel, которые я хочу выполнить последовательно один за другим, несколько раз. Выходной сигнал run_kernel содержит часть ввода для apply_kernel, но я не уверен, как это реализовать.Совместное использование данных OpenCL ядра

В настоящее время у меня есть один буфер cl_mem с именем d_vertexBuffer, который я заполнил данными, которые я хочу дать run_kernel, и он делает все правильно. Я поставил ядро ​​ARG так:

error = clSetKernelArg(run_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer); 

Я попытался установить apply_kernel использовать тот же d_vertexBuffer, но я предполагаю, что это ухудшит run_kernel доступа к нему, так как код OpenCL становится NaN всякий раз, когда он пытается получить доступ буфер. Я поставил apply_kernel так:

error = clSetKernelArg(apply_kernel, 0, sizeof(cl_mem), (void*) &d_vertexBuffer); 

Я создаю d_vertexBuffer так:

d_vertexBuffer = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR, vertexBufferSize, h_vertexBuffer, &error); 

Для запуска этих ядер несколько раз, у меня есть for цикла, который ставит в очередь ядра в моей очереди команд , Очевидно, что это не должно быть правильным способом. Как я могу сделать так, чтобы два ядра могли делиться данными?

ответ

1

Проблема в конечном итоге быть связаны; Я случайно использовал 2-индексный глобальный рабочий размер в apply_kernel, когда мне только захотелось 1, поэтому он выбрасывал NaN,

1

По звукам вы хотите добавить важный вывод от run_kernel на конец d_vertexBuffer. Вы можете сделать d_vertexBuffer достаточно большим, чтобы сохранить нормальные входные значения (vertexBufferSize) плюс дополнительные вершины с вывода run_kernel. run_kernel копирует часть своей продукции, что имеет значение для apply_kernel в раздел d_vertexBuffer выше vertexBufferSize

+0

Проблема в том, что 'd_vertexBuffer' содержит элементы' float4', и мне нужно редактировать каждый элементов для каждой итерации двух ядер. Если бы я просто хотел использовать новые элементы для каждой итерации, это стало бы неоправданно большим. –

Смежные вопросы