У меня есть 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
цикла, который ставит в очередь ядра в моей очереди команд , Очевидно, что это не должно быть правильным способом. Как я могу сделать так, чтобы два ядра могли делиться данными?
Проблема в том, что 'd_vertexBuffer' содержит элементы' float4', и мне нужно редактировать каждый элементов для каждой итерации двух ядер. Если бы я просто хотел использовать новые элементы для каждой итерации, это стало бы неоправданно большим. –