如果我执行以下操作:
this->bufferParams = cl::Buffer(context, CL_MEM_READ_ONLY, sizeof(Params), ¶ms, NULL);
我的缓冲区似乎没有填充我的params对象。但是,如果我这样做
this->queue.enqueueWriteBuffer(this->bufferParams, CL_TRUE, 0, sizeof(Params), ¶ms, NULL);
然后它似乎工作。是否有任何方法在cl :: Buffer语法中直接初始化params对象而不是执行enqueue命令
答案 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), ¶ms, NULL);
上使用它。如果您只是设置一些从未写入的常量值,则无需创建缓冲区。它还通过更优化的内存路径。