我有 2 个 OpenCL 内核,run_kernel
我apply_kernel
希望一个接一个地依次完成,几次。的输出run_kernel
包含 的一些输入apply_kernel
,但我不确定如何实现。
目前,我有一个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
循环将内核排入我的命令队列。显然,这一定不是正确的方法。我将如何使两个内核能够共享数据?