【发布时间】:2018-01-25 13:42:38
【问题描述】:
假设我碰巧分配了一些具有 200 个浮点值的 OpenCL 内存。
cl::Buffer newBuf = cl::Buffer(op::CLManager::getInstance(gpuID)->getContext(), CL_MEM_READ_WRITE, sizeof(float) * 200);
现在我想将此 cl::Buffer 拆分为两个对象,一个包含前 100 个浮点对象,另一个包含后续对象,以便我可以将它们传递到两个内核中。我找不到任何解释如何执行此操作的资源。
我别无选择,因为我正在使用的库返回给我一个非常大的缓冲区,我希望在 CPU 端将其拆分为较小的 cl::Buffers 以传递到内核,而不会产生内存成本(在分裂)
我试过这样做,但它会出现段错误:
cl::Buffer newBuf = cl::Buffer(op::CLManager::getInstance(gpuID)->getContext(), CL_MEM_READ_WRITE, sizeof(float) * 200);
cl::Buffer part1 = cl::Buffer((cl_mem)((float*)(newBuf.get())+0),true); // OK
cl::Buffer part2 = cl::Buffer((cl_mem)((float*)(newBuf.get())+100),true); // SEGFAULT
【问题讨论】:
标签: opencl