我有2个OpenCL内核,run_kernel
和apply_kernel
,我希望依次完成几次。 run_kernel
的输出包含apply_kernel
的一些输入,但我不确定如何实现此操作。共享OpenCL内核数据
目前,我有一个单一的cl_mem
缓冲区名为d_vertexBuffer
,我填写了我想给run_kernel
的数据,并且它正确地完成了它的工作。我设置精氨酸这样的内核:
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'元素,我需要编辑每个元素用于两个内核的每次迭代的元素。如果我在每一次迭代中都要加入新的元素,它会变得不合理。 –