0

有没有办法做这样的事情。

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 稍后会重复使用,因此不能选择传输回主机。

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

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

4

1 回答 1

0

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

于 2013-01-07T18:47:39.193 回答