OpenCL中的内存偏移

OpenCL中的内存偏移,opencl,Opencl,有没有办法做到这一点 int length = 1000; float *h_input = new float[length * 100]; size_t bytes = length * 100 * sizeof(float); cl_mem m_input = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err); cl_mem m_output = clCreateBuffer(context, CL_MEM

有没有办法做到这一点

int length = 1000;
float *h_input = new float[length * 100];
size_t bytes = length * 100 * sizeof(float);
cl_mem m_input  = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
cl_mem m_output = clCreateBuffer(context, CL_MEM_READ_WRITE, bytes, NULL, &err);
clEnqueueReadBuffer (queue, m_input, true, 0, bytes, h_input, 0, NULL, NULL);
for (int i = 0; i < 100; i++)
{
 some_function(length, m_input + i, m_output + i);
}
除了将i作为额外参数传递之外,还有其他解决方法吗?引入额外的参数将需要从上游代码一直更改到内核

编辑为清晰起见添加了更多信息

m_输入的偏移量可以通过使用适当的偏移量执行
clenqueueradbuffer
来解决(即使它可能比执行单个调用的成本更高)。但是,m_输出稍后会重新使用,因此无法将其传输回主机

编辑我的谷歌技能让我失望


但我通过看cl.h.找到了答案。这就是答案。目前还没有答案。因此,我将使用
clCreateSubBuffer()
接受第一个答案和示例代码。我通过查看cl.h找到了答案。这就是答案。目前还没有答案。因此,我将使用
clCreateSubBuffer()

使用示例代码接受第一个答案,假设您正在编写主机代码,而不是映射内存然后使用映射指针所需的内核
cl_mem
是一个句柄,而不是指向实际内存的指针。@flexo,为更清晰起见添加了更多信息。你能详细说明一下可以做什么吗?在这段代码中你到底想做什么?输入和输出缓冲区、句柄和指针都混在一起了——这现在没有任何意义。
 invalid use of incomplete type 'struct _cl_mem'