OpenCL中的内存偏移

时间:2012-08-22 22:23:40

标签: 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_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);
}

我对此做了一些天真的测试,似乎没有用。这是我得到的错误。

 invalid use of incomplete type 'struct _cl_mem'

除了将i作为额外参数传递之外,还有其他解决方法吗?引入额外参数需要将上游代码一直更改为内核..

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

m_input的偏移可以通过使用适当的偏移量 clEnqueueReadBuffer 来解决(即使它可能比执行单个调用更昂贵)。但是m_output稍后会重复使用,因此无法转移回主机。

编辑我的Google技能让我失望。

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

1 个答案:

答案 0 :(得分:0)

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