我有 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循环将内核排入我的命令队列。显然,这一定不是正确的方法。我将如何使两个内核能够共享数据?