3

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

4

2 回答 2

1

这个问题最终变得无关紧要。当我只想要 1 时,我不小心使用了 2 索引全局工作大小apply_kernel,所以它抛出了 NaN,

于 2013-07-29T19:34:47.887 回答
1

听上去,您希望能够将重要的输出附加run_kerneld_vertexBuffer. 您可以做得d_vertexBuffer足够大以存储正常的输入值 ( vertexBufferSize) 以及 的输出中的额外顶点run_kernelrun_kernel将其重要的输出部分复制到上面apply_kernel的部分d_vertexBuffervertexBufferSize

于 2013-07-29T16:41:39.113 回答