OpenCL:对象未使用值进行初始化

OpenCL: Object not getting initialized with value

如果我执行以下操作:

this->bufferParams = cl::Buffer(context, CL_MEM_READ_ONLY, sizeof(Params), &params, NULL);

我的缓冲区似乎没有填充我的参数对象。但是如果我这样做

this->queue.enqueueWriteBuffer(this->bufferParams, CL_TRUE, 0, sizeof(Params), &params, NULL);

然后它似乎工作。 cl::Buffer 语法中是否有任何方法可以直接初始化 params 对象而不是执行入队命令

只需这样做:

this->bufferParams = cl::Buffer(context, CL_MEM_READ_ONLY|
CL_MEM_COPY_HOST_PTR, sizeof(Params), &params, NULL);

如果您不使用该标志从主机指针进行复制,则它不会进行复制。 该指针可能用于其他用途(如获取内存),因此您需要相应地设置标志。

额外:另外,对于非常小的结构对象,比如您的 Params 可能是,直接在 clSetKernelArgs() 上使用它。如果您只是设置一些从未写入的常量值,则无需创建缓冲区。它还通过更优化的内存路径。