【发布时间】:2016-07-13 17:34:01
【问题描述】:
我希望为我的内核使用本地工作组,但是我在将“NULL”参数传递给我的内核时遇到了一些问题。我希望知道如何使用我将在下面展示的方法来传递这些参数,而不是我在这里看到的 setArg:How to declare local memory in OpenCL?
我的内核有以下主机代码:
在 .h 文件中初始化:
std::shared_ptr<cl::make_kernel<cl::Buffer, cl::Buffer>> setInputKernel;
在主机代码中:
this->setInputKernel.reset(new cl::make_kernel<cl::Buffer, cl::Buffer>(program, "setInputs"));
将内核代码入队:
(*setInputKernel)(cl::EnqueueArgs(*queue, cl::NDRange(1000),cl::NDRange(1000)),
cl::Buffer, cl::Buffer);
内核代码:
kernel void setInputs(global float* restrict inputArr, global float* restrict inputs)
我已经为我的本地工作组参数设置了适当的大小和设置。但是,我没有成功地将数据传递到内核中。
带有本地工作组的内核更新:
kernel void setInputs(global float* restrict inputArr, global float*
restrict inputs, local float* inputArrLoc, local float* inputsLoc)
我曾尝试通过对内核的输入参数使用 NULL 或 cl::Buffer 来相应地更改我的代码,但没有奏效:
std::shared_ptr<cl::make_kernel<cl::Buffer, cl::Buffer, NULL, NULL>> setInputKernel;
std::shared_ptr<cl::make_kernel<cl::Buffer, cl::Buffer, cl::Buffer, cl::Buffer>> setInputKernel;
第一次尝试给我编译器问题,说函数需要一个值,而我没有给出一个值,第二次尝试在我尝试运行内核时返回 clSetKernelArg 错误。在这两个示例中,我都确保了头文件和主机文件的所有参数都是一致的。
当我将内核排入队列时,我还尝试将 NULL 放在我的 cl::Buffers 后面,但这会返回一个错误,告诉我没有可调用的函数。
在我的示例中如何将参数传递给我的内核?
【问题讨论】:
标签: opencl