OpenCL:对象没有用值初始化

时间:2016-06-13 10:34:19

标签: opencl

如果我执行以下操作:

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

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

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

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

1 个答案:

答案 0 :(得分:4)

这样做:

//seperate service MyProfileService
var data=MyProfileService.getProfileDetails().then(function(){
..
});

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

EXTRA:此外,对于非常小的结构对象,如Params可能的那样,直接在this->bufferParams = cl::Buffer(context, CL_MEM_READ_ONLY| CL_MEM_COPY_HOST_PTR, sizeof(Params), &params, NULL); 上使用它。如果您只是设置一些从未写入的常量值,则无需创建缓冲区。它还通过更优化的内存路径。