我有两个 OpenCL 内核,分别是
目前,我有一个名为
我尝试将
为了多次运行这些内核,我有一个
run_kernel
和 apply_kernel
,我想让它们按顺序运行几次。其中 run_kernel
的输出包含一些 apply_kernel
的输入,但我不确定如何实现这一点。目前,我有一个名为
d_vertexBuffer
的单个 cl_mem
缓冲区,我用要传递给 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
元素,而我需要在两个内核的每次迭代中编辑每个元素。如果我只是为每次迭代添加新元素,它将变得不合理地大。 - K. Barresi